1. 程式人生 > >臺灣大學林軒田機器學習技法課程學習筆記10 -- Random Forest

臺灣大學林軒田機器學習技法課程學習筆記10 -- Random Forest

上節課我們主要介紹了Decision Tree模型。Decision Tree演算法的核心是通過遞迴的方式,將資料集不斷進行切割,得到子分支,最終形成數的結構。C&RT演算法是決策樹比較簡單和常用的一種演算法,其切割的標準是根據純度來進行,每次切割都是為了讓分支內部純度最大。最終,決策樹不同的分支得到不同的gt(x)(即樹的葉子,C&RT演算法中,gt(x)是常數)。本節課將介紹隨機森林(Random Forest)演算法,它是我們之前介紹的Bagging和上節課介紹的Decision Tree的結合。

Random Forest Algorithm

首先我們來複習一下之前介紹過的兩個機器學習模型: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採用投票的形式,將所有gtuniform結合起來,起到了求平均的作用,從而降低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演算法流程圖如下所示:

這裡寫圖片描述

Random Forest演算法的優點主要有三個。第一,不同決策樹可以由不同主機並行訓練生成,效率很高;第二,隨機森林演算法繼承了C&RT的優點;第三,將所有的決策樹通過bagging的形式結合起來,避免了單個決策樹造成過擬合的問題。

這裡寫圖片描述

以上是基本的Random Forest演算法,我們再來看一下如何讓Random Forest中決策樹的結構更有多樣性。Bagging中,通過bootstrap的方法得到不同於D的D’,使用這些隨機抽取的資料得到不同的gt。除了隨機抽取資料獲得不同gt的方式之外,還有另外一種方法,就是隨機抽取一部分特徵。例如,原來有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-subspace。

這裡寫圖片描述

上面我們講的是隨機抽取特徵,除此之外,還可以將現有的特徵x,通過陣列p進行線性組合,來保持多樣性:

ϕi(x)=piTx

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

這裡寫圖片描述

所以,這裡的Random Forest演算法又有增強,由原來的random-subspace變成了random-combination。順便提一下,這裡的random-combination類似於perceptron模型。

這裡寫圖片描述

Out-Of-Bag Estimate

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

通過bootstrap得到新的樣本集D’,再由D’訓練不同的gt。我們知道D’中包含了原樣本集D中的一些樣本,但也有些樣本沒有涵蓋進去。如下表所示,不同的gt下,紅色的表示在D^t中沒有這些樣本。例如對g1來說,(x2,y2)(x3,y4)沒有包含進去,對g2來說,(x1,y1)(x2,y2)沒有包含進去,等等。每個gt中,紅色表示的樣本被稱為out-of-bag(OOB) example。

這裡寫圖片描述

首先,我們來計算OOB樣本到底有多少。假設bootstrap的數量N’=N,那麼某個樣本(xn,yn)是OOB的概率是:

(11N)N=1(NN1)N=1(1+1N1)N1e

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

然後,我們將OOB與之前介紹的Validation進行對比:

這裡寫圖片描述

在Validation表格中,藍色的