Python AI極簡入門4:使用機器學習回歸模型預測房價

一、回歸預測

在前面的文章中我們介紹了機器學習主要解決分類、回歸和聚類三大問題。今天我們來具體了解一下使用機器學習演算法進行回歸預測。

回歸預測主要用於預測與對象關聯的連續值屬性,得到數值型的預測數據。回歸預測的應用場景有各類的價格預測、相關性的反應預測等。

下面,我們就使用sklearn模塊,以一個sklearn中集成的波士頓房價數據集來演示如何進行回歸預測。

二、波士頓房價預測

1、引入數據集

在sklearn中內置的數據集都位於datasets子模塊下,我們可以直接進行導入:

導入之後,看看數據集中的內容:

其中有五個鍵,從字面意思上理解,可以發現data是數據集中所有的數據特徵,DESCR是數據集的描述信息,target是數據集特徵對應的目標值,feature_name則是數據特徵的名稱。

我們先來看看數據特徵的名稱:

可以發現數據集中有13個特徵,每個特徵具體是什麼意思,倒不清楚,我們可以在DESCR描述中找到具體意思:

最後可以知道每個數據特徵的含義如下:

  • CRIM:人均犯罪率 ;
  • ZN:住宅用地超過兩萬五千平方英尺的比例 ;
  • INDUS:城鎮的非零售營業比例;
  • CHAS:河流分界;
  • NOX:一氧化氮濃度 ;
  • RM:住宅平均房間數;
  • AGE:1940年之前建造的房屋業主比例;
  • DIS:距離波士頓五個就業中心的加權距離;
  • RAD:徑向公路的可達指數;
  • TAX :每一萬美元財產的全額財產稅率
  • PTRATIO :城鄉教師比例;
  • B :黑人比例
  • LSTAT :低層人群比例
  • MEDV :房屋價格中值

再來看看具體的數據特徵和目標數據值:

數據特徵形狀:

數據特徵概覽:

數據特徵一共有506行,13列,正好對應13個數據特徵。而目標數據值的也正好是506個:

相當於是已經處理好的數據了。

但是對於初學者來說,這樣處理好的數據看起來不是太直觀,我們使用Pandas將其還原為DataFrame的形式,可以直觀地看出這個數據集到底是什麼樣的:

對於熟悉使用pandas的同學來說,這樣看這個數據集是不是親切多了。

好了,我們可以直接進行下一步。

2、分割訓練數據和測試數據

為了檢驗我們創建和訓練好的機器學習模型的效果,將數據集分割為訓練集和測試集是必須的。

而在sklearn中,也有一個專門的介面方法用於分割數據集的訓練集和測試集——train_test_split,我們首先導入它:

然後將我們的數據集data傳入,並設置測試集的比例為15%:

3、選擇一個回歸演算法估計器

在sklearn中,所有的機器學習演算法都以「估計器」的形式來呈現,每一個估計器都是一個類,機器學習模型通過實例化一個估計器的類來進行創建。比如線性回歸的演算法估計器:

每一個演算法估計器,無論是監督學習演算法還是非監督學習演算法,都擁有一個fit()方法,用於接收訓練數據集來訓練數據,比如這樣:

同時每一個演算法估計器都有用一個predict()方法,用於接收數據來進行預測,比如這樣:

在sklearn中,各類機器學習演算法的API設計根據不同的用途的演算法進行劃分,我們可以方便地調用自己想要的演算法,每一個監督學習演算法,都由一個單獨的子模塊構成,其下包含演算法的具體類,比如廣義的線性回歸演算法:

其中根據用途,有的演算法 可細分為用於回歸的估計器和用於分類的估計器。

在此,我們選擇隨機森林演算法的用於回歸的估計器:

首先,導入演算法估計器:

接著,實例化隨機森林回歸估計器,設置演算法的參數並將訓練集傳入進行訓練:

訓練好模型之後,再使用predict()方法對訓練集進行預測:

這樣,我們就獲得了使用隨機森林回歸模型對測試集進行預測的數據了,其為一個一維數組,我們可以直接列印出來看到:

還記得我們分割訓練測試集的時候,有過一個y_test的數組吧?它是測試集x_test數據特徵對應正確的房價結果,我們也來看看其數據:

如何比較正確數組和預測出來的數組的值的正確度呢?一個比較蠢的方法是通過遍歷這兩個數組進行對比,查看其差值:

如果測試數據集少的話,這樣來比較似乎工作量還不大,要是測試集很大那就沒辦法了。幸而,sklearn中也提供了對模型的評估方法,所有的評估方法都集成在sklearn.metrics子模塊中。針對回歸模型,我們可以使用平均絕對誤差MAE和均方差MSE以及R2分數來對回歸模型評估:

然後在評估方法中傳入預測數組和正確數組:

最終得到了我們的平均絕對誤差值、均方差值和R2分數。其中,R2分數理論最佳值為1,平均絕對誤差理論最佳值為0.0,均方差理論最佳值也為0.0,嗯,這個機器學習隨機森林回歸模型的效果如何?大家自己評估,也可以自己調用其他的回歸模型來測試,看看哪個演算法對這個數據集的預測效果較好。

下一篇,我們將創建一個用於分類的預測模型。

歡迎關注微信公眾號「州的先生」 微信號:zmister2016,交流討論。

推薦閱讀:

Python中你可能不知道的platform
[19] Python集合與字典
有 N 個二維點,如何求能夠將這些點全部覆蓋的面積最小的橢圓的長軸與短軸?
使用Python數據透視表挖掘幸福數據
使用Python讀取AutoCAD DXF文檔

TAG:Python | 機器學習 | 編程 |