1. 程式人生 > >利用迴歸樹對Boston房價進行預測,並對結果進行評估

利用迴歸樹對Boston房價進行預測,並對結果進行評估

from sklearn.cross_validation import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.tree import DecisionTreeRegressor

from sklearn.metrics import mean_squared_error,mean_absolute_error

'''注:迴歸樹的葉節點的資料型別不是離散型,而是連續型,決策樹每個葉節點依照訓練資料表現的概率傾向決定最終的預測類別,而回歸樹葉節點是連續的,節點的值是‘一團資料’的均值'''

#匯入資料

boston = load_boston()
#檢視資料資訊print(boston.DESCR)
X = boston.data
y = boston.target 
#對資料進行分割
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.25,random_state=33)
ss_X = StandardScaler()
ss_y =StandardScaler()
#分別對訓練和測試資料的特徵及目標值進行標準化處理
X_train = ss_X.fit_transform(X_train)
X_test = ss_X.transform(X_test)
y_train = ss_y.fit_transform(y_train)
y_test = ss_y.transform(y_test)
#使用預設的配置初始化DecisionTreeRegressor
dtr = DecisionTreeRegressor()
#用波士頓房價的資料構建迴歸樹
dtr.fit(X_train,y_train)
#使用預設配置的單一回歸樹對測試資料進行測試
dtr_y_predict = dtr.predict(X_test)

#使用R-squared,MSE以及MAE三種指標對預設配置的迴歸樹在測試集上進行效能評估
print('R-squared value of DecisionTreeRegressor:',dtr.score(X_test,y_test))
print('\n'*2)
print('The mean squared error of DecisionTreeRegressor: ',mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(dtr_y_predict)))
print('\n'*2)

print('The mean absolute error of DecisionTreeRegressor:',mean_absolute_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(dtr_y_predict)))

'''樹模型型的優缺點'

優點:1.樹模型可以解決非線性特徵問題 2.樹模型不要求對特徵標準化和同一量化,即數值型和類別型特徵都可以直接被應用到樹模型的構建和預測中 3.因為上述原因,樹模型也可以直觀的輸出決策過程,使得預測結果具有可解釋性

缺點:1.正是因為樹模型可以解決複雜的非線性擬合問題,所以更加容易因為模型搭建過於複雜而喪失對新資料預測的精度(泛化力);2樹模型從上至下的預測流程會因為資料的細微更改而發生較大的結構變化,因此穩定性較差;3.依託訓練資料構建最佳的樹模型是NP難問題,即在有限時間內無法找到最優解的問題,因此使用類似的貪婪演算法的解只能找到一些次優解,這也是為什麼我們經常藉助整合模型,在多個次優解中尋覓更高的模型效能。

''