天天看點

《ISLR》學習筆記 —— Bagging、随機森林、Boosting1.Bagging(裝袋算法)2.随機森林3.Boosting參考

Bagging、随機森林、Boosting

  • 1.Bagging(裝袋算法)
  • 2.随機森林
  • 3.Boosting
  • 參考

1.Bagging(裝袋算法)

bootstrap抽樣:反複地從原始資料集中有放回地抽取觀測資料,得到多個資料集。

  • 優點:适用于樣本數量較小,可從原始資料中産生多個訓練集。
  • 缺點:會引入相同樣本,改變了原始資料的分布,導緻偏差;模型的可了解性差。

在決策樹中(或其他高方差模型中),由于其高方差低偏差地特性(即對訓練集樣本很敏感),樣本發生個别變化時,生成的決策樹可能會完全不同。為了減小高方差,引入Bagging方法。

假設有n個資料集, Z 1 , Z 2 , . . . Z n Z_1,Z_2,...Z_n Z1​,Z2​,...Zn​,每個資料集的方差為 σ 2 \sigma^2 σ2,則其樣本平均值 Z ˉ \bar{Z} Zˉ的方差為 σ 2 n \frac{\sigma^2}{n} nσ2​。

可以發現,對一系列觀測值取平均可以顯著降低方差。是以,類比可知,依賴原訓練集生成許多新的訓練集,再分别對新的訓練集訓練模型 f ^ 1 ( x ) , f ^ 2 ( x ) , . . . f ^ B ( x ) \hat{f}^1(x),\hat{f}^2(x),...\hat{f}^B(x) f^​1(x),f^​2(x),...f^​B(x),最終取得各模型預測結果的平均。(分類問題即可以少數服從多數)

f ^ a v g ( x ) = 1 B ∑ b = 1 B f ^ b ( x ) \hat{f}_{avg}(x)=\frac{1}{B}\sum_{b=1}^B\hat{f}^b(x) f^​avg​(x)=B1​b=1∑B​f^​b(x)

Bagging(Boostrap aggregation):給定一個訓練集,采用boostrap抽樣生成b個訓練集,再分别這b個訓練集去訓練模型,生成b個模型,再通過取平均值或取多數票等方法得到模型預測或分類結果。

  • Out-of-Bag Error(袋外錯誤)

    運用Boostrap抽樣方式不可避免地存在一個問題,即當從樣本數為n的訓練集D中,運用Bootstrap抽樣時,第j個觀測值在bootstrap抽樣集中的機率為:

    P = ( 1 − ( 1 − 1 n ) n ) lim ⁡ n → ∞ P = 1 − 1 e ≈ 2 3 P= (1-(1-\frac{1}{n})^n)\\ \lim_{n\rightarrow\infty }P=1- \frac{1}{e}\approx \frac{2}{3} P=(1−(1−n1​)n)n→∞lim​P=1−e1​≈32​

    可以得知,每個抽樣集平均利用了原資料集的三分之二去訓練子模型,而剩下的三分之一資料沒有被利用去拟合該子模型,稱這部分資料為Out-of-Bag(OOB)觀測值(即子模型拟合未用到的訓練集)。

    OOB誤分率:對所有樣本,計算它作為OOB樣本時的預測或分類情況;通過平均或多數投票的方式得到該樣本的分類樣本;最後用誤分個數占樣本總數的比率作為OOB誤分率。(因為OOB樣本的預測利用的模型并不是用其拟合的模型,相當于測試集,是以可以近似将OBB錯誤作為test error)

2.随機森林

随機森林是在Bagging方法上的改進,子模型為決策樹,在Bagging中抽樣時進行模型拟合時,利用了觀測值的所有特征p個,而在随機森林模型中,各子模型僅利用觀測值所有特征中 m = p m=\sqrt{p} m=p

​個進行拟合。

  • m越大,單棵樹的效果會提升,但樹之間相關性也會增強
  • B越大,模型效果會有提升,但計算量會變大

優勢:降維;當強特征存在時,bagging生成的各樹模型可能高度相似,是以平均或多數投票不能夠顯著降低方差,而随機森林平均上 ( p − m ) / p (p-m)/p (p−m)/p的split不會考慮強特征。

劣勢:對小量資料集和低維資料集的分類不一定可以得到很好的效果。

bagging與随機森林均不會因為B值的增大而産生過拟合,是以一般采用較大的B去減小誤差。

一方面:在樣本的抽樣中,會産生重複的樣本,這樣每一個子模型在拟合時都不會采用全部的樣本,就不會産生過拟合現象。

另一方面:在特征值的采樣中,選擇有限的特征,這樣每一個子模型可能不會生成完整的決策樹(效果上類似于剪枝),是以不會産生過拟合現象。

3.Boosting

提升方法(Boosting)在該文進行了詳細闡述。

提升樹中,子模型的split為1時(即模型為樹樁)通常效果較好,因為每次疊代産生的子模型都依賴于上一個子模型的結果(即與每次疊代的殘差有關),是以每個模型之間的相關度越低,提升的效果越好。此時每一個子模型隻包括一個特征,相當于加法模型。split越多,子模型考慮的特征數就越多,interaction depth就越大。

Boosting與前兩者的差別:

  • Boosting根據錯誤率調整樣本權重,錯誤率越大的樣本權重越大;
  • Bagging使用的是均勻取樣,每個樣本權重相等。
  • Boosting各個預測函數必須按順序疊代生成;
  • Bagging各個預測函數可以并行生成。
  • Boosting中誤差越小的預測函數其權重越大;
  • Bagging所有的預測函數的權重相等。

參考

[1]《An introduction to statistical learning; with Application in R》