05 集成學(xué)習(xí) - Boosting - GBDT初探

04 集成學(xué)習(xí) - Boosting - AdaBoost算法構(gòu)建

回顧:
1、Bagging-隨機(jī)森林是一個(gè)并行模型,Boosting是一個(gè)串行模型,所以Boosting模型運(yùn)算效率會(huì)低一些。
2、Bagging算法解決的是模型過(guò)擬合問(wèn)題,Boosting模型解決的是欠擬合問(wèn)題。

十一、梯度提升迭代決策樹(shù) - GBDT

GBDT(Gradient Boosting Decison Tree 梯度提升決策樹(shù))
別名:GBT\GTB\GBRT\MART

GBDT也是Boosting算法的一種,但和AdaBoost算法不同。
● AdaBoost算法是利用前一輪的弱學(xué)習(xí)器的誤差來(lái)更新樣本權(quán)重值,然后一輪輪得迭代。
● GBDT也是迭代,但是GBDT要求弱學(xué)習(xí)器必須是CART模型,而且GBDT在模型訓(xùn)練的時(shí)候,是要求模型預(yù)測(cè)的樣本損失盡可能的小。

● 作為一個(gè)提升模型,ft-1(x) 是t-1步的強(qiáng)分類器。t-1步的強(qiáng)分類器和真實(shí)值之間存在一個(gè)損失函數(shù),即用一個(gè)損失函數(shù)衡量該模型的優(yōu)劣。L(y,ft-1(x)) 代表這樣的一個(gè)損失函數(shù)。
● 提升算法的思想是:下一輪迭代中再訓(xùn)練一個(gè)弱學(xué)習(xí)器ht(x) ;弱學(xué)習(xí)器+強(qiáng)學(xué)習(xí)器形成新的強(qiáng)學(xué)習(xí)器: ft(x) = ft-1(x)+ht(x)
● 第t步生成模型的損失函數(shù):L(y,ft(x)) <=> L(y,ft-1(x)+ht(x) )

注意:只有當(dāng)上一輪的損失函數(shù)達(dá)到最小后,上一輪的強(qiáng)模型才算訓(xùn)練完成。在這個(gè)基礎(chǔ)上才能開(kāi)始新一輪的迭代。所以對(duì)于第t步的模型來(lái)說(shuō),之前t-1步的模型都已經(jīng)是定值。

十二、GBDT的直觀理解

案例1

GDBT的直觀理解

分析:現(xiàn)在預(yù)測(cè)樣本的年齡。
1、一個(gè)樣本真實(shí)值為30歲,放進(jìn)決策樹(shù)模型進(jìn)行預(yù)測(cè) x→y,發(fā)現(xiàn)預(yù)測(cè)結(jié)果 y^ 是20歲。預(yù)測(cè)值和真實(shí)值相差很大,所以現(xiàn)在的結(jié)果是欠擬合。現(xiàn)在想要改變欠擬合的現(xiàn)狀。這里計(jì)算的殘差 = 真實(shí)值-預(yù)測(cè)值 = y-y^ = 30-20 = 10。

2、對(duì)計(jì)算的殘差做預(yù)測(cè) x→(y-y^) ,發(fā)現(xiàn)預(yù)測(cè)結(jié)果( y-y^ )^是6歲。預(yù)測(cè)值 令y*=( y-y^ )^=6 和上一步的計(jì)算殘差 y-y^=10 依然存在相對(duì)較大的偏差。計(jì)算這一步的計(jì)算殘差 = 真實(shí)值-預(yù)測(cè)值 = (y-y^) - ( y-y^ )^ = y-y^-y* = 10-6 = 4

3、對(duì)計(jì)算的殘差做預(yù)測(cè) x→y-y^-y*,令 y** = (y - y^ - y*)^ =3和上一步的計(jì)算殘差 y-y^-y* = 4 依然存在一點(diǎn)的偏差,計(jì)算這一步的計(jì)算殘差 = 真實(shí)值-預(yù)測(cè)值 y-y^- y*-y**=1;

4、對(duì)計(jì)算的殘差做預(yù)測(cè) x→ y-y^- y*-y** 。這次預(yù)測(cè)值 = 真實(shí)值 ,即 y-y^- y*-y** = y*** = 1;

5、y*** =1y** = 3y*=6y^=20;累加這些值:1+3+6+20 = 30 = 真實(shí)值y。即圖中紅色的結(jié)果。

以上1~5的步驟就是GBDT的擬合過(guò)程。

思考: 結(jié)合上面的五個(gè)步驟,思考GBDT在擬合一種什么樣的關(guān)系?
● 將每次預(yù)測(cè)后得到的計(jì)算殘差作為新的預(yù)測(cè)目標(biāo),通過(guò)相同的樣本X預(yù)測(cè)這個(gè)新目標(biāo),得到一個(gè)新的基學(xué)習(xí)器。
● 直到預(yù)測(cè)結(jié)果準(zhǔn)確為止,或偏差趨向于0。
● 累加所有基學(xué)習(xí)器的預(yù)測(cè)結(jié)果,就是一步步消除誤差的過(guò)程。最后得到的結(jié)果肯定等于真實(shí)值。

案例2

從決策樹(shù)的角度來(lái)看GBDT是如何解決欠擬合問(wèn)題的。

當(dāng)給定步長(zhǎng)的時(shí)候,給定一個(gè)步長(zhǎng)step,在構(gòu)建下一棵樹(shù)的時(shí)候使用step*殘差值作為輸入值,這種方式可以減少過(guò)擬合的發(fā)生。

決策樹(shù)-GBDT

分析: 有A、B、C、D四個(gè)人,分別對(duì)應(yīng)3個(gè)屬性:年齡、收入、上網(wǎng)時(shí)長(zhǎng)。我們希望根據(jù)收入上網(wǎng)時(shí)長(zhǎng)來(lái)預(yù)測(cè)當(dāng)前這個(gè)人的年齡是多少。

A:年齡 14,收入 500,上網(wǎng)時(shí)間 0.5;
B:年齡 16,收入 700,上網(wǎng)時(shí)間 1,2;
C:年齡 24,收入 1800,上網(wǎng)時(shí)間 0.3;
D:年齡 26,收入 3000,上網(wǎng)時(shí)間 1.5;

預(yù)測(cè)步驟:
1、先看左圖,左圖構(gòu)建的是一棵決策回歸樹(shù),預(yù)測(cè)的年齡是一個(gè)連續(xù)值。每個(gè)葉子節(jié)點(diǎn)里放的都是目標(biāo)-年齡;(一開(kāi)始根節(jié)點(diǎn)上的20表示當(dāng)前節(jié)點(diǎn)對(duì)年齡的預(yù)測(cè)是20歲左右,這個(gè)我們不關(guān)心。)

2、此時(shí)決策樹(shù)根據(jù)收入做分支,收入小于1k的預(yù)測(cè)是15歲,收入大于等于1k的預(yù)測(cè)是25歲。

3、計(jì)算實(shí)際值和樣本值之間的差,得: (A、B、C、D) 的殘差 = (14-15,16-15,24-25,26-25)=(-1,1,-1,1);


PS: 為什么挑選收入作為第一個(gè)分支?
● 收入做分支時(shí),左節(jié)點(diǎn)的殘差的平方和(方差) = (14-15)2 +(16-15)2 = 2
如果根據(jù)上網(wǎng)>1和上網(wǎng)<1的分類結(jié)果要好:當(dāng)上網(wǎng)>1時(shí),年齡分別為26,16,預(yù)測(cè)值=(26+16)/2 = 42/2=21;
● 上網(wǎng)時(shí)間做分支時(shí),左節(jié)點(diǎn)的殘差的平方和(方差) = (26-21)2+(16-21)2 = 25+25=50;
所以從方差上看,選擇收入作為第一個(gè)分支效果更好。


4、 將(A、B、C、D) 的殘差 作為下一個(gè)模型的預(yù)測(cè)值。(A、B、C、D) 的殘差 = (-1,1,-1,1)
再看右圖,右圖根據(jù)上網(wǎng)時(shí)間做分支。
A:年齡 14,收入 500,上網(wǎng)時(shí)間 0.5;
B:年齡 16,收入 700,上網(wǎng)時(shí)間 1,2;
C:年齡 24,收入 1800,上網(wǎng)時(shí)間 0.3;
D:年齡 26,收入 3000,上網(wǎng)時(shí)間 1.5;
上網(wǎng)<1h 的是A、C ;
上網(wǎng)>1h 的是B、D;
所以右圖根據(jù)該屬性進(jìn)行劃分,最終預(yù)測(cè)得到的殘差為0。

5、根據(jù)模型來(lái)預(yù)測(cè)結(jié)果:
回顧GBDT的公式:f2(x) = f1(x) + h2(x) = h1(x) + h2(x) ;
當(dāng)A(收入=500,上網(wǎng)時(shí)長(zhǎng)=0.5) 時(shí),f2(A) = h1(A) + h2(A) =15 -1=14;
在第一課決策樹(shù)中預(yù)測(cè)的結(jié)果是15,存在一定的誤差。
然后在第二棵決策樹(shù)預(yù)測(cè)的結(jié)果是-1,即誤差。
最后兩棵樹(shù)的結(jié)果相加消除了誤差。

兩個(gè)弱學(xué)習(xí)器的相加,變成了強(qiáng)學(xué)習(xí)器

決策樹(shù)-GBDT

最后理解一下這句話的含義:
當(dāng)給定步長(zhǎng)的時(shí)候,給定一個(gè)步長(zhǎng)step,在構(gòu)建下一棵樹(shù)的時(shí)候使用step*殘差值作為輸入值,這種方式可以減少過(guò)擬合的發(fā)生。

最終強(qiáng)學(xué)習(xí)器 ft(x) = step × ∑ ht(x);
當(dāng) 0<step<1 時(shí),對(duì)應(yīng)每次迭代的基模型都會(huì)在原有的基礎(chǔ)上更小一點(diǎn)。變得小意味著我們需要更多的模型來(lái)達(dá)到真實(shí)的狀態(tài)。模型更多意味著過(guò)擬合
當(dāng) step>1 時(shí),意味著我們需要比原來(lái)更少的模型就能達(dá)到預(yù)測(cè)的效果。意味著可以減少過(guò)擬合的情況。

十三、GBDT和AdaBoost的區(qū)別

AdaBoost變X: 每次改變樣本數(shù)據(jù)集中的X值,預(yù)測(cè)錯(cuò)的加大權(quán)重,預(yù)測(cè)對(duì)的減少權(quán)重。最后再計(jì)算每次得到的基模型的權(quán)值。

GBDT變Y:本身也會(huì)改變?cè)袛?shù)據(jù)集的數(shù)據(jù),但他不改變X,每一個(gè)基模型輸入的數(shù)值都不發(fā)生變化。但是的值會(huì)發(fā)送變化,每一步的Y都是上一個(gè)基模型的真實(shí)值和預(yù)測(cè)值之間的殘差

06 集成學(xué)習(xí) - Boosting - GBDT算法原理、總結(jié)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。