機器學習之隨機森林(RF)詳解


常用集成學習包括Bagging ,Boosting, Stacking三種。見 https://blog.csdn.net/sinat_30353259/article/details/81034749
bagging:
算法的典型實現是隨機森林(Random Forest)。

Boosting:
AdaBoost (Adaptive Boosting)
Gradient Boosting Machines (GBM)梯度推進機
Gradient Boosted Regression Trees (GBRT)梯度提升迴歸樹
Stacking:
由於學習隨機森林需要了解bagging和決策樹算法,下面依次進行

一、bagging算法

1、簡介

Bagging(Bootstrapped Aggregation的簡稱)特點各個弱學習器之間沒有依賴關係,可以並行擬合訓練。
在這裏插入圖片描述
對於給定數據處理任務,採用不同的模型、參數、特徵訓練出多個弱學習器,最後採用投票或者加權平均的方式輸出最終結果。基學習器可以是相同的模型,也可以是不同的,一般使用的是同一種基學習器,最常用的是DT決策樹。

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

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

對於一個樣本,它在某一次含m個樣本的訓練集的隨機採樣中,每次被採集到的概率是1m\frac{1}{m}。不被採集到的概率爲11m1-\frac{1}{m}。如果m次採樣都沒有被採集中的概率是(11m)m(1-\frac{1}{m})^m。當m→∞時,(11m)m1e0.368(1-\frac{1}{m})^m \to \frac{1}{e} \simeq 0.368。也就是說,在bagging的每輪隨機採樣中,訓練集中大約有36.8%的數據沒有被採樣集採集中。

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

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

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

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

2. bagging算法流程

上面我們對bagging算法的原理做了總結,這裏就對bagging算法的流程做一個總結。相對於Boosting系列的Adaboost和GBDT,bagging算法要簡單的多。

輸入爲樣本集D={(x,y1),(x2,y2),...(xm,ym)}D=\{(x_,y_1),(x_2,y_2), ...(x_m,y_m)\},弱學習器算法, 弱分類器迭代次數T。
輸出爲最終的強分類器f(x)
1)對於t=1,2…,T:
 a)對訓練集進行第t次隨機採樣,共採集m次,得到包含m個樣本的採樣集Dt
 b)用採樣集Dt訓練第t個弱學習器Gt(x)
2) 如果是分類算法預測,則T個弱學習器投出最多票數的類別或者類別之一爲最終類別。如果是迴歸算法,T個弱學習器得到的迴歸結果進行算術平均得到的值爲最終的模型輸出。

二、隨機森林

1、簡介

理解了bagging算法,隨機森林(Random Forest,以下簡稱RF)就好理解了。它是Bagging算法的進化版,也就是說,它的思想仍然是bagging,但是進行了獨有的改進。我們現在就來看看RF算法改進了什麼。

首先,RF使用了CART決策樹作爲弱學習器,這讓我們想到了梯度提示樹GBDT。第二,在使用決策樹的基礎上,RF對決策樹的建立做了改進,對於普通的決策樹,我們會在節點上所有的n個樣本特徵中選擇一個最優的特徵來做決策樹的左右子樹劃分,但是RF通過隨機選擇節點上的一部分樣本特徵,這個數字小於n,假設爲n1,然後在這些隨機選擇的n1個樣本特徵中,選擇一個最優的特徵來做決策樹的左右子樹劃分。這樣進一步增強了模型的泛化能力。    
那麼下面講決策樹的生成,看隨機森林中的樹是怎麼生成的。

2、CART分類樹的生成

CART分迴歸樹和分類樹,這裏選擇分類樹的方法講解。
分類樹用基尼指數選擇最優特徵,並決定該特徵的最優二值切分點。
基尼值Gini(D):從數據集D中隨機抽取兩個樣本,起類別標記不一致的概率,故Gini
(D)值越小,數據集D的純度越高。
基尼係數公式如下:
Gini(D)=k=1ypk(1pk)=1k=1ypk2Gini(D) =\sum_{k=1}^{|y|}p_k(1-p_k)= 1-\sum_{k=1}^{|y|}p_k^2
基尼指數值越大,樣本集合的不確定性越大,這一點和熵類似
具體CART生成算法:
對分類樹而言,CART用Gini係數最小化準則來進行特徵選擇,生成二叉樹。 CART生成算法如下:
輸入:訓練數據集D,停止計算的條件:
輸出:CART決策樹。

根據訓練數據集,從根結點開始,遞歸地對每個結點進行以下操作,構建二叉決策樹:

  1. 設結點的訓練數據集爲D,計算現有特徵對該數據集的Gini係數。此時,對每一個特徵A,對其可能取的每個值a,根據樣本點對A=a的測試爲“是”或“否”將D分割成D1和D2兩部分,計算A=a時的Gini係數。
  2. 在所有可能的特徵A以及它們所有可能的切分點a中,選擇Gini係數最小的特徵及其對應的切分點作爲最優特徵與最優切分點。依最優特徵與最優切分點,從現結點生成兩個子結點,將訓練數據集依特徵分配到兩個子結點中去。
  3. 對兩個子結點遞歸地調用步驟l~2,直至滿足停止條件。
  4. 生成CART決策樹。

算法停止計算的條件是結點中的樣本個數小於預定閾值,或樣本集的Gini係數小於預定閾值(樣本基本屬於同一類),或者沒有更多特徵。

3、總結

鑑於決策樹容易過擬合的缺點,隨機森林採用多個決策樹的投票機制來改善決策樹,我們假設隨機森林使用了m棵決策樹,那麼就需要產生m個一定數量的樣本集來訓練每一棵樹。

隨機森林的生成方法
1.從樣本集中通過重採樣的方式隨機選擇n個樣本
2.假設樣本中的特徵數量爲a,再從這些特徵中,隨機選擇k個特徵,用建立決策樹的方式選擇最佳分割點,構建決策樹樹
3.重複m次,產生m棵決策樹
4.多數投票機制來進行預測

(需要注意的一點是,這裏m是指循環的次數,n是指樣本的數目,n個樣本構成訓練的樣本集,而m次循環中又會產生m個這樣的樣本集)

隨機森林是一個比較優秀的模型,在我的項目的使用效果上來看,它對於多維特徵的數據集分類有很高的效率,還可以做特徵重要性的選擇。運行效率和準確率較高,實現起來也比較簡單。但是在數據噪音比較大的情況下會過擬合,過擬合的缺點對於隨機森林來說還是較爲致命的。

隨機森林中的隨機性主要體現在兩個方面:
隨機採樣:隨機森林在計算每棵樹時,從全部訓練樣本(樣本數爲n)中選取一個可能有重複的、大小同樣爲m的數據集進行訓練(即booststrap採樣)。
隨機選取特徵:在每個節點隨機選取所有特徵中的部分特徵,用來計算最佳分割方式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章