用Python實現GBDT算法並處理Iris數據集


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM