1. 程式人生 > 其它 >機器學習(二)決策樹的比較以房屋價格預測為例

機器學習(二)決策樹的比較以房屋價格預測為例

技術標籤:機器學習決策樹機器學習python演算法資料探勘

實驗內容

使用普通的決策樹迴歸器和帶AdaBoost演算法的決策樹迴歸器預測房屋價格,評價兩種迴歸器的訓練效果

實驗步驟

(1) 建立一個新的Python檔案housing.py,然後加入下面的程式碼

import numpy as np
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import AdaBoostRegressor
from sklearn import datasets
from sklearn.metrics import
mean_squared_error,explained_variance_score from sklearn.utils import shuffle import matplotlib.pyplot as plt

(2) 使用scikit-learn上資料介面載入網上的標準房屋價格資料庫

housing_data = datasets.load_boston()# 載入資料

(3) 接下來把輸入資料與輸出結果分成不同的變數。我們可以通過shuffle函式把資料的順 序打亂:

X, y = shuffle(housing_data.data, housing_data.target,
random_state=7)# random_state 控制如何打亂資料

(4) 接下來把資料 分成訓練資料集和測試資料集,其中80%的資料用於訓練,剩餘20%的資料用於測試:

num_training = int(0.8*len(X))
X_train, y_train = X[:num_training], y[:num_training]
X_test, y_test = X[num_training:], y[num_training:]

(5) 現在已經可以擬合一個決策樹迴歸模型了。選一個最大深度為4的決策樹,這樣可以限制 決策樹不變成任意深度:

dt_regressor = DecisionTreeRegressor(
max_depth=4) dt_regressor.fit(X_train, y_train)

(6) 再用帶AdaBoost演算法的決策樹迴歸模型進行擬合

ab_regressor = AdaBoostRegressor(DecisionTreeRegressor(max_depth=4),
                                 n_estimators=400, random_state=7)
# 第一個引數是基分類器,n_estimators 基分類器迴圈次數,random_state隨機種子設定
ab_regressor.fit(X_train, y_train)

(7) 接下來評價決策樹迴歸器的訓練效果

y_pred_dt = dt_regressor.predict(X_test)
mse = mean_squared_error(y_test, y_pred_dt)
evs = explained_variance_score(y_test, y_pred_dt)
print("\n#### Decision Tree 效能表現 ####")
print("Mean squared error(均方誤差) =", round(mse, 2))
print("Explained variance score(可釋方差分數) =", round(evs, 2))

(8) 現在評價一下AdaBoost演算法改善的效果:

y_pred_ab = ab_regressor.predict(X_test)
mse = mean_squared_error(y_test, y_pred_ab)
evs = explained_variance_score(y_test, y_pred_ab)
print("\n#### AdaBoost 效能表現 ####")
print("Mean squared error(均方誤差)  =", round(mse, 2))
print("Explained variance score (可釋方差分數)=", round(evs, 2))

實驗結果

在這裡插入圖片描述

實驗結論

使用帶AdaBoost的決策樹得到的均方誤差更小,優於普通決策樹,這是因為AdaBoost是一種整合學習方法,其工作機制類似:先從初始訓練集訓練出一個基學習器,再根據基學習器的表現對訓練樣本分佈進行調整,使得先前基學習器做錯的訓練樣本在後續受到更多關注,然後基於調整後的樣本分佈來訓練下一個基學習器;如此反覆進行,直至基學習器數目n_estimator達到事先指定的值T,最終將這T個基學習器進行加權結合