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