1. 程式人生 > >Python機器學習及實踐——基礎篇11(迴歸樹)

Python機器學習及實踐——基礎篇11(迴歸樹)

迴歸樹在選擇不同特徵作為分裂節點的策略上,與基礎篇6的決策樹的思路類似。不同之處在於,迴歸樹葉節點的資料型別不是離散型,而是連續型。決策樹每個葉節點依照訓練資料表現的概率傾向決定了其最終的預測類;而回歸樹的葉節點確實一個個具體的值,從預測值連續這個意義上嚴格地講,迴歸樹不能成為“迴歸演算法”。因為迴歸樹的葉節點返回的是“一團”訓練資料的均值,而不是具體的,連續的預測值。

下面使用迴歸樹對美國波士頓房訓練資料進行學習,並對測試資料進行預測:

# 從sklearn.tree中匯入DecisionTreeRegressor。
from sklearn.tree import DecisionTreeRegressor
# 使用預設配置初始化DecisionTreeRegressor。
dtr = DecisionTreeRegressor()
# 用波士頓房價的訓練資料構建迴歸樹。
dtr.fit(X_train, y_train)
# 使用預設配置的單一回歸樹對測試資料進行預測,並將預測值儲存在變數dtr_y_predict中。
dtr_y_predict = dtr.predict(X_test)

使用如下程式碼,對預設配置的迴歸樹在測試集上的效能做出評估。並且,該程式碼的輸出結果優於基礎篇8中的LR與SGDR的效能表現。因此,可以初步推斷,“美國波士頓房價預測”問題的特徵值與目標值之間存在一定的非線性關係。

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

R-squared value of DecisionTreeRegressor: 0.694084261863

The mean squared error of DecisionTreeRegressor: 23.7211023622

The mean absoluate error of DecisionTreeRegressor: 3.14173228346

特點分析:在系統地介紹了決策(分類)樹與迴歸樹之後,可以總結這類樹模型的優點:1、樹模型可以解決非線性特徵的問題;2、樹模型不要求對特徵標準化和統一量化,即數值型和類別型特徵都可以直接被應用在樹模型的構建和預測過程中;3、因為上述原因,樹模型也可以直觀地輸出決策過程,使得預測結果具有可解釋性。

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