機器學習——決策樹建模及預測

本篇中將分4步介紹一個簡單的決策樹預測模型的構建過程,讓你對建模過程有初步瞭解。

1. 選擇數據集

你的數據集中變量太多了,讓人摸不着頭腦,即便是打印出來也看不清楚。怎樣才能把這些龐大的數據集簡化爲能看得懂的東西呢?

在這篇中我們先依據直覺選擇幾個變量。稍後的篇章中將介紹如何利用統計類技巧優化變量。

爲了挑選一些特徵變量,我們先要看一下數據集中有哪些字段。通過DataFrame的columns屬性來查看即可,代碼如下所示:

import pandas as pd
​
melbourne_file_path = '../input/melbourne-housing-snapshot/melb_data.csv'
melbourne_data = pd.read_csv(melbourne_file_path) 
melbourne_data.columns

返回的結果爲:
在這裏插入圖片描述
Melbourne數據集中有一些缺失值,即有一些房子的特徵值沒有被記錄。在後面的章節中將介紹如何處理缺失值,此處我們採取最簡單的操作,即剔除數據中的缺失值。代碼如下所示:

melbourne_data = melbourne_data.dropna(axis=0)

需要注意的是參數:axis=0表示的是刪除含有缺失值的行記錄。

選擇數據子集的方法有多種,通常使用的是以下兩種操作:

  • 點操作,可以用來選擇目標變量
  • 列表操作,用來選擇特徵變量

2. 選擇預測目標變量

你可以使用點操作來提取變量。一個單一的數據列被存儲在一種叫Series的結構中,Series結構與DataFrame類似,你可以將其理解爲一種特殊的,只有一列數據的Dataframe。

我們將利用點操作來選擇即將要預測的數據列,即預測目標。一般來說,預測目標變量被稱爲y。因此利用以下代碼來將Melbourne數據集中的房價預測字段存儲在變量y中。

y = melbourne_data.Price

3. 選擇特徵變量

這些被輸入到模型中用來實現預測的變量就叫做“特徵”。在我們的案例中,被用來預測房價的數據列就是特徵。有些時候,你可以將數據集中除了預測目標之外的數據列都作爲特徵,而有些時候可能使用較少一些的特徵,模型表現的會更好。

這次,我們只選擇幾個特徵來構建模型。稍後,你將學習如何選用不同的特徵進行模型的迭代。

以下代碼中,我們將通過在一個方括號裏輸入多個列名的方式提供多個特徵值。

melbourne_features = ['Rooms', 'Bathroom', 'Landsize', 'Lattitude', 'Longtitude']

通常來說,選定的特徵變量集被記爲X。如下所示:

X = melbourne_data[melbourne_features]

接下來我們通過describe方法和head方法來快速瀏覽以下特徵變量中的數據,如下所示:

X.describe()

fd

X.head()

在這裏插入圖片描述
使用這些命令來目視檢查數據是數據科學家工作的重要組成部分,在檢查數據集時可能會發現驚喜。

4. 構建模型

你將利用scikit-learn庫來創建模型。在編碼過程中,這個庫通常被簡寫爲sklearn,如以下代碼中所示。Scikit-learn是對存儲在Dataframe中的數據進行建模的簡單常用工具庫。

構建和使用模型一般分爲4步:

  1. 定義模型:搞清楚要使用什麼類型的模型,是一個決策樹模型還是其他模型?模型中的參數如何配置?
  2. 擬合模型:捕獲數據集中所包含的模式,這一步是建模的核心步驟。
  3. 預測:利用模型來輸出預測結果
  4. 模型評價:評價模型預測結果的好與差。

代碼如下所示:

from sklearn.tree import DecisionTreeRegressor
​
# 定義一個決策樹模型,設置隨機參數
melbourne_model = DecisionTreeRegressor(random_state=1)
​
# 擬合模型
melbourne_model.fit(X, y)

許多機器學習模型在模型訓練時都是具有隨機性的。對參數random_state賦予一個特定的值可以讓模型每次運行的結果都是一致的。這被認爲是一種很好的做法。你可以對它賦予任何數值,因爲無論你選擇什麼數值,都不會對模型的質量產生本質影響。

通過以上我們已經擬合好了一個模型,可以直接用來預測。

在實踐中,你將用模型來預測市場上新的房子的價格,而不是用來預測那些我們已經知道它價格的房子。以下對訓練數據中前幾行數據的預測,只是爲了讓你看一下模型是如何工作的。

print("Making predictions for the following 5 houses:")
print(X.head())
print("The predictions are")
print(melbourne_model.predict(X.head()))

至此,一個完整的建模過程就完成了。下次再見。

歡迎關注微信公衆號:“數據分析師手記”

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章