GBDT,梯度提升樹屬於一種有監督的集成學習方法,與之前學習的監督算法類似,同樣可以用於分類問題的識別和預測問題的解決。該集成算法體現了三個方面的又是,分別是提升Boosting、梯度Gradient、決策樹Decision Tree。“提升”是指將多個弱分類器通過線下組合實現強分類器的過程;“梯度”指的是在Boosting過程中求解損失函數時增加了靈活性和便捷性,“決策樹”是指算法所使用的弱分類器為CART決策樹,該決策樹具有簡單直觀、通俗易懂的特性。
GBDT模型對數據類型不做任何限制,既可以是連續的數值型,也可以是離散的字符型(但在Python的落地過程中需要將字符型變量做數值化處理或者啞變量處理)。相對於SVM模型來說,較少參數的GBDT具有更高的准確率和更少的運算時間,GBDT模型在面對異常數據時具有更強的穩定性。由於上面種種優點,GBDT常常被廣大用戶所采用。
最具代表的提升樹算法為AdaBoost算法,即:
其中F(x)是由M棵基礎決策樹構成的最終提升樹,F_(m-1) (x)表示經過m-1輪迭代后的提升樹,α_m為第m棵基礎決策樹所對應的權重,f_m (x)為第m棵基礎決策樹。
AdaBoost算法在解決分類問題時,它的核心就是不停地改變樣本點的權重,並將每一輪的基礎決策樹通過權重的方式進行線性組合。該算法在迭代過程中需要進行如下四個步驟:
在這里舉一個簡單的例子。如下表:
x |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
y |
1 |
1 |
1 |
-1 |
-1 |
-1 |
1 |
1 |
1 |
-1 |
故第一輪迭代結果為:
x |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
|
y實際 |
1 |
1 |
1 |
-1 |
-1 |
-1 |
1 |
1 |
1 |
-1 |
|
預測得分 |
0.424 |
0.424 |
0.424 |
-0.424 |
-0.424 |
-0.424 |
-0.424 |
-0.424 |
-0.424 |
-0.424 |
|
y預測 |
1 |
1 |
1 |
-1 |
-1 |
-1 |
-1 |
-1 |
-1 |
-1 |
顯然6、7、8三個點的預測結果是錯的,所以它們對應的權重也是最大的,在進入第二輪時,模型會更加關注這三個點。
AdaBoost算法具體在Python上的實現方式為導入sklearn中的子模塊ensemble,從中調用AdaBoostClassifier類。
在這里我再次使用Iris數據集進行測試,原碼及效果為如下:
adaBoost = ensemble.AdaBoostClassifier() adaBoost.fit(x_train,y_train) predict = adaBoost.predict(x_test) print('Accuracy: ',metrics.accuracy_score(y_test,predict)) print('Report :\n',metrics.classification_report(y_test,predict))
Accuracy: 0.7
Report :
precision recall f1-score support
0.0 1.00 0.92 0.96 12
1.0 0.62 0.67 0.64 12
2.0 0.33 0.33 0.33 6
micro avg 0.70 0.70 0.70 30
macro avg 0.65 0.64 0.64 30
weighted avg 0.71 0.70 0.71 30