在之前的章節(jié)里,學(xué)習(xí)了集成學(xué)習(xí)的兩個(gè)代表方式:bagging和boosting髓介,現(xiàn)在來(lái)看如果將bagging和boosting運(yùn)用在決策樹(shù)中惕鼓。
隨機(jī)森林(random forest)
隨機(jī)森林是決策樹(shù)和Bagging的結(jié)合體,并且為了增加多樣性唐础,隨機(jī)森林加入了樣本的隨機(jī)選擇箱歧。
- 隨機(jī)采樣的到m個(gè)子集
隨機(jī)森林使用boostrap的方式對(duì)原始數(shù)據(jù)集采樣,即有放回的采樣一膨。每個(gè)子集采樣n(數(shù)據(jù)集的大小)次呀邢,所以子集中可能有的樣本出現(xiàn)多次,有的樣本沒(méi)有出現(xiàn)豹绪。所以得到m個(gè)大小和原始數(shù)據(jù)大小一樣的樣本子集价淌。
-
對(duì)特征采樣
傳統(tǒng)決策樹(shù)在選擇劃分屬性時(shí),選擇當(dāng)前所有屬性中的最優(yōu)屬性作為決策樹(shù)的劃分屬性。但隨機(jī)森林中输钩,對(duì)決策樹(shù)中的每個(gè)結(jié)點(diǎn)豺型,先從該結(jié)點(diǎn)中隨機(jī)選取k個(gè)屬性作為當(dāng)前結(jié)點(diǎn)的屬性子集仲智,然后再?gòu)倪@子集中選擇最優(yōu)的屬性买乃。下圖展示的是兩次不同結(jié)點(diǎn)所選擇的特征。通常推薦,d表示當(dāng)前結(jié)點(diǎn)所有屬性的個(gè)數(shù)钓辆。
最終決策
最終決策使用的是投票方式剪验,少數(shù)服從多數(shù)。
需要注意的是:并不是決策樹(shù)的個(gè)數(shù)越多越好前联。
優(yōu)點(diǎn)
簡(jiǎn)單功戚、容易實(shí)現(xiàn)、計(jì)算開(kāi)銷(xiāo)小似嗤、具有強(qiáng)大的性能啸臀。性能強(qiáng)大的原因是不僅包含了bagging中的樣本多樣性,還包含了來(lái)自樣本自己特征的多樣性烁落。
提升樹(shù)
在之前的筆記中乘粒,學(xué)習(xí)了cart如果解決回歸問(wèn)題和boosting集成方式,現(xiàn)在來(lái)看看如何將boosting集成方法應(yīng)用到回歸問(wèn)題中伤塌。
提升樹(shù):以決策樹(shù)為基函數(shù)的提升方法灯萍。在提升樹(shù)中,每個(gè)基決策樹(shù)是由一個(gè)根結(jié)點(diǎn)直接連接的兩個(gè)也結(jié)點(diǎn)的簡(jiǎn)單決策樹(shù)每聪,即決策樹(shù)樁旦棉。提升樹(shù)模型可以表示為決策樹(shù)的加法模型
其中药薯,表示決策樹(shù)绑洛,m表示第m課決策樹(shù)樁,M為決策樹(shù)的個(gè)數(shù),表示將輸入空間劃分為個(gè)互不相交的區(qū)域童本,,并且在每個(gè)區(qū)域上的輸出為,表示樹(shù)的空間劃分和每個(gè)區(qū)域上確定的輸出常量真屯。
回歸問(wèn)題下使用前向分布算法
第一步:設(shè)
第二步:
第三步:整體模型表示
第四步:寫(xiě)出第m步的損失函數(shù)
在回歸問(wèn)題中巾陕,使用mse作為損失函數(shù) 讨跟,所以決策樹(shù)的目標(biāo)是最小化mse損失函數(shù)。
在第m步鄙煤,給定當(dāng)前模型晾匠,即前m-1個(gè)決策樹(shù)。(在第m步梯刚,前m-1個(gè)模型肯定是已經(jīng)求出)
所以第m步的損失函數(shù)可以將式(5)改寫(xiě)為:
第五步:求參數(shù)
回歸問(wèn)題使用MSE作為損失函數(shù)
令凉馆,損失函數(shù)變?yōu)?br>
r就是當(dāng)前模型需要擬合的殘差,所以提升樹(shù)的回歸問(wèn)題來(lái)說(shuō)就是簡(jiǎn)單的擬合數(shù)據(jù)的殘差即可。
為什么擬合殘差就行
擬合殘差意味著使當(dāng)前模型的輸出逼近殘差澜共,從式(9)可以看到損失函數(shù)變?yōu)榱?img class="math-inline" src="https://math.jianshu.com/math?formula=(r%20-T(x%3B%5Ctheta))%20%5E2" alt="(r -T(x;\theta)) ^2" mathimg="1">,要最小化損失函數(shù)只需要最小化與當(dāng)前模型輸出的差值即可向叉,并且構(gòu)成的與都是已知的。所以提升樹(shù)在回歸問(wèn)題中擬合殘差即可嗦董。
例子(來(lái)自于統(tǒng)計(jì)學(xué)習(xí)方法P180)
現(xiàn)在有輸入數(shù)據(jù)x和輸出數(shù)據(jù)y
對(duì)于以上數(shù)據(jù)母谎,可能的切分點(diǎn)有。
(1) 對(duì)于所有可能的切分點(diǎn)計(jì)算MSE損失和最優(yōu)輸出
例如以1.5作為分界點(diǎn)
,
,
所以
同理計(jì)算其他切分點(diǎn)的損失京革,如下圖所示
(2) 選擇使損失最小的切分點(diǎn)
當(dāng)時(shí)奇唤,損失函數(shù)最小為1.93,對(duì)應(yīng)的劃分輸出為,,得到樹(shù)
(3) 根據(jù)樹(shù)計(jì)算下一個(gè)樹(shù)需要擬合的殘差
(4)重復(fù)上述過(guò)程,依次計(jì)算
(5) 將所有樹(shù)的區(qū)間疊加得到
這步根據(jù)式(1)得到
GBDT
提升樹(shù)利用加法模型與前向分步算法實(shí)現(xiàn)學(xué)習(xí)的優(yōu)化過(guò)程匹摇。當(dāng)損失函數(shù)使平方損失和指數(shù)損失時(shí)咬扇,每一步的優(yōu)化是很簡(jiǎn)單的。但對(duì)于一般損失函數(shù)而言廊勃,每一步優(yōu)化并不容易懈贺。GBDT利用損失函數(shù)的負(fù)梯度在當(dāng)前模型的值
作為回歸問(wèn)題提升樹(shù)算法中的殘差的近似值,擬合一個(gè)回歸樹(shù)坡垫。
注意:當(dāng)損失函數(shù)為MSE時(shí)梭灿,負(fù)梯度就是殘差,其他損失函數(shù)時(shí)葛虐,只是近似殘差胎源。
從泰勒展開(kāi)看看GBDT
泰勒展開(kāi)式如下:
GBDT的損失函數(shù)如下:
使用一階泰勒展開(kāi)損失函數(shù),將此處的當(dāng)作a屿脐,當(dāng)作h涕蚤,帶入泰勒展開(kāi)式得到
要使損失函數(shù)最小,等式右邊是個(gè)常數(shù)的诵, 那么令為的負(fù)方向即可保證等式右邊的損失函數(shù)比前一個(gè)樹(shù)的損失函數(shù)小
帶入式中得到
變?yōu)?img class="math-inline" src="https://math.jianshu.com/math?formula=L(y%2C%20f_%7Bm-1%7D(x)%2BT(x_i%3B%5Ctheta)%3DL(y%2C%20f_%7Bm-1%7D)-f%5E%7B%5Cprime%202%7D_%7Bm-%201(x)%7D" alt="L(y, f_{m-1}(x)+T(x_i;\theta)=L(y, f_{m-1})-f^{\prime 2}_{m- 1(x)}" mathimg="1">
綜上所述万栅,擬合損失函數(shù)的負(fù)梯度即可保證模型趨向擬合。
GDBT流程
輸入:訓(xùn)練數(shù)據(jù)集,損失函數(shù)為
輸出回歸樹(shù)
(1)初始化
西疤,這里的c是所有均值
(2)對(duì)
- 對(duì),計(jì)算
,這里計(jì)算每個(gè)x對(duì)于的殘差值 - 對(duì)擬合一個(gè)回歸樹(shù)烦粒,得到第m棵樹(shù)的葉結(jié)點(diǎn)區(qū)域,.
- 對(duì),,計(jì)算
,這里的c是每一個(gè)子區(qū)域的均值,具體的代赁,這里的表示第m棵樹(shù)在這個(gè)子領(lǐng)域的輸出值扰她。 - 更新
(3) 得到回歸樹(shù)
**優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn)
- 準(zhǔn)確度高
- 適合低維復(fù)雜度
- 能靈活的處理各種類(lèi)型的數(shù)據(jù),連續(xù)值和離散值
- 缺點(diǎn)
- 不能并行
- 數(shù)據(jù)高維會(huì)加大復(fù)雜度
參考文獻(xiàn)
[1] 《統(tǒng)計(jì)學(xué)習(xí)方法》 李航 第二版
[2] 《機(jī)器學(xué)習(xí)》 周志華
[3] http://ihoge.cn/2018/boosting.html
[4] https://juejin.im/post/5cd1828af265da038364dbba
[5] 泰勒公式 https://blog.csdn.net/weixin_37697191/article/details/89303042