在集成學習原理小結中,咱們講到了集成學習有兩個流派,一個是boosting派系,它的特色是各個弱學習器之間有依賴關係。另外一種是bagging流派,它的特色是各個弱學習器之間沒有依賴關係,能夠並行擬合。本文就對集成學習中Bagging與隨機森林算法作一個總結。html
隨機森林是集成學習中能夠和梯度提高樹GBDT平起平坐的算法,尤爲是它能夠很方便的並行訓練,在現在大數據大樣本的的時代頗有誘惑力。算法
在集成學習原理小結中,咱們給Bagging畫了下面一張原理圖。bootstrap
從上圖能夠看出,Bagging的弱學習器之間的確沒有boosting那樣的聯繫。它的特色在「隨機採樣」。那麼什麼是隨機採樣?網絡
隨機採樣(bootsrap)就是從咱們的訓練集裏面採集固定個數的樣本,可是每採集一個樣本後,都將樣本放回。也就是說,以前採集到的樣本在放回後有可能繼續被採集到。對於咱們的Bagging算法,通常會隨機採集和訓練集樣本數m同樣個數的樣本。這樣獲得的採樣集和訓練集樣本的個數相同,可是樣本內容不一樣。若是咱們對有m個樣本訓練集作T次的隨機採樣,,則因爲隨機性,T個採樣集各不相同。dom
注意到這和GBDT的子採樣是不一樣的。GBDT的子採樣是無放回採樣,而Bagging的子採樣是放回採樣。post
對於一個樣本,它在某一次含m個樣本的訓練集的隨機採樣中,每次被採集到的機率是1m1m。不被採集到的機率爲1−1m1−1m。若是m次採樣都沒有被採集中的機率是(1−1m)m(1−1m)m。當m→∞m→∞時,(1−1m)m→1e≃0.368(1−1m)m→1e≃0.368。也就是說,在bagging的每輪隨機採樣中,訓練集中大約有36.8%的數據沒有被採樣集採集中。學習
對於這部分大約36.8%的沒有被採樣到的數據,咱們經常稱之爲袋外數據(Out Of Bag, 簡稱OOB)。這些數據沒有參與訓練集模型的擬合,所以能夠用來檢測模型的泛化能力。測試
bagging對於弱學習器沒有限制,這和Adaboost同樣。可是最經常使用的通常也是決策樹和神經網絡。大數據
bagging的集合策略也比較簡單,對於分類問題,一般使用簡單投票法,獲得最多票數的類別或者類別之一爲最終的模型輸出。對於迴歸問題,一般使用簡單平均法,對T個弱學習器獲得的迴歸結果進行算術平均獲得最終的模型輸出。編碼
因爲Bagging算法每次都進行採樣來訓練模型,所以泛化能力很強,對於下降模型的方差頗有做用。固然對於訓練集的擬合程度就會差一些,也就是模型的偏倚會大一些。
上一節咱們對bagging算法的原理作了總結,這裏就對bagging算法的流程作一個總結。相對於Boosting系列的Adaboost和GBDT,bagging算法要簡單的多。
輸入爲樣本集D={(x,y1),(x2,y2),...(xm,ym)}D={(x,y1),(x2,y2),...(xm,ym)},弱學習器算法, 弱分類器迭代次數T。
輸出爲最終的強分類器f(x)f(x)
1)對於t=1,2...,T:
a)對訓練集進行第t次隨機採樣,共採集m次,獲得包含m個樣本的採樣集DmDm
b)用採樣集DmDm訓練第m個弱學習器Gm(x)Gm(x)
2) 若是是分類算法預測,則T個弱學習器投出最多票數的類別或者類別之一爲最終類別。若是是迴歸算法,T個弱學習器獲得的迴歸結果進行算術平均獲得的值爲最終的模型輸出。
理解了bagging算法,隨機森林(Random Forest,如下簡稱RF)就好理解了。它是Bagging算法的進化版,也就是說,它的思想仍然是bagging,可是進行了獨有的改進。咱們如今就來看看RF算法改進了什麼。
首先,RF使用了CART決策樹做爲弱學習器,這讓咱們想到了梯度提示樹GBDT。第二,在使用決策樹的基礎上,RF對決策樹的創建作了改進,對於普通的決策樹,咱們會在節點上全部的n個樣本特徵中選擇一個最優的特徵來作決策樹的左右子樹劃分,可是RF經過隨機選擇節點上的一部分樣本特徵,這個數字小於n,假設爲nsubnsub,而後在這些隨機選擇的nsubnsub個樣本特徵中,選擇一個最優的特徵來作決策樹的左右子樹劃分。這樣進一步加強了模型的泛化能力。
若是nsub=nnsub=n,則此時RF的CART決策樹和普通的CART決策樹沒有區別。nsubnsub越小,則模型約健壯,固然此時對於訓練集的擬合程度會變差。也就是說nsubnsub越小,模型的方差會減少,可是偏倚會增大。在實際案例中,通常會經過交叉驗證調參獲取一個合適的nsubnsub的值。
除了上面兩點,RF和普通的bagging算法沒有什麼不一樣, 下面簡單總結下RF的算法。
輸入爲樣本集D={(x,y1),(x2,y2),...(xm,ym)}D={(x,y1),(x2,y2),...(xm,ym)},弱分類器迭代次數T。
輸出爲最終的強分類器f(x)f(x)
1)對於t=1,2...,T:
a)對訓練集進行第t次隨機採樣,共採集m次,獲得包含m個樣本的採樣集DmDm
b)用採樣集DmDm訓練第m個決策樹模型Gm(x)Gm(x),在訓練決策樹模型的節點的時候, 在節點上全部的樣本特徵中選擇一部分樣本特徵, 在這些隨機選擇的部分樣本特徵中選擇一個最優的特徵來作決策樹的左右子樹劃分
2) 若是是分類算法預測,則T個弱學習器投出最多票數的類別或者類別之一爲最終類別。若是是迴歸算法,T個弱學習器獲得的迴歸結果進行算術平均獲得的值爲最終的模型輸出。
因爲RF在實際應用中的良好特性,基於RF,有不少變種算法,應用也很普遍,不光能夠用於分類迴歸,還能夠用於特徵轉換,異常點檢測等。下面對於這些RF家族的算法中有表明性的作一個總結。
extra trees是RF的一個變種, 原理幾乎和RF如出一轍,僅有區別有:
1) 對於每一個決策樹的訓練集,RF採用的是隨機採樣bootstrap來選擇採樣集做爲每一個決策樹的訓練集,而extra trees通常不採用隨機採樣,即每一個決策樹採用原始訓練集。
2) 在選定了劃分特徵後,RF的決策樹會基於信息增益,基尼係數,均方差之類的原則,選擇一個最優的特徵值劃分點,這和傳統的決策樹相同。可是extra trees比較的激進,他會隨機的選擇一個特徵值來劃分決策樹。
從第二點能夠看出,因爲隨機選擇了特徵值的劃分點位,而不是最優勢位,這樣會致使生成的決策樹的規模通常會大於RF所生成的決策樹。也就是說,模型的方差相對於RF進一步減小,可是偏倚相對於RF進一步增大。在某些時候,extra trees的泛化能力比RF更好。
Totally Random Trees Embedding(如下簡稱 TRTE)是一種非監督學習的數據轉化方法。它將低維的數據集映射到高維,從而讓映射到高維的數據更好的運用於分類迴歸模型。咱們知道,在支持向量機中運用了核方法來將低維的數據集映射到高維,此處TRTE提供了另一種方法。
TRTE在數據轉化的過程也使用了相似於RF的方法,創建T個決策樹來擬合數據。當決策樹創建完畢之後,數據集裏的每一個數據在T個決策樹中葉子節點的位置也定下來了。好比咱們有3顆決策樹,每一個決策樹有5個葉子節點,某個數據特徵xx劃分到第一個決策樹的第2個葉子節點,第二個決策樹的第3個葉子節點,第三個決策樹的第5個葉子節點。則x映射後的特徵編碼爲(0,1,0,0,0, 0,0,1,0,0, 0,0,0,0,1), 有15維的高維特徵。這裏特徵維度之間加上空格是爲了強調三顆決策樹各自的子編碼。
映射到高維特徵後,能夠繼續使用監督學習的各類分類迴歸算法了。
Isolation Forest(如下簡稱IForest)是一種異常點檢測的方法。它也使用了相似於RF的方法來檢測異常點。
對於在T個決策樹的樣本集,IForest也會對訓練集進行隨機採樣,可是採樣個數不須要和RF同樣,對於RF,須要採樣到採樣集樣本個數等於訓練集個數。可是IForest不須要採樣這麼多,通常來講,採樣個數要遠遠小於訓練集個數?爲何呢?由於咱們的目的是異常點檢測,只須要部分的樣本咱們通常就能夠將異常點區別出來了。
對於每個決策樹的創建, IForest採用隨機選擇一個劃分特徵,對劃分特徵隨機選擇一個劃分閾值。這點也和RF不一樣。
另外,IForest通常會選擇一個比較小的最大決策樹深度max_depth,緣由一樣本採集,用少許的異常點檢測通常不須要這麼大規模的決策樹。
對於異常點的判斷,則是將測試樣本點xx擬合到T顆決策樹。計算在每顆決策樹上該樣本的葉子節點的深度ht(x)ht(x)。,從而能夠計算出平均高度h(x)。此時咱們用下面的公式計算樣本點xx的異常機率:
其中,m爲樣本個數。c(m)c(m)的表達式爲:
s(x,m)的取值範圍是[0,1],取值越接近於1,則是異常點的機率也越大。
RF的算法原理也終於講完了,做爲一個能夠高度並行化的算法,RF在大數據時候大有可爲。 這裏也對常規的隨機森林算法的優缺點作一個總結。
RF的主要優勢有:
1) 訓練能夠高度並行化,對於大數據時代的大樣本訓練速度有優點。我的以爲這是的最主要的優勢。
2) 因爲能夠隨機選擇決策樹節點劃分特徵,這樣在樣本特徵維度很高的時候,仍然能高效的訓練模型。
3) 在訓練後,能夠給出各個特徵對於輸出的重要性
4) 因爲採用了隨機採樣,訓練出的模型的方差小,泛化能力強。
5) 相對於Boosting系列的Adaboost和GBDT, RF實現比較簡單。
6) 對部分特徵缺失不敏感。
RF的主要缺點有:
1)在某些噪音比較大的樣本集上,RF模型容易陷入過擬合。
2) 取值劃分比較多的特徵容易對RF的決策產生更大的影響,從而影響擬合的模型的效果。