1. 程式人生 > >python-GBDT演算法基本思想

python-GBDT演算法基本思想

GBDT的基本思想是:“積矽步以致千里” 也就是說我每次都只學習一點,然後一步步的接近最終要預測的值(完全是gradient的思想),換句話說,我們先用一個初始值來學習一顆決策樹,葉子出可以得到預測值,以及預測之後的殘差,然後後面的決策樹就要基於前面決策樹的殘差來學習,直到預測值和真實值的殘差為零,最終對預測樣本的預測值,就是前面許多顆決策樹預測值的累加。這個過程都是每次學習一點,最後累加,所以叫做“積跬步之千里”。

舉例說明:
訓練集:(A,14歲),(B,16歲),(C,24歲),(D,26歲)
訓練資料的均值為:20歲;(這個很重要,因為GBDT與i開始需要設定預測的均值,這樣後面才會有殘差)
決策樹的個數為:2棵
每個樣本的特徵有兩個:購買金額是否小於1K,經常去百度提問還是回答?

開始GBDT學習了

首先,輸入初值是20歲,根據第一個特徵(具體選擇那些特徵可以根據資訊增益來計算選擇),可以把4個樣本分為兩類,一類是購物金額<=1K ,一類是>=1K的。假如這個時候我們就停止了第一棵樹的學習,這時候我們就可以統計一下每個葉子中包含哪些樣本,這樣樣本的均值是多少,因為這個時候的均值就要作為所有被分到這個葉子的樣本的預測值了。比如AB被分到左葉子,CD被分到右葉子,那麼預測的結果就是:AB都是15歲,CD都是25歲。和他們的實際值一看,結果發現出現的殘差,ABCD的殘差分別是-1,1,-1,1。這個殘差,我們要作為後面第二顆決策樹的學習樣本。
20(14,16,24,26)
15(16,14) 25(24,26)
(1,-1) (-1,1)
然後學習第二顆決策樹,我們把第一課的殘差樣本(A,-1),(B,1),(C,-1),(D,1)輸入,此時我們選擇的特徵是經常去百度提問還是回答。這個時候我們又可以得到兩部分,一部分是AC組成了左葉子,另一部分是BD組成了右葉子。那麼,經過計算可知左葉子的均值為-1,右葉子均值為1,那麼第二顆樹的預測結果就是AC都是-1,BD都是1,我們再來計算一下此時的殘差,發現ABCD的殘差都是0,停止學習~
0(1,-1,-1,1)
-1(-1,-1) 1(1,1)
(0 0) (0,0)

這樣,我麼的兩棵決策樹就都學習好了。進入測試環節:
測試樣本:請預測一個購物金額為3K,經常去百度問淘寶相關問題的女生的年齡~

我們提取2個特徵:購物金額3K,經常去百度上面提問問題

第一課樹—->購物金額大於1K,—->右葉子,初步說明這個女生25歲
第二克數—–>經常去百度提問——>左葉子,說明這個女生的殘差為-1

疊加前面每棵樹得到的結果:25-1 = 24歲,最終預測結果為24歲,