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

隨機森林演算法基礎梳理

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