1. 程式人生 > >隨機森林算法基礎梳理

隨機森林算法基礎梳理

node 著名 權重 .net -m 集合方法 criterion normal 平衡

1.集成學習概念

  在機器學習的有監督學習算法中,我們的目標是學習出一個穩定的且在各個方面表現都較好的模型,但實際情況往往不這麽理想,有時我們只能得到多個有偏好的模型(弱監督模型,在某些方面表現的比較好)。集成學習就是組合這裏的多個弱監督模型以期得到一個更好更全面的強監督模型,集成學習潛在的思想是即便某一個弱分類器得到了錯誤的預測,其他的弱分類器也可以將錯誤糾正回來。

集成方法是將幾種機器學習技術組合成一個預測模型的元算法,以達到減小方差(bagging)、偏差(boosting)或改進預測(stacking)的效果。

集成學習在各個規模的數據集上都有很好的策略。

數據集大:劃分成多個小數據集,學習多個模型進行組合

數據集小:利用Bootstrap方法進行抽樣,得到多個數據集,分別訓練多個模型再進行組合

集合方法可分為兩類:

  • 序列集成方法,其中參與訓練的基礎學習器按照順序生成(例如 AdaBoost)。序列方法的原理是利用基礎學習器之間的依賴關系。通過對之前訓練中錯誤標記的樣本賦值較高的權重,可以提高整體的預測效果。
  • 並行集成方法,其中參與訓練的基礎學習器並行生成(例如 Random Forest)。並行方法的原理是利用基礎學習器之間的獨立性,通過平均可以顯著降低錯誤。

總結一下,集成學習法的特點:

  ① 將多個分類方法聚集在一起,以提高分類的準確率。

(這些算法可以是不同的算法,也可以是相同的算法。)

  ② 集成學習法由訓練數據構建一組基分類器,然後通過對每個基分類器的預測進行投票來進行分類

  ③ 嚴格來說,集成學習並不算是一種分類器,而是一種分類器結合的方法。

  ④ 通常一個集成分類器的分類性能會好於單個分類器

  ⑤ 如果把單個分類器比作一個決策者的話,集成學習的方法就相當於多個決策者共同進行一項決策

技術分享圖片

2.個體學習概念

    上一節我們講到,集成學習的第一個問題就是如何得到若幹個個體學習器。這裏我們有兩種選擇。

    第一種就是所有的個體學習器都是一個種類的,或者說是同質的。比如都是決策樹個體學習器,或者都是神經網絡個體學習器。第二種是所有的個體學習器不全是一個種類的,或者說是異質的。比如我們有一個分類問題,對訓練集采用支持向量機個體學習器,邏輯回歸個體學習器和樸素貝葉斯個體學習器來學習,再通過某種結合策略來確定最終的分類強學習器。

    目前來說,同質個體學習器的應用是最廣泛的,一般我們常說的集成學習的方法都是指的同質個體學習器。而同質個體學習器使用最多的模型是CART決策樹和神經網絡。同質個體學習器按照個體學習器之間是否存在依賴關系可以分為兩類,第一個是個體學習器之間存在強依賴關系,一系列個體學習器基本都需要串行生成,代表算法是boosting系列算法,第二個是個體學習器之間不存在強依賴關系,一系列個體學習器可以並行生成,代表算法是bagging和隨機森林(Random Forest)系列算法。

3.boosting

    boosting的算法原理我們可以用一張圖做一個概括如下:

技術分享圖片

    從圖中可以看出,Boosting算法的工作機制是首先從訓練集用初始權重訓練出一個弱學習器1,根據弱學習的學習誤差率表現來更新訓練樣本的權重,使得之前弱學習器1學習誤差率高的訓練樣本點的權重變高,使得這些誤差率高的點在後面的弱學習器2中得到更多的重視。然後基於調整權重後的訓練集來訓練弱學習器2.,如此重復進行,直到弱學習器數達到事先指定的數目T,最終將這T個弱學習器通過集合策略進行整合,得到最終的強學習器。

    Boosting系列算法裏最著名算法主要有AdaBoost算法和提升樹(boosting tree)系列算法。提升樹系列算法裏面應用最廣泛的是梯度提升樹(Gradient Boosting Tree)。

    AdaBoost(Adaptive boosting)算法:剛開始訓練時對每一個訓練例賦相等的權重,然後用該算法對訓練集訓練t輪,每次訓練後,對訓練失敗的訓練例賦以較大的權重,也就是讓學習算法在每次學習以後更註意學錯的樣本,從而得到多個預測函數。通過擬合殘差的方式逐步減小殘差,將每一步生成的模型疊加得到最終模型。

    GBDT(Gradient Boost Decision Tree),每一次的計算是為了減少上一次的殘差,GBDT在殘差減少(負梯度)的方向上建立一個新的模型。

4.bagging

    Bagging的算法原理和 boosting不同,它的弱學習器之間沒有依賴關系,可以並行生成,我們可以用一張圖做一個概括如下:

技術分享圖片

     從上圖可以看出,Bagging的弱學習器之間的確沒有boosting那樣的聯系。它的特點在“隨機采樣”。那麽什麽是隨機采樣?

    隨機采樣(bootsrap)就是從我們的訓練集裏面采集固定個數的樣本,但是每采集一個樣本後,都將樣本放回。也就是說,之前采集到的樣本在放回後有可能繼續被采集到。對於我們的Bagging算法,一般會隨機采集和訓練集樣本數m一樣個數的樣本。這樣得到的采樣集和訓練集樣本的個數相同,但是樣本內容不同。如果我們對有m個樣本訓練集做T次的隨機采樣,,則由於隨機性,T個采樣集各不相同。

    註意到這和GBDT的子采樣是不同的。GBDT的子采樣是無放回采樣,而Bagging的子采樣是放回采樣。

    對於一個樣本,它在某一次含m個樣本的訓練集的隨機采樣中,每次被采集到的概率是1/m。不被采集到的概率為1?(1/m)。在bagging的每輪隨機采樣中,訓練集中大約有36.8%的數據沒有被采樣集采集中。

    對於這部分大約36.8%的沒有被采樣到的數據,我們常常稱之為袋外數據(Out Of Bag, 簡稱OOB)。這些數據沒有參與訓練集模型的擬合,因此可以用來檢測模型的泛化能力。

    bagging對於弱學習器沒有限制,這和Adaboost一樣。但是最常用的一般也是決策樹和神經網絡。

    bagging的集合策略也比較簡單,對於分類問題,通常使用簡單投票法,得到最多票數的類別或者類別之一為最終的模型輸出。對於回歸問題,通常使用簡單平均法,對T個弱學習器得到的回歸結果進行算術平均得到最終的模型輸出。

    由於Bagging算法每次都進行采樣來訓練模型,因此泛化能力很強,對於降低模型的方差很有作用。當然對於訓練集的擬合程度就會差一些,也就是模型的偏倚會大一些。

5.Bagging,Boosting二者之間的區別

  1、Bagging和Boosting的區別:

  1)樣本選擇上:

  Bagging:訓練集是在原始集中有放回選取的,從原始集中選出的各輪訓練集之間是獨立的。

  Boosting:每一輪的訓練集不變,只是訓練集中每個樣例在分類器中的權重發生變化。而權值是根據上一輪的分類結果進行調整。

  2)樣例權重:

  Bagging:使用均勻取樣,每個樣例的權重相等

  Boosting:根據錯誤率不斷調整樣例的權值,錯誤率越大則權重越大。

  3)預測函數:

  Bagging:所有預測函數的權重相等。

  Boosting:每個弱分類器都有相應的權重,對於分類誤差小的分類器會有更大的權重。

  4)並行計算:

  Bagging:各個預測函數可以並行生成

  Boosting:各個預測函數只能順序生成,因為後一個模型參數需要前一輪模型的結果。

決策樹與這些算法框架進行結合所得到的新的算法:

  1)Bagging + 決策樹 = 隨機森林

  2)AdaBoost + 決策樹 = 提升樹

  3)Gradient Boosting + 決策樹 = GBDT

6.結合策略

技術分享圖片

  6.1平均法

      對於數值類的回歸預測問題,通常使用的結合策略是平均法,也就是說,對於若幹個弱學習器的輸出進行平均得到最終的預測輸出。

      最簡單的平均是算術平均,也就是說最終預測是

                        技術分享圖片

      如果每個個體學習器有一個權重ww,則最終預測是

                        技術分享圖片

      其中wi是個體學習器hi的權重,通常有

                        技術分享圖片

      加權平均法的權重一般是從訓練數據中學習而得,現實任務中的訓練樣本通常不充分或存在噪聲,這將使得學出的權重不完全可靠。

      因此,實驗和應用均顯示出,加權平均分未必一定優於樸素的簡單平均法。一般而言,在個體學習器的性能相差較大時宜使用加權平均法,而在個體學習器性能相近時宜使用簡單平均法。

  

  6.2投票法

      對於分類問題的預測,我們通常使用的是投票法。假設我們的預測類別是

                                    技術分享圖片

      對於任意一個預測樣本x,我們的T個弱學習器的預測結果分別是

                                  技術分享圖片

      最簡單的投票法是相對多數投票法,也就是我們常說的少數服從多數,也就是T個弱學習器的對樣本x的預測結果中,數量最多的類別ci為最終的分類類別。如果不止一個類別獲得最高票,則隨機選擇一個做最終類別。

                                  技術分享圖片

      稍微復雜的投票法是絕對多數投票法,也就是我們常說的要票過半數。在相對多數投票法的基礎上,不光要求獲得最高票,還要求票過半數。否則會拒絕預測。

                                  技術分享圖片

      更加復雜的是加權投票法,和加權平均法一樣,每個弱學習器的分類票數要乘以一個權重,最終將各個類別的加權票數求和,最大的值對應的類別為最終類別。

                                   技術分享圖片

 

  6.3 學習法

    上兩節的方法都是對弱學習器的結果做平均或者投票,相對比較簡單,但是可能誤差較大,於是就有了學習法這種方法。

    對於學習法,代表方法是stacking,當使用stacking的結合策略時, 我們不是對弱學習器的結果做簡單的邏輯處理,而是再加上一層學習器,也就是說,我們將訓練集弱學習器的學習結果作為輸入,將訓練集的輸出作為輸出,重新訓練一個學習器來得到最終結果。

    在這種情況下,我們將弱學習器稱為初級學習器,將用於結合的學習器稱為次級學習器。對於測試集,我們首先用初級學習器預測一次,得到次級學習器的輸入樣本,再用次級學習器預測一次,得到最終的預測結果。

7.隨機森林思想

隨機森林的出現主要是為了解單一決策樹可能出現的很大誤差和overfitting的問題。這個算法的核心思想就是將多個不同的決策樹進行組合,利用這種組合降低單一決策樹有可能帶來的片面性和判斷不準確性。用我們常說的話來形容這個思想就是“三個臭皮匠賽過諸葛亮”。
??具體來講,隨機森林是用隨機的方式建立一個森林,這個隨機性表述的含義我們接下來會講。隨機森林是由很多的決策樹組成,但每一棵決策樹之間是沒有關聯的。在得到森林之後,當對一個新的樣本進行判斷或預測的時候,讓森林中的每一棵決策樹分別進行判斷,看看這個樣本應該屬於哪一類(對於分類算法),然後看看哪一類被選擇最多,就預測這個樣本為那一類。

8.隨機森林的推廣

    由於RF在實際應用中的良好特性,基於RF,有很多變種算法,應用也很廣泛,不光可以用於分類回歸,還可以用於特征轉換,異常點檢測等。下面對於這些RF家族的算法中有代表性的做一個總結。

   8.1 extra trees

      extra trees是RF的一個變種, 原理幾乎和RF一模一樣,僅有區別有:

      1) 對於每個決策樹的訓練集,RF采用的是隨機采樣bootstrap來選擇采樣集作為每個決策樹的訓練集,而extra trees一般不采用隨機采樣,即每個決策樹采用原始訓練集。

      2) 在選定了劃分特征後,RF的決策樹會基於基尼系數,均方差之類的原則,選擇一個最優的特征值劃分點,這和傳統的決策樹相同。但是extra trees比較的激進,他會隨機的選擇一個特征值來劃分決策樹。

      從第二點可以看出,由於隨機選擇了特征值的劃分點位,而不是最優點位,這樣會導致生成的決策樹的規模一般會大於RF所生成的決策樹。也就是說,模型的方差相對於RF進一步減少,但是偏倚相對於RF進一步增大。在某些時候,extra trees的泛化能力比RF更好。

  8.2 Totally Random Trees Embedding

      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維的高維特征。這裏特征維度之間加上空格是為了強調三顆決策樹各自的子編碼。

      映射到高維特征後,可以繼續使用監督學習的各種分類回歸算法了。

  8.3 Isolation Forest

      Isolation Forest(以下簡稱IForest)是一種異常點檢測的方法。它也使用了類似於RF的方法來檢測異常點。

      對於在T個決策樹的樣本集,IForest也會對訓練集進行隨機采樣,但是采樣個數不需要和RF一樣,對於RF,需要采樣到采樣集樣本個數等於訓練集個數。但是IForest不需要采樣這麽多,一般來說,采樣個數要遠遠小於訓練集個數?為什麽呢?因為我們的目的是異常點檢測,只需要部分的樣本我們一般就可以將異常點區別出來了。

      對於每一個決策樹的建立, IForest采用隨機選擇一個劃分特征,對劃分特征隨機選擇一個劃分閾值。這點也和RF不同。

      另外,IForest一般會選擇一個比較小的最大決策樹深度max_depth,原因同樣本采集,用少量的異常點檢測一般不需要這麽大規模的決策樹。

      技術分享圖片

9.隨機森林的優缺點

優點

  • 具有極高的準確率
  • 隨機性的引入,使得隨機森林不容易過擬合
  • 隨機性的引入,使得隨機森林有很好的抗噪聲能力
  • 能處理很高維度的數據,並且不用做特征選擇
  • 既能處理離散型數據,也能處理連續型數據,數據集無需規範化
  • 訓練速度快,可以得到變量重要性排序
  • 容易實現並行化

缺點

  • 當隨機森林中的決策樹個數很多時,訓練時需要的空間和時間會較大
  • 隨機森林模型還有許多不好解釋的地方,有點算個黑盒模型
  • 相比於其他算法,其輸出預測可能較慢。

10.sklearn參數

    sklearn.tree.DecisionTreeClassifier(criterion=‘gini‘, splitter=‘best‘, max_depth=None, min_samples_split=2,

               min_samples_leaf=1,min_weight_fraction_leaf=0.0, max_features=None,
              random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0,
              min_impurity_split=None, class_weight=None, presort=False)

criterion:特征選擇的標準,有信息增益和基尼系數兩種,使用信息增益的是ID3和C4.5算法(使用信息增益比),使用基尼系數的CART算法,默認是gini系數。

splitter:特征切分點選擇標準,決策樹是遞歸地選擇最優切分點,spliter是用來指明在哪個集合上來遞歸,有“best”和“random”兩種參數可以選擇,best表示在所有特征上遞歸,適用於數據集較小的時候,random表示隨機選擇一部分特征進行遞歸,適用於數據集較大的時候。

max_depth:決策樹最大深度,決策樹模型先對所有數據集進行切分,再在子數據集上繼續循環這個切分過程,max_depth可以理解成用來限制這個循環次數。

min_samples_split:子數據集再切分需要的最小樣本量,默認是2,如果子數據樣本量小於2時,則不再進行下一步切分。如果數據量較小,使用默認值就可,如果數據量較大,為降低計算量,應該把這個值增大,即限制子數據集的切分次數。

min_samples_leaf:葉節點(子數據集)最小樣本數,如果子數據集中的樣本數小於這個值,那麽該葉節點和其兄弟節點都會被剪枝(去掉),該值默認為1。

min_weight_fraction_leaf:在葉節點處的所有輸入樣本權重總和的最小加權分數,如果不輸入則表示所有的葉節點的權重是一致的。

max_features:特征切分時考慮的最大特征數量,默認是對所有特征進行切分,也可以傳入int類型的值,表示具體的特征個數;也可以是浮點數,則表示特征個數的百分比;還可以是sqrt,表示總特征數的平方根;也可以是log2,表示總特征數的log個特征。

random_state:隨機種子的設置,與LR中參數一致。

max_leaf_nodes:最大葉節點個數,即數據集切分成子數據集的最大個數。

min_impurity_decrease:切分點不純度最小減少程度,如果某個結點的不純度減少小於這個值,那麽該切分點就會被移除。

min_impurity_split:切分點最小不純度,用來限制數據集的繼續切分(決策樹的生成),如果某個節點的不純度(可以理解為分類錯誤率)小於這個閾值,那麽該點的數據將不再進行切分。

class_weight:權重設置,主要是用於處理不平衡樣本,與LR模型中的參數一致,可以自定義類別權重,也可以直接使用balanced參數值進行不平衡樣本處理。

presort:是否進行預排序,默認是False,所謂預排序就是提前對特征進行排序,我們知道,決策樹分割數據集的依據是,優先按照信息增益/基尼系數大的特征來進行分割的,涉及的大小就需要比較,如果不進行預排序,則會在每次分割的時候需要重新把所有特征進行計算比較一次,如果進行了預排序以後,則每次分割的時候,只需要拿排名靠前的特征就可以了。

11.應用場景

參考:

https://www.cnblogs.com/pinard/p/6131423.html

https://blog.csdn.net/qq_32690999/article/details/78759463

https://blog.csdn.net/messi_james/article/details/81035991

https://www.cnblogs.com/zongfa/p/9304353.html

https://blog.csdn.net/chenyukuai6625/article/details/73670473

https://mp.weixin.qq.com/s?__biz=MzI2MjE3OTA1MA==&mid=2247484903&idx=1&sn=e3c3af7b600854c65df01cf93d8a21f4&chksm=ea4e5462dd39dd74a724c213d725f888364a6acd27bebb116ad90137545f03baa939a1b36daa&scene=21#wechat_redirect

隨機森林算法基礎梳理