1. 程式人生 > >機器學習(4)--估算波士頓房屋價格----帶AdaBoost的決策樹迴歸模型

機器學習(4)--估算波士頓房屋價格----帶AdaBoost的決策樹迴歸模型

估算波士頓房屋價格—-帶AdaBoost決策樹迴歸模型

使用帶AdaBoost演算法的決策樹迴歸器(descision tree regressor)

  • 決策樹模型: 樹狀模型,每個節點做決策,從而影響決策結果,葉子節點表示輸出結果,分支表示根據輸入做出中間決策

  • AdaBoost:利用其他系統增強模型準確型的技術

程式碼如下:

#-*- coding:utf-8 -*-
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 #載入房屋資料 波士頓房屋價格 housing_data=datasets.load_boston() #housing_data.data 代表輸入價格,housing_data.target代表輸出價格 x,y=shuffle(housing_data.data,housing_data.target,random_state=7
) #將資料分成80% 用於訓練,其他用於測試 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:] #建立決策樹模型 最大深度是4 限制決策樹的深度 dt_regressor=DecisionTreeRegressor(max_depth=4) dt_regressor.fit(x_train,y_train) #使用帶AdaBoost演算法的決策樹模型進行擬合 fit代表擬合
ab_regressor=AdaBoostRegressor(DecisionTreeRegressor(max_depth=4),n_estimators=400,random_state=7) ab_regressor.fit(x_train,y_train) #檢視決策樹迴歸器的訓練結果 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 ###決策樹學習效果###" print "均方誤差 = ",round(mse,2) print "解釋方差分 = ",round(evs,2) #檢視對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 "均方誤差 = ",round(mse,2) print "解釋方差分 = ",round(evs,2) def plot_feature_importances(feature_importances,title,feature_names): #將重要性值標準化 feature_importances=100.0*(feature_importances/max(feature_importances)) #將得分從低到高進行排序 flipud 實現矩陣的翻轉 index_sorted=np.flipud(np.argsort(feature_importances)) #讓x座標軸上的把標籤居中 shape用於讀取矩陣的長度 pos=np.arange(index_sorted.shape[0])+0.5 #畫出條形圖 plt.figure() #bar代表柱形圖 plt.bar(pos,feature_importances[index_sorted],align='center') #為x軸的主刻度設定值 plt.xticks(pos,feature_names[index_sorted]) plt.ylabel('Relative importance') plt.title(title) plt.show() #特徵重要性 圖形表示 feature_importances 代表每個特徵多樣性 #plot_feature_importances(dt_regressor.feature_importances_,'Decision Tree Regressor ',housing_data.feature_names) plot_feature_importances(ab_regressor.feature_importances_,'AdaBoost Regressor ',housing_data.feature_names)

輸出結果

 ###決策樹學習效果###
均方誤差 =  14.79
解釋方差分 =  0.82

 ###AdaBoost演算法改善效果###
均方誤差 =  7.64
解釋方差分 =  0.91

繪製圖形如下所示:

這裡寫圖片描述
這裡寫圖片描述