隨機森林原理
隨機森林(Random Forest,RF)
1、前言:整合學習(ensemble learning)
概念:整合學習通過訓練多個分類器,然後把這些分類器組合起來,以達到更好的預測效能。
整合學習演算法之一:Boosting,它的特點是各個弱學習器之間有依賴關係。他通過迭代地訓練一系列的分類器,每個分類器採用的樣本的選擇方式都和上一輪的學習結果有關。例如在AdaBoost中,之前分類錯誤的樣本有較高的可能性被選到,在之前分類正確的樣本有較小的概率被選到。就像你在背單詞,你今天總會選擇前面幾天背不下來的單詞,Boosting也會選擇前面輪數沒學下來的樣本。這個類別下面的主要演算法是AdaBoost
整合學習演算法之二:Bagging,它的特點是各個弱學習器之間沒有依賴關係,可以並行擬合。每個分類器的樣本按這樣的方式產生:每個分類器都隨機從原樣本中做有放回的取樣,然後分別在這些取樣後的樣本上訓練分類器,然後再把這些分類器組合起來。簡單的多數投票一般就可以。這個類別有個非常牛逼的演算法叫Random Forest,它的每個基分類器都是一棵決策樹,如果你仔細學習你會發現它的每棵樹和基本的決策樹的不同,非常神奇的演算法。
2、bagging原理 bagging整合學習方法可以利用下圖說明: 從上圖可以看出,Bagging的弱學習器之間的確沒有boosting那樣的聯絡。它的特點在“隨機取樣”
隨機取樣(bootsrap)就是從我們的訓練集裡面採集固定個數的樣本,但是每採集一個樣本後,都將樣本放回。也就是說,之前
採集到的樣本在放回後有可能繼續被採集到。對於我們的Bagging演算法,一般會隨機採集和訓練集樣本數m一樣個數的樣本。這樣得
到的樣本集和訓練集樣本的個數相同,但是樣本內容不同。如果我們對有m個樣本訓練集做T次的隨機取樣,,則由於隨機性,T個
取樣集各不相同。注意到這和GBDT的子取樣是不同的。GBDT的子取樣是無放回取樣,而Bagging的子取樣是放回取樣。
對於一個樣本,它在某一次含m個樣本的訓練集的隨機取樣中,每次被採集到的概率是1/m。不被採集到的概率為1−1/m。如
果m次取樣都沒有被採集中的概率是(1−1/m)^m。當m→∞m→∞時,(1−1/m)^m→ 1/e≃0.368。也就是說,在bagging每輪隨機
取樣中,訓練集中大約有36.8%的資料沒有被取樣集採集中。
對於這部分大約36.8%的沒有被取樣到的資料,我們常常稱之為袋外資料(Out Of Bag, 簡稱OOB)。這些資料沒有參與訓練集
模型的擬合,因此可以用來檢測模型的泛化能力。
bagging對於弱學習器沒有限制,這和Adaboost一樣。但是最常用的一般也是決策樹和神經網路。
bagging的集合策略也比較簡單,對於分類問題,通常使用簡單投票法,得到最多票數的類別或者類別之一為最終的模型輸出
。對於迴歸問題,通常使用簡單平均法,對T個弱學習器得到的迴歸結果進行算術平均得到最終的模型輸出。
由於Bagging演算法每次都進行取樣來訓練模型,因此泛化能力很強,對於降低模型的方差很有作用。當然對於訓練集的擬合程度就會差一些,也就是模型的偏倚會大一些。
3、bagging演算法流程
4、隨機森林演算法上一節我們對bagging演算法的原理做了總結,這裡就對bagging演算法的流程做一個總結。相對於Boosting系列的Adaboost和GBDT,bagging演算法要簡單的多。
輸入為樣本集D={(x1,y1),(x2,y2),...(xm,ym)},弱學習器演算法, 弱分類器迭代次數T。輸出為最終的強分類器f(x).
1)對於t=1,2...,T:
- a)對訓練集進行第t次隨機取樣,共採集m次,得到包含m個樣本的取樣集Dm
- b)用取樣集Dm訓練第m個弱學習器Gm(x)
2) 如果是分類演算法預測,則T個弱學習器投出最多票數的類別或者類別之一為最終類別。如果是迴歸演算法,T個弱學習器得到的迴歸結果進行算術平均得到的值為最終的模型輸出。
理解了bagging演算法,隨機森林(Random Forest,以下簡稱RF)就好理解了。它是Bagging演算法的進化版,也就是說,它的思想仍然是bagging,但是進行了獨有的改進。我們現在就來看看RF演算法改進了什麼。
首先,RF使用了CART決策樹作為弱學習器,這讓我們想到了梯度提示樹GBDT。第二,在使用決策樹的基礎上,RF對決策樹的建立做了改進,對於普通的決策樹,我們會在節點上所有的n個樣本特徵中選擇一個最優的特徵來做決策樹的左右子樹劃分,但是RF通過隨機選擇節點上的一部分樣本特徵,這個數字小於n,假設為nsub,然後在這些隨機選擇的nsub個樣本特徵中,選擇一個最優的特徵來做決策樹的左右子樹劃分。這樣進一步增強了模型的泛化能力。
如果nsub=nnsub=n,則此時RF的CART決策樹和普通的CART決策樹沒有區別。nsub越小,則模型約健壯,當然此時對於訓練集的擬合程度會變差。也就是說nsub越小,模型的方差會減小,但是偏倚會增大。在實際案例中,一般會通過交叉驗證調參獲取一個合適的nsub的值。
除了上面兩點,RF和普通的bagging演算法沒有什麼不同, 下面簡單總結下RF的演算法。
輸入為樣本集D={(x1,y1),(x2,y2),...(xm,ym)},弱分類器迭代次數T。輸出為最終的強分類器f(x):
1)對於t=1,2...,T:
- a)對訓練集進行第t次隨機取樣,共採集m次,得到包含m個樣本的取樣集Dm
- b)用取樣集Dm訓練第m個決策樹模型Gm(x),在訓練決策樹模型的節點的時候, 在節點上所有的樣本特徵中選擇一部分樣本特徵,在這些隨機選擇的部分樣本特徵中選擇一個最優的特徵來做決策樹的左右子樹劃分
2) 如果是分類演算法預測,則T個弱學習器投出最多票數的類別或者類別之一為最終類別。如果是迴歸演算法,T個弱學習器得到的迴歸結果進行算術平均得到的值為最終的模型輸出。
5、隨機森林小結
RF的主要優點有:1)訓練可以高度並行化,對於大資料時代的大樣本訓練速度有優勢。個人覺得這是的最主要的優點。
2)由於可以隨機選擇決策樹節點劃分特徵,這樣在樣本特徵維度很高的時候,仍然能高效的訓練模型。
3)在訓練後,可以給出各個特徵對於輸出的重要性
4)由於採用了隨機取樣,訓練出的模型的方差小,泛化能力強。
5)相對於Boosting系列的Adaboost和GBDT, RF實現比較簡單。
6)對部分特徵缺失不敏感。
RF的主要缺點有:
1)在某些噪音比較大的樣本集上,RF模型容易陷入過擬合。
2)取值劃分比較多的特徵容易對RF的決策產生更大的影響,從而影響擬合的模型的效果