機器學習技法10: 隨機森林(Random Forest)



上一節課介紹了決策樹算法,其核心思想是通過遞歸的方式將輸入空間進行多次劃分,C&RT的標準是以不純淨度爲目標函數進行切分,知道分支的不純淨度接近零爲止,爲了防止過擬合,其還通過決策樹修剪(prun)起到正則化的效果。切分完成後,得到不同的樹葉,即不同的假設函數 gt(x)g_t(x) ,實際上爲常數,最後通過融合形成決策樹的假設函數 G(x)G(x) 。本節課介紹隨機森林算法(Random Forest),它實際上是Bagging和決策樹的結合。

10.1 Random Forest Algorithm

首先回顧一下,之前學習的兩類集成學習算法。Bagging通過bootStrapping(拔靴法)從原始數據集抽樣得到不一樣的樣本子集,然後使用基本的算法那訓練這些樣本子集得到不同的假設函數 gtg_t ,最後使用這些假設函數進行投票,融合成Bagging模型。決策時通過遞歸的方式將輸入空間進行多次劃分,劃分完成後,得到不同的假設函數 gtg_t,然後融合這些不同的假設函數。
在這裏插入圖片描述

這兩類算法各有其特點。其中,Bagging可以減少偏差;決策樹對輸入空間的變化敏感,偏差比較大。如果將兩者結合,既能結合二者的優點,又能彌補各自的不足,就得到了隨機森林算法(Random Forest,RF),“R” 表示Bagging的過程,“F” 表示生成完全成長樹的過程,得到很多樹,好比森林,由此得名。其僞代碼如下:
在這裏插入圖片描述

其核心思想是首先用Bagging的方式劃分數據集,然後使用決策樹進行訓練,得到假設函數 Gc(x)G_c(x) ,最後通過Bagging的方式進行投票,融合這些不同的假設函數,得到隨機森林的假設函數 G(x)G(x)。其優點是Bagging的部分非常容易實現並行處理,因爲各部分互不影響,此外,決策樹本身就是一類很有效率的算法,二者結合使得隨機森林的計算過程更有效率;同時,還吸收了C&RT的優點,即可以很容易的處理二分類、多分類和迴歸問題,同時克服了C&RT對輸入空間變化敏感的缺點。

Bagging算法的關鍵是通過拔靴法隨機抽取不同的子集,然後使用基本的演算法訓練得到不同的假設函數,那麼還有沒有其它方式得到這些假設函數呢?一種思路是從對數據中的特徵做隨機抽樣,來得到不同的決策樹,比如從輸入數據100維的特徵中隨機抽取10個特徵使用上述演算法訓練;這個抽樣過程相當於做了一個向低緯度投影的動作。此時,隨機森林的輸入空間的維度就是原來輸入空間的一個子空間。此舉的目的是希望得到不同的樹,這樣融合之後的隨機森林模型的能力會更強。一種常用的做法是在使用C&RT進行二叉樹劃分時,都從特徵輸入空間隨機重採樣得到子空間,使用子空間的數據進行訓練得到不同的假設函數。
在這裏插入圖片描述

此外,更一般地,上述過程可以看做對原來的特徵輸入空間乘以一個投影矩陣 PP ,這樣就可以沿任意方向進行投影;相比沿固定方向進行投影的方法會使得模型更有魯棒性。通常隨機森林的這些投影方式,是低緯度的投影,什麼意思呢?比如原始的特徵輸入空間有100維,隨機森林算法可能每次只從其中隨機抽取三個維度的特徵,將其組合(random combination),然後使用C&RT算法做切割。作者建議,每次在 C&RT 進行二叉樹劃分時,使用低緯度的投影,從原來的特徵輸入空間提取子空間。至此,其名爲Random Forest也就不難理解了,因爲存在大量的隨機抽樣,並且得到很多的決策樹。
在這裏插入圖片描述


習題1:
在這裏插入圖片描述


10.2 Out­-Of­-Bag Estimate

首先回顧之前所學的Bagging算法:
在這裏插入圖片描述
上圖中,標紅的位置標示在某次抽樣中沒有被抽取到,記這些沒有被抽到的樣本爲 gtg_t 的 Out-Of-Bag(OOB)樣本。下面計算在N比較大時,沒有抽樣中,有多少樣本爲OOB樣本。
在這裏插入圖片描述
由以上計算可知,每次抽樣的OOB樣本爲:
在這裏插入圖片描述
即每次抽樣有大約三分之一的樣本沒有被抽到。下面對比OOB與Validation的區別:
在這裏插入圖片描述
Validation中,使用訓練集 DtrainD_{train} 得到假設函數 gg^{-} ;使用驗證集 DvalD_{val} 驗證這些假設函數的表現。 DtrainD_{train}DvalD_{val} 沒有交集。同理,在OOB中,標紅的樣本也沒有用到,並且數量上與 DvalD_{val} 很相似,因此其性質也與之相似,可以使用這些OOB樣本來驗證 gtg_t 是否足夠好,但是Bagging、RF之類的融合模型,其目的是得到 GG,而不是 gg ,所以沒必要驗證 gg,而是驗證 GG
在這裏插入圖片描述
GN(x)G^{-}_{N}(x) 是由OOB表中沒有使用 (xN,yN)(x_N,y_N) 樣本的假設函數組成。
在這裏插入圖片描述
由上式可知,Bagging或RF算法可以做自我驗證(self-validation),自我驗證的誤差可以用 EoobE_{oob} 表示,而無需另外的驗證過程。


習題2:
在這裏插入圖片描述


10.3 Feature Selection

特徵空間的維度是影響算法複雜度的因素之一。如何選擇合適的特徵輸入空間,去除冗餘特徵,是機器學習特徵工程需要考慮的問題。在本節課程中,對於輸入空間是10000維的特徵,如果直接使用這些特徵做分類,顯然有大量的特徵是冗餘的,不光處理數據麻煩,而且訓練週期長,會導致過擬合。如果現在可以從中選出300維具有代表性的特徵,則可以大大簡化算法複雜度。這個選擇的過程,相當於做了一個從高維度到低維度的特徵轉換,使用轉換後的特徵再做進一步的學習。選擇特徵有如下好處:

  • 效率高:特徵空間維度少,算法複雜度低,訓練和推理時間短;
  • 泛化能力好:相當於排除了9700維的噪聲數據;

其缺點是:

  • 選擇過程的計算量大:C10000300C^{300}_{10000}
  • 選擇過程引入噪聲:比如選擇的特徵看起來很好,但實際上可能是噪聲數據,從而導致過擬合;
  • 選擇的特徵可解釋性低:選擇特徵只能知道其相互之間的關聯性,並不知道之間的因果關係。

對於決策樹來說,其在進行二叉樹劃分過程中,已經包含了特徵選擇過程。由以上分析可知特徵選擇過程,其實是一個組合爆炸的問題,那麼應該如何選擇特徵呢?解決組合爆炸的簡單思路是:如果不考慮各組合之間的相互關係,只關注給每一個特徵打一個分數,即表徵某個特徵的重要性,然後按照這些重要性排序,從中選擇前300個重要的即可。這個想法在線性模型中很容易實現,相當於做了加權組合。
在這裏插入圖片描述
可以使用 wi|w_i| 的大小來表徵某一個特徵 ii 的重要性。一個好的 ww 可以從數據中學習。以上是對於線性模型的情況,如果是非線性模型呢?比如隨機森林,因爲其內部的機制使得其計算相對於其它非線性模型更容易。基本的想法是 random test,比如現在某一個特徵很重要,如果其中還包含一些噪聲,此時學習的表現一定會變差。如果比較原來的特徵和包含噪聲的特徵的差距,就可以知道現在的特徵有多重要。那麼應該添加什麼樣的噪聲呢?
在這裏插入圖片描述

  • 一種想法是使用高斯噪聲,但會有一個問題就是原來的數據分佈不符合高斯分佈的時候,添加高斯噪聲使得誤差變爲了兩個部分;
  • 另一種思路是使用拔靴法(bootstrap),其做法是將原來的N個樣本的第 ii 個特徵重新打亂,然後添加到這N個樣本中,這樣可以保證添加的噪聲與原來的數據分佈相同。這種方法叫做隨機排序測試(Permutation Test)。
    在這裏插入圖片描述
    上式說明,如果二者差異很大,則表明第 ii 個特徵是重要的。下一步探討如何衡量添加噪聲數據的表現。一般方法是重新訓練得到不一樣的 GG,然後再做驗證。對於RF算法,使用 OOB計算誤差即可。但是對於N個樣本的第 ii 個特徵重新打亂之後的樣本集 D(p)D^{(p)} ,對其進行訓練;並且每個特徵都要訓練,然後與未添加噪聲的數據集的表現進行對比,計算過程很繁瑣。爲了簡化計算,RF的作者建議在使用OOB樣本驗證時,將OOB樣本的第 ii 個特徵打亂,然後再驗證G的表現,這就不用重新訓練G了,達到降低算法複雜度,減少訓練和推理時間的目的。
    在這裏插入圖片描述

通過以上流程就可以得出各個特徵的得分,進而可以進行特徵選擇。


習題3:
在這裏插入圖片描述


10.4 Random Forest in Action

通過一個簡單的二分類例子說明隨機森林的算法流程,如下圖所示:
在這裏插入圖片描述
random combination的意思是說在對輸入空間進行劃分時,不只是用一個假設函數 gg 進行切分,而是使用隨機組合的幾個假設函數進行切分,這種切分方式就不是簡單的水平或豎直切分了,而是一些稍顯複雜的邊界。第二幅圖中,使用拔靴法的Bagging算法那每次只使用一半的樣本進行劃分,其中圈出的藍點和紅叉叉是被選中的樣本點,其它縮小的紅藍點是未被選中的點。因爲樣本比較少,可以看出,分類邊界會犯一些錯誤。將這些 gtg_t 進行融合得到的 GG ,隨着劃分次數的增多,分割邊界會越來越平滑。

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
同時,隨機森林還做出了類似最大邊界(large-margin)的效果。看一下更復雜的情況:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
由上圖可以看出RF算法分分類邊界更平滑。那麼對於含有噪聲數據的輸入呢?
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
可以看出RF算法隨着樹的增多,其對噪聲數據的容忍能力提高,可以極大的緩解過擬合,得到比較穩定的結果。那麼,RF需要多少棵樹呢?
在這裏插入圖片描述
通常的判斷標準是看 GG 的表現是否穩定來決定是否增減樹的數量。


習題4:
在這裏插入圖片描述


Summary

本節課介紹了隨機森林(RF)算法,其原理很簡單,先用決策樹得到不同的假設函數,然後再做Bagging。爲了增加決策樹的隨機性,通常做法是對特徵輸入空間做隨機映射,即隨機選擇特徵。在這個模型中,因爲做了Bagging,所以可以使用OOB樣本代替驗證集的樣本,這樣可以避免重複訓練,降低算法複雜度。通常還使用Permutation test 來輔助選擇特徵。經過以上處理,在有足夠多棵樹的前提下,隨機森林算法的分類邊界變得很平滑,並且高效可靠。
在這裏插入圖片描述

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