統(tǒng)計(jì)學(xué)習(xí)方法——集成學(xué)習(xí)x
發(fā)布時(shí)間:2020-08-26 來源: 實(shí)習(xí)報(bào)告 點(diǎn)擊:
統(tǒng)計(jì)學(xué)習(xí)方法—— 集成學(xué)習(xí) 集成學(xué)習(xí)作為當(dāng)今性能最好的多模型分類器,我們必須要了解它一下。
這里我們從最簡單的集成學(xué)習(xí) Bagging 開始講起,一直講到 GBDT 為止。
1. 集成學(xué)習(xí) 集成學(xué)習(xí)是多模型學(xué)習(xí)的一種,它是集成多個(gè)弱分類器來進(jìn)行決策。就是“三個(gè)臭皮匠賽過諸葛亮”,但是一般來講是賽不了的,為什么呢?首先如果三個(gè)臭皮匠是三胞胎,那么三個(gè)臭皮匠和一個(gè)臭皮匠是無異的,另外,如何把這三個(gè)決策統(tǒng)一起來是另外一個(gè)問題。因此我們從這兩方面來入手講解集成學(xué)習(xí)。
2.Bagging bagging 的想法非常簡單,假設(shè)我們有 T 個(gè)分類器,每個(gè)分類器需要 m 個(gè)訓(xùn)練樣本。我們只需要使用自助采樣法(有放回采樣)獲取到這 m 個(gè)樣本即可。這樣我們就有了 T 個(gè)包含了 m 個(gè)樣本的訓(xùn)練集,來訓(xùn)練 T 個(gè)分類器。最終對同一樣本進(jìn)行簡單的投票決策即可。
具體算法描述如下圖:
輸入:訓(xùn)練集Di={(x1,y1),(x2,y2),..,(xm,ym)}
基礎(chǔ)分類器個(gè)數(shù) T 過程 1:for t=1,2,3…,T do 2ht=訓(xùn)練分類器(Di)
訓(xùn)練分類器
訓(xùn)練分類器
3:
H(x)=argmaxy∈Y∑t=1TI(ht(x)=y) (
。
∑
(
)
∑
這就是最簡單的 bagging,它就是兼聽則明的一個(gè)典型代表,但是它只能去減少方差,但是不能夠保證最終的結(jié)果更加正確,萬一所有的大臣串通一氣,你就算聽取了所有大臣的意見,仍然是一個(gè)昏君。
3.RandomForest 隨機(jī)森林是在 bagging 上的一個(gè)改進(jìn),在 bagging 中,我們只去擾動了樣本,也就雖然每個(gè) T 的訓(xùn)練樣本是服從同分布的,但是樣本的個(gè)體是不同的,也就是說,我們假設(shè)每個(gè) T 都是一個(gè)游客在看一座山,雖然每個(gè)人都是獨(dú)立的看,但是都是在同一方向上看的,因此差異性不會特別大。而隨機(jī)森林則加入了另一個(gè)擾動,那就是訓(xùn)練模型的不同,也就是說每個(gè)人都在不同的角度看同一座山,這樣描述的會更加準(zhǔn)確。
這里我們主要講解一下結(jié)合的策略。常規(guī)來講,主要有這么幾種策略:多數(shù)表決、平均值、加權(quán)表決/平均值。多數(shù)表決,就是一人一票,每人都平等對待,然后得票多的結(jié)果獲勝。平均值則是把所有人的決策取平均,加權(quán)的話,就是把每個(gè)分類器不平等對待。另外,如果每個(gè)分類器性能差異比較大的時(shí)候,建議使用多數(shù)表決。每個(gè)分類器差異較小的時(shí)候,建議使用平均值。
另一方面,還有一個(gè) Stacking 算法,它比較特殊,它會先使用一些初級學(xué)習(xí)器,然后生成一個(gè)新數(shù)據(jù)集再來進(jìn)行一次訓(xùn)練。新的數(shù)據(jù)集主要是添加了初級學(xué)習(xí)器的預(yù)測結(jié)果,然后再訓(xùn)練次級學(xué)習(xí)器,這種方法比較適用于多響應(yīng)線性回歸。
4.Boosting boosting 和 bagging 的思路完全不同,它是使用同一個(gè)訓(xùn)練集,但是每個(gè)分類器都是有順序的,當(dāng)前分類器依賴于前一個(gè)分類器的性能表現(xiàn)。就目前實(shí)現(xiàn)而言boosting 中最具代表的是 AdaBoosting,它主要用于二分類,并且維護(hù)一個(gè)樣本權(quán)重表來保證模型的性能。
它的主要思想是,初始化時(shí),所有的樣本都具有同權(quán)重,當(dāng)進(jìn)入第一個(gè)分類器分類后,挑選出其中錯(cuò)誤的樣本,對其權(quán)重進(jìn)行增加,對正確樣本權(quán)重減少,這樣保證下一個(gè)分類器對于錯(cuò)誤的樣本能夠更好的修正。具體算法如下:
輸入:訓(xùn)練集Di={(x1,y1),(x2,y2),..,(xm,ym)}
基礎(chǔ)分類器個(gè)數(shù) T 過程:
D1(x)=1m
for t=1,2,…,T do ht=訓(xùn)練分類器(D,Dt)
訓(xùn)練分類器
,
訓(xùn)練分類器
,
?t=ht 的錯(cuò)誤率
的錯(cuò)誤率
的錯(cuò)誤率
if?t>0.5thenbreak//這里是說如果錯(cuò)誤率大于亂猜了,則不要繼續(xù)了
這里是說如果錯(cuò)誤率大于亂猜了,則不要繼續(xù)了
這里是說如果錯(cuò)誤率大于亂猜了,則不要繼續(xù)了
αt=12ln(1−?t?t)
Dt+1(x)=Dt(x)×exp(−αtf(x)ht(x))Zt
end for H(x)=sign(∑Tt=1αtht(x))
∑
∑
從上面可以看出,它是一個(gè)自適應(yīng)提升模型,首先一點(diǎn)就是它的第 i 次的性能會隨著第 i-1 次而不斷的調(diào)整,最后取得最優(yōu)值。但是這還不是最后的優(yōu)化方案,因?yàn)檫有更優(yōu)秀的 BoostingTree。
5.BoostingTree 提升樹主要有兩點(diǎn)的提升,第一就是對于 Boosting 的每一輪迭代,它的目標(biāo)任務(wù)是不同的,每次都是記錄殘差,而不是真正的標(biāo)簽。也就是說除了第一棵樹是正常分類的,后面的樹都是不斷修正之前的樹的預(yù)判的,從而達(dá)到整體預(yù)判效果,具體來講,它的每個(gè)樹是 CART 樹,具體的算法如下:
輸入:訓(xùn)練數(shù)據(jù)集 T 輸出:提升樹 fM(x).
(1) 初始化 f0(x)=0
(2)對 m=1,2,…,M 計(jì)算殘差:rmi=yi−fm−1(xi),i=1,2,...,N 計(jì)算殘差:
計(jì)算殘差:
使用殘差來擬合回歸樹Tm 使用殘差來擬合回歸樹
使用殘差來擬合回歸樹
更新提升樹fm(x)=fm−1(x)+Tm 更新提升樹
更新提升樹
(3)得到回歸提升樹 fM(x)
那么,什么時(shí)候停止呢,使用平方和誤差低于某一值時(shí),就認(rèn)為擬合成功了。但是這還不是最終的結(jié)果,最終的為 GBDT 6.GBDT GBDT 較上面更新之處在于每次修剪的幅度不同。上面講的誤差使用的是平方損失誤差,而 GBDT 則是使用梯度來解決。算法如下 輸入:訓(xùn)練集 T,損失函數(shù) L 輸出:回歸樹 f(x) (1)初始化
f0(x)=argminc∑i=1NL(yi,A)
∑
∑
(2)對于 m=1,2,…,M 對 1,2,...,N,計(jì)算殘差rmi=−[∂L(yi,f(xi))∂f(xi)]f(x)=fm−1(x) 對
計(jì)算殘差
對
計(jì)算殘差
使用 rmi 擬合一個(gè)回歸樹,得到第 n 棵樹的葉節(jié)點(diǎn)區(qū)域Rmj 使用
擬合一個(gè)回歸樹,得到第
棵樹的葉節(jié)點(diǎn)區(qū)域
使用
擬合一個(gè)回歸樹,得到第
棵樹的葉節(jié)點(diǎn)區(qū)域
對 j=1,2,...,J,計(jì)算 cmj=argminc∑xi∈RmjL(yi,fm−1(xi)+A)//這里是對每一個(gè)決策區(qū)域找到其最小的步長 對
計(jì)算
∑
這里是對每一個(gè)決策區(qū)域找到其最小的步長
對
計(jì)算
∑
這里是對每一個(gè)決策區(qū)域找到其最小的步長
更新樹 fm(x)=fm−1(x)+∑j=1JcmjI(x∈Rmj)//這里 cmj 表示的是誤差,也是改進(jìn)步長,其實(shí)是說加上屬于那一類別梯度的步長,這里 x 只會屬于其中一個(gè)類別. 更新樹
∑
這里
表示的是誤差,也是改進(jìn)步長,其實(shí)是說加上屬于那一類別梯度的步長,這里
只會屬于其中一個(gè)類別
更新樹
∑
這里
表示的是誤差,也是改進(jìn)步長,其實(shí)是說加上屬于那一類別梯度的步長,這里
只會屬于其中一個(gè)類別
。3)得到回歸樹
f^(x)=fM(x)=∑m=1M∑j=1JcmjI(x∈Rmj) ?
∑∑
?
∑ ∑
網(wǎng)上居然沒有一個(gè)人對這些代碼進(jìn)行解讀一下!太難了!
7. 總結(jié) 今天,我們主要梳理了一遍集成學(xué)習(xí)的方法,從最基層的 Bagging 到最頂層的GBDT。
相關(guān)熱詞搜索:學(xué)習(xí)方法 集成 統(tǒng)計(jì)
熱點(diǎn)文章閱讀