文章轉自公眾號【機器學習煉丹術】,關注回覆“煉丹”即可獲得海量免費學習資料哦!
為什麼現在還要學習隨機森林?
隨機森林中仍有兩個未解之謎(對我來說)。隨機森林採用的bagging思想中怎麼得到的62.3% 以及 隨機森林和bagging的方法是否有區別。
隨機森林(Random Forest)就是通過整合學習的思想將多棵決策樹整合的一種演算法。基本單元是決策樹。隨機森林演算法的提出也是為了改善決策樹容易存在過擬合的情況。
1 隨機森林
習慣上,我們將眾多分類器(SVM、Logistic迴歸、決策樹等)所組成的“總的分類器”,叫做隨機森林。隨機森林有兩個關鍵詞,一個是“隨機”,一個是“森林”。森林就是成百上千棵樹,體現了整合的思想,隨機將會在下面總結到。
2 bagging
Bagging,其實就是bootstrap aggregating的縮寫, 兩者是等價的,其核心就是有放回抽樣。
【bagging具體步驟】
- 從大小為n的樣本集中有放回地重取樣選出n個樣本;(沒錯就是n個樣本抽取n個)
- 在所有屬性上,對這n個樣本建立分類器(ID3資訊增益、C4.5資訊增益率、CART基尼係數、SVM、Logistic迴歸等)
- 重複以上兩步m次,即獲得了m個分類器;
- 將預測資料放在這m個分類器上,最後根據這m個分類器的投票結果,決定資料屬於哪一類。
3 神祕的63.2%
一般被大家知曉的是:隨機森林中每一次取樣的比例是63.2%。 這個比例到底是怎麼確定的呢?
在某手的面試中,我被問到了這個相關的問題,奈何學藝不精,哎。後來苦苦研究15分鐘,終於得到答案,現在分享給大家。
bagging的最初的說法其實是:n個樣本從中有放回抽樣n次,這種條件下,勢必會有抽取到相同樣本的可能性,那麼抽取到不同樣本的期望值是多少呢?其實大家心裡可能會有答案了,沒錯就是0.632n。
我們假設\(U(k)\)表示第k次抽樣抽取到不同樣本的概率。那麼\(U(k-1)\)則表示第k-1次抽樣抽取到不同樣本的概率。
- 第k-1次抽樣到不同樣本的概率:\(U(k-1)\)
- 第k-1次抽樣時,有\(nU(k-1)\)個樣本還沒有被抽取
- 第k次抽樣時,還有\(nU(k-1)-U(k-1)\)的樣本沒有抽取
- 因此\(U(k)=\frac{n-1}{n}U(k-1)=(\frac{n-1}{n})^{k-1}U(1)\)
- \(U(1)=1\),第一次抽樣的資料一定不會重複
因此k次放回抽樣的不同樣本的期望值為:
\(\sum^{k-1}_{i=1}{U(i)}=1+\frac{n-1}{n}+(\frac{n-1}{n})^2+…\)
利用等比數列的性質,得到:
\(\sum^{k-1}_{i=1}{U(i)}=(1-(\frac{n-1}{n})^k)n\)
當n足夠大,並且k=n的情況下,上面的公式等於
所以證明完畢,每一次bagging取樣重複抽取n次其實只有63.2%的樣本會被取樣到。
4 隨機森林 vs bagging
隨機森林(Random Forest)在Bagging基礎上進行了修改。 具體步驟可以總結如下:
-
從訓練樣本集中採用Bootstrap的方法有放回地重取樣選出n個樣本,即每棵樹的訓練資料集都是不同的 ,裡面包含重複的訓練樣本(這意味著隨機森林並不是按照bagging的0.632比例取樣 );
-
從所有屬性中有選擇地選出K個屬性,選擇最佳屬性作為節點建立CART決策樹;
-
重複以上步驟m次,即建立了m棵CART決策樹
-
這m個CART形成隨機森林,通過投票表決分類結果,決定資料是屬於哪一類。
隨機森林(Random Forest)的隨機性主要體現在兩方面,一方面是樣本隨機,另一方面是屬性隨機。樣本隨機的原因是如果樣本不隨機,每棵樹的訓練資料都一樣,那麼最終訓練出的分類結果也是完全一樣的。
5 投票策略
- 少數服從多數
- 一票否決
- 聽說還有貝葉斯平均的方法。但是我沒有過多瞭解。一般還是用少數服從多數的吧。
6 隨機森林的特點
6.1 優點
- 在當前的演算法中,具有極好的準確率
- 能夠執行在大資料上
- 能夠處理具有高維特徵的輸入樣本,不需要降維
- 能夠計算各個特徵的重要度
- 能夠防止過擬合
6.2 bias 與 variance
說到機器學習模型的誤差,主要就是bias和variance。
-
Bias:如果一個模型的訓練錯誤大,然後驗證錯誤和訓練錯誤都很大,那麼這個模型就是高bias。可能是因為欠擬合,也可能是因為模型是弱分類器。
-
Variance:模型的訓練錯誤小,但是驗證錯誤遠大於訓練錯誤,那麼這個模型就是高Variance,或者說它是過擬合。
這個圖中,左上角是低偏差低方差的,可以看到所有的預測值,都會落在靶心,完美模型;
右上角是高偏差,可以看到,雖然整體資料預測的好像都在中心,但是波動很大。
【高偏差vs高方差】
在機器學習中,因為偏差和方差不能兼顧,所以我們一般會選擇高偏差、低方差的左下角的模型。穩定性是最重要的,寧可所有的樣本都80%正確率,也不要部分樣本100%、部分50%的正確率。個人感覺,穩定性是學習到東西的體現,高方差模型與隨機蒙的有什麼區別?
6.3 隨機森林降低偏差證明
上面的可能有些抽象,這裡用RandomForest(RF)來作為例子:
隨機森林是bagging的整合模型,這裡:
\(RF(x)=\frac{1}{B}\sum^B_{i=1}{T_{i,z_i}(x)}\)
- RF(x)表示隨機森林對樣本x的預測值;
- B表示總共有B棵樹;
- \(z_i\)表示第i棵樹所使用的訓練集,是使用bagging的方法,從所有訓練集中進行行取樣和列取樣得到的子資料集。
這裡所有的\(z\),都是從所有資料集中隨機取樣的,所以可以理解為都是服從相同分佈的。所以不斷增加B的數量,增加隨機森林中樹的數量,是不會減小模型的偏差的。
【個人感覺,是因為不管訓練再多的樹,其實就那麼多資料,怎麼訓練都不會減少,這一點比較好理解】
【RF是如何降低偏差的?】
直觀上,使用多棵樹和bagging,是可以增加模型的穩定性的。怎麼證明的?
我們需要計算\(Var(T(x))\)
假設不同樹的\(z_i\)之間的相關係數為\(\rho\),然後每棵樹的方差都是\(\sigma^2\).
先複習一下兩個隨機變數相加的方差如何表示:
\(Var(aX+bY)=a^2 Var(X)+b^2 Var(Y) + 2ab cov(X,Y)\)
- Cov(X,Y)表示X和Y的協方差。協方差和相關係數不一樣哦,要除以X和Y的標準差:
\(\rho=\frac{cov(X,Y)}{\sigma_X \sigma_Y}\)
下面轉成B個相關變數的方差計算,是矩陣的形式:
很好推導的,可以試一試。
這樣可以看出來了,RF的樹的數量越多,RF方差的第二項會不斷減小,但是第一項不變。也就是說,第一項就是RF模型偏差的下極限了。
【總結】
- 增加決策樹的數量B,偏差不變;方差減小;
- 增加決策樹深度,偏差減小;\(\rho\)減小,\(\sigma^2\)增加;
- 增加bagging取樣比例,偏差減小;\(\rho\)增加,\(\sigma^2\)增加;
【bagging vs boost】
之前的文章也提到過了boost演算法。
GBDT中,在某種情況下,是不斷訓練之前模型的殘差,來達到降低bias的效果。雖然也是整合模型,但是可以想到,每一個GBDT中的樹,所學習的資料的分佈都是不同的,這意味著在GBDT模型的方差會隨著決策樹的數量增多,不斷地增加。
- bagging的目的:降低方差;
- boost的目的:降低偏差