模型融合---Random Forest總結

1、簡介

RF = Bagging + Decision Treenode

隨機:數據採樣隨機,特徵選擇隨機算法

森林:多個決策樹並行放在一塊兒bootstrap

幾個誤區:數組

  • 不是每棵樹隨機選擇特徵,而是每個結點都隨機選擇固定數目的特徵
  • 採樣。樣本數量爲N,採樣數量也爲N,可是採起的是有放回的採樣(bootstrap)。
  • 組合算法。訓練結束以後,對新數據進行預測的時候,會讓新數據在全部獲得的M個決策樹上進行預測,最後對結果進行平均或者進行投票。最先的算法是投票:每一個樹對每一類投票,sklearn的算法是對各個樹進行了平均取結果。
  • 分類和迴歸。隨機森林能夠作分類,也能夠作迴歸,可是很顯然(實踐上也是),作迴歸有點不靠譜,因此研究隨機森林迴歸意思不大。
  • 假設總共有1-6個特徵,若是第一個節點隨機選出了一、二、3這三個特徵,而後根據信息增益保留了1;而後第二個節點隨機選擇特徵是在2-6選擇仍是1-6中選擇呢?答案仍是從1-6中選擇增益最大的特徵

1.RF的算法的流程?

  首先咱們來複習一下以前介紹過的兩個機器學習模型:Bagging和Decision Tree。Bagging是經過bootstrap的方式,從原始的數據集D中獲得新的D^;而後再使用一些base algorithm對每一個D^都獲得相應的gt​;最後將全部的gt​經過投票uniform的形式組合成一個G,G即爲咱們最終獲得的模型。Decision Tree是經過遞歸形式,利用分支條件,將原始數據集D切割成一個個子樹結構,長成一棵完整的樹形結構。Decision Tree最終獲得的G(x)是由相應的分支條件b(x)和分支樹Gc​(x)遞歸組成。

  Bagging和Decison Tree算法各自有一個很重要的特色。Bagging具備 減小不一樣gt​的方差variance的特色。這是由於Bagging採用投票的形式,將全部gt ​uniform結合起來,起到了求平均的做用,從而下降variance。而Decision Tree具備 增大不一樣gt​的方差variance的特色。這是由於Decision Tree每次切割的方式不一樣,並且分支包含的樣本數在逐漸減小,因此它對不一樣的資料D會比較敏感一些,從而不一樣的D會獲得比較大的variance。
  因此說, Bagging能減少variance,而Decision Tree能增大variance。若是把二者結合起來,可否發揮各自的優點,起到優點互補的做用呢?這就是咱們接下來將要討論的aggregation of aggregation,即便用Bagging的方式把衆多的Decision Tree進行uniform結合起來。這種算法就叫作隨機森林(Random Forest),它將徹底長成的C&RT決策樹經過bagging的形式結合起來,最終獲得一個龐大的決策模型。
  Random Forest算法流程圖以下所示:

(1)隨機抽取資料

  以上是基本的Random Forest算法,咱們再來看一下如何讓Random Forest中決策樹的結構更有多樣性。Bagging中,經過bootstrap的方法獲得不一樣於D的D’,使用這些隨機抽取的資料獲得不一樣的gt。

(2)隨機抽取特徵

【1】隨機抽取特徵

  例如,原來有100個特徵,如今只從中隨機選取30個來構成決策樹,那麼每一輪獲得的樹都由不一樣的30個特徵構成,每棵樹都不同。假設原來樣本維度是d,則只選擇其中的d’(d’小於d)個維度來創建決策樹結構。這相似是一種從d維到d’維的特徵轉換,至關因而從高維到低維的投影,也就是說d’維z空間其實就是d維x空間的一個隨機子空間(subspace)。一般狀況下,d’遠小於d,從而保證算法更有效率。Random Forest算法的做者建議在構建C&RT每一個分支b(x)的時候,均可以從新選擇子特徵來訓練,從而獲得更具備多樣性的決策樹。 【具體怎麼選特徵看第三節】
 

  因此說,這種加強的Random Forest算法增長了random-subspacedom

 

爲何bagging能夠減小方差?機器學習

 

 

 

【2】組合特徵  

  上面咱們講的是隨機抽取特徵,除此以外,還能夠將現有的特徵x,經過數組p進行線性組合,來保持多樣性學習

   這種方法使每次分支獲得的再也不是單一的子特徵集合,而是子特徵的線性組合(權重不爲1)。比如在二維平面上不止獲得水平線和垂直線,也能獲得各類斜線。這種作法使子特徵選擇更加多樣性。值得注意的是,不一樣分支i下的pi是不一樣的,並且向量pi中大部分元素爲零,由於咱們選擇的只是一部分特徵,這是一種低維映射。

  因此,這裏的Random Forest算法又有加強,由原來的random-subspace變成了random-combination。順便提一下,這裏的random-combination相似於perceptron模型。測試

 

2.Out-of-Bag Estimate

  上一部分咱們已經介紹了Random Forest算法,而Random Forest算法重要的一點就是Bagging。接下來將繼續探討bagging中的bootstrap機制到底蘊含了哪些能夠爲咱們所用的東西。spa

  經過bootstrap獲得新的樣本集D',再由D'訓練不一樣的gt。咱們知道D'中包含了原樣本集D中的一些樣本,但也有些樣本沒有涵蓋進去。以下表所示,不一樣的gt下,紅色的*表示在中沒有這些樣本。例如對g1來講,(x2,y2)和(x3,y4)沒有包含進去,對g2來講,(x1,y1)和(x2,y2)沒有包含進去,等等。每一個gt中,紅色*表示的樣本被稱爲out-of-bag(OOB) example。
  首先,咱們來計算OOB樣本到底有多少。假設bootstrap的數量N'=N,那麼某個樣本(xn,yn)是OOB的機率是:

  其中,e是天然對數,N是原樣本集的數量。由上述推導可得,每一個gt中,OOB數目大約是1/e*N ,即大約有三分之一的樣本沒有在bootstrap中被抽到。3d

  而後,咱們將OOB與以前介紹的Validation進行對比:

   這種作法咱們並不陌生,就像是咱們以前介紹過的Leave-One-Out Cross Validation,每次只對一個樣本進行g -的驗證同樣,只不過這裏選擇的是每一個樣本是哪些gt 的OOB,而後再分別進行G'n(x)的驗證。每一個樣本都當成驗證資料一次(與留一法相同),最後計算全部樣本的平均表現:

 

3.RF如何選擇特徵 ?

  若是樣本資料特徵過多,假若有10000個特徵,而咱們只想從中選取300個特徵,這時候就須要捨棄部分特徵。一般來講,須要移除的特徵分爲兩類:一類是 冗餘特徵,即特徵出現重複,例如「年齡」和「生日」;另外一類是 不相關特徵,例如疾病預測的時候引入的「保險情況」。這種從d維特徵到d’維特徵的subset-transform Φ(x)稱爲Feature Selection,最終使用這些d’維的特徵進行模型訓練。

特徵選擇的優勢是:

  • 提升效率,特徵越少,模型越簡單
  • 正則化,防止特徵過多出現過擬合
  • 去除無關特徵,保留相關性大的特徵,解釋性強

同時,特徵選擇的缺點是:

  • 篩選特徵的計算量較大
  • 不一樣特徵組合,也容易發生過擬合
  • 容易選到無關特徵,解釋性差

(1)線性模型

  值得一提的是,在decision tree中,咱們使用的decision stump切割方式也是一種feature selection。那麼,如何對許多維特徵進行篩選呢?咱們能夠經過計算出每一個特徵的重要性(即權重),而後再根據重要性的排序進行選擇便可。

  這種方法在線性模型中比較容易計算。由於線性模型的score是由每一個特徵通過加權求和而獲得的,而加權係數的絕對值|wi|正好表明了對應特徵xi的重要性爲多少。|wi|越大,表示對應特徵xi越重要,則該特徵應該被選擇。w的值能夠經過對已有的數據集(xi,yi)創建線性模型而獲得。

(2)非線性模型

  然而,對於非線性模型來講,由於 不一樣特徵多是非線性交叉在一塊兒的,因此計算每一個特徵的重要性就變得比較複雜和困難。例如,Random Forest就是一個非線性模型,接下來,咱們將討論如何在RF下進行特徵選擇。
  RF中,特徵選擇的核心思想是 random test。random test的作法是 對於某個特徵,若是用另一個隨機值替代它以後的表現比以前更差,則代表該特徵比較重要,所佔的權重應該較大,不能用一個隨機值替代。相反,若是隨機值替代後的表現沒有太大差異,則代表該特徵不那麼重要,無關緊要因此,經過比較某特徵被隨機值替代先後的表現,就能推斷出該特徵的權重和重要性。
  那麼random test中的隨機值如何選擇呢?一般有兩種方法:一是使用 uniform或者gaussian抽取隨機值替換原特徵;一是 經過permutation的方式將原來的全部N個樣本的第i個特徵值從新打亂分佈(至關於從新洗牌)。比較而言,第二種方法更加科學,保證了特徵替代值與原特徵的分佈是近似的(只是從新洗牌而已)。這種方法叫作 permutation test(隨機排序測試),即在計算第i個特徵的重要性的時候,將N個樣本的第i個特徵從新洗牌,而後比較D和D^(p)表現的差別性。若是差別很大,則代表第i個特徵是重要的。

  知道了permutation test的原理後,接下來要考慮的問題是 如何衡量上圖中的performance,即替換先後的表現。顯然,咱們前面介紹過performance能夠用Eoob(G) 來衡量。可是,對於N個樣本的第i個特徵值從新洗牌重置的D^(p),要對它進行從新訓練,並且每一個特徵都要重複訓練,而後再與原D的表現進行比較,過程很是繁瑣。爲了簡化運算,RF的做者提出了一種方法,就是 把permutation的操做從原來的training上移到了OOB validation上去,記爲
  也就是說,在訓練的時候仍然使用D,可是在OOB驗證的時候,將全部的OOB樣本的第i個特徵從新洗牌,驗證G的表現。這種作法大大簡化了計算複雜度,在RF的feature selection中應用普遍。

4.RF的參數有哪些,如何調參 ?

  要調整的參數主要是  n_estimatorsmax_features 
(1)n_estimators是森林裏樹的數量,一般數量越大,效果越好,可是計算時間也會隨之增長。 此外要注意,當樹的數量超過一個臨界值以後,算法的效果並不會很顯著地變好。
(2)max_features是分割節點時考慮的特徵的隨機子集的大小。 這個值越低,方差減少得越多,可是誤差的增大也越多。
  • 迴歸問題中使用 max_features = n_features
  • 分類問題使用 max_features = sqrt(n_features )(其中 n_features 是特徵的個數)是比較好的默認值。 max_depth = None 和 min_samples_split = 2 結合一般會有不錯的效果(即生成徹底的樹)。 

(3)warm_start=False:熱啓動,決定是否使用上次調用該類的結果真後增長新的。

(4)class_weight=None:各個label的權重。
 

進行預測能夠有幾種形式:

predict_proba(x):給出帶有機率值的結果。每一個點在全部label的機率和爲1.
predict(x):直接給出預測結果。內部仍是調用的predict_proba(),根據機率的結果看哪一個類型的預測值最高就是哪一個類型。
predict_log_proba(x):和predict_proba基本上同樣,只是把結果給作了log()處理。

 

  請記住,這些(默認)值一般不是最佳的,同時還可能消耗大量的內存,最佳參數值應由交叉驗證得到。 另外,請注意, 隨機森林中,默認使用自助採樣法(bootstrap = True), 然而 extra-trees 的默認策略是使用整個數據集(bootstrap = False)。 當使用自助採樣法方法抽樣時,泛化精度是能夠經過剩餘的或者袋外的樣原本估算的,設置 oob_score = True 便可實現。
 
提示:
默認參數下模型複雜度是:O(M*N*log(N)) , 其中 M 是樹的數目, N 是樣本數。 能夠經過設置如下參數來下降模型複雜度: min_samples_split , min_samples_leaf , max_leaf_nodes`` 和 ``max_depth 。

5.RF的優缺點 ?

優勢:

  • 不一樣決策樹能夠由不一樣主機並行訓練生成,效率很高;
  • 隨機森林算法繼承了CART的優勢;
  • 將全部的決策樹經過bagging的形式結合起來,避免了單個決策樹形成過擬合的問題。

缺點:

  • 當咱們須要推斷超出範圍的獨立變量或非獨立變量,隨機森林作得並很差,咱們最好使用如 MARS 那樣的算法。
  • 隨機森林算法在訓練和預測時都比較慢。
  • 若是須要區分的類別十分多,隨機森林的表現並不會很好。

 

參考文獻:

【1】林軒田機器學習技法課程學習筆記10 — Random Forest

【2】從決策樹到隨機森林:樹型算法的原理與實現

【3】獨家 | 一文讀懂隨機森林的解釋和實現

相關文章
相關標籤/搜索