Learning Model : Random Forest

Ryan Lu
AI反斗城
Published in
11 min readFeb 4, 2019

--

在近幾年隨機森林非常受到青睞,被運用在大量的機器學習應用中,它的效能、預測能力都很強,而且非常容易使用,另外隨機森林還能更去觀察每一個特徵的重要度。直覺來說,你可以把隨機森林當作是多個決策樹組合而成的,這個在機器學習領域稱為Ensemble中文可以叫整體或集成。相較於一般機器學習演算法是去培育一個天才模型的概念往往會有一些的限制,比如說這個天才模型可能在某些領域會有偏差或是不好的行為。整體機器學習(Ensemble learning)演算法則是結合多個弱學習器來建構一個強穩的模型,而這種模型比較不會有偏差或是發生高度適合(Overfit)。簡單來說機器學習演算法有兩種,一種是天才領導型的、一種是眾人投票型的,而隨機森林就是屬於眾人投票型的。

  1. 什麼是隨機森林算法?
  2. 為什麼隨機森林算法?
  3. 隨機森林算法現實生活中的例子
  4. Random Forest算法如何工作?
  5. 隨機森林算法應用。

什麼是隨機森林算法?

首先,隨機森林算法是一種監督分類算法。我們可以從它的名字看到它,即通過某種方式創建一個森林並使其隨機。森林中樹木的數量與可獲得的結果之間存在直接關係:樹木數量越多,結果越準確。但有一點需要注意的是,創建森林與使用信息增益或增益指數方法構建決策不同。

決策樹是決策支持工具。它使用樹狀圖來顯示可能的後果。如果您將具有目標和功能的訓練數據集輸入到決策樹中,它將製定一些規則集。這些規則可用於執行預測。用一個例子來說明這一點:假設你想要預測你的女兒是否會喜歡動畫電影,你應該收集她喜歡的過去的動畫電影,並將一些功能作為輸入。然後,通過決策樹算法,您可以生成規則。然後,您可以輸入此電影的功能,看看您的女兒是否會喜歡它。

隨機森林算法和決策樹算法的區別在於隨機森林中,找到根節點和分割特徵節點的過程將隨機運行。

為什麼隨機森林算法?

作者給出了四個優點來說明我們使用隨機森林算法的原因。
1.可以用於分類和回歸任務
2.過度擬合是一個可能使結果更糟的關鍵問題,但對於隨機森林算法,如果森林中有足夠的樹,分類器將不會過度擬合模型
3.隨機森林的分類器可以處理缺失值。
4.可以為隨機森林分類器建模分類值。

隨機森林算法現實生活中的例子

假設Mady想要去他可能喜歡的不同地方進行為期兩週的假期,他會向他的朋友尋求建議。他的朋友會詢問他去過哪裡,以及他是否喜歡他去過的地方。根據Mady的回答,他的朋友開始提出建議。在這裡,他的朋友形成決策樹。

Mady想要更多的朋友尋求建議,因為他認為只有一個朋友無法幫助他做出準確的決定。所以他的其他朋友也問他隨機問題,最後提供了答案。他認為選票最多的地方是他的假期決定。在這裡,作者提供了對此示例的分析。

他的一位朋友問了他一些問題,並根據答案給出了最佳位置的建議。這是典型的決策樹算法方法。朋友根據答案創建規則,並使用規則查找與規則匹配的答案。

Mady的朋友也隨機問他不同的問題,並給出了答案,這對於Mady來說是對這個地方的投票。最後,投票率最高的地方是Mady選擇去的地方。這是典型的隨機森林算法方法。

Random Forest算法如何工作?

隨機森林算法分為兩個階段,一個是隨機森林創建,另一個是從第一階段創建的隨機森林分類器進行預測。整個過程如下所示,使用該圖很容易理解。

首先展示隨機森林創建偽代碼:

  1. 從總“ m ”特徵中隨機選擇“ K ”特徵,其中k << m
  2. 在“ K ”特徵中,使用最佳分割點計算節點“ d
  3. 使用最佳拆分將節點拆分為子節點
  4. 重複a到c步驟,直到達到“l”個節點數
  5. 通過重複步驟a到d “n”次來構建森林,以創建“n”個樹

圖2顯示了隨機選擇功能的過程:

在下一階段,創建隨機森林分類器,我們將進行預測。隨機森林預測偽代碼如下所示:

  1. 獲取測試功能並使用每個隨機創建的決策樹的規則來預測結果並存儲預測結果(目標)
  2. 計算每個預測目標的投票
  3. 高投票預測目標視為隨機森林算法的最終預測

這個過程很容易理解,但它有點高效。

隨機森林算法應用

作者給出了使用隨機森林算法的四種應用:銀行,醫藥,股票市場和電子商務:

  • 對於銀行業務的應用,隨機森林算法用於尋找忠誠的客戶,這意味著客戶可以獲得足夠的貸款並正確地向銀行支付利息,以及欺詐客戶,這意味著有不良記錄的客戶如未能償還按時貸款或採取危險行動。
  • 對於醫學中的應用,隨機森林算法可用於識別醫學中組分的正確組合,並通過分析患者的醫療記錄來識別疾病。
  • 對於股票市場中的應用,隨機森林算法可用於識別股票的行為和預期的損失或利潤。
  • 對於電子商務中的應用,隨機森林算法可用於根據類似客戶的經驗預測客戶是否會喜歡推薦產品。

Bootstrap(自舉法)

子樣本之於樣本,可以類比樣本之於總體
  • Bootstrap是現代統計學較為流行的一種統計方法,在小樣本時效果很好
  • 就是一個在自身樣本重採樣的方法估計真實分佈的問題
  • 當我們不知道樣本分佈的時候,bootstrap方法最有用。
  • 整合多個弱分類器,成為一個強大的分類器。這時候,集合分類器(Boosting, Bagging等)出現了
集成學習概念 : 假設各弱分類器間具有一定差異性(如不同的算法,或相同算法不同參數配置),這會導致生成的分類決策邊界不同,也就是說它們在決策時會犯不同的錯誤。將它們結合後能得到更合理的邊界,減少整體錯誤,實現更好的分類效果。

Bagging算法介紹(bootstrap aggregation)

首先:bagging和boosting都是集成學習(ensemble learning)領域的基本算法
bagging:從訓練集從進行子抽樣組成每個基模型所需要的子訓練集,對所有基模型預測的結果進行綜合產生最終的預測結果, 至於為什麼叫bootstrap aggregation,因為它抽取訓練樣本的時候採用的就是bootstrap的方法!

Bagging策略過程
  • 從樣本集中用Bootstrap採樣選出n個訓練樣本(放回,因為別的分類器抽訓練樣本的時候也要用)
  • 在所有屬性上,用這n個樣本訓練分類器(CART or SVM or …)
  • 重複以上兩步m次,就可以得到m個分類器(CART or SVM or …)
  • 將數據放在這m個分類器上跑,最後投票機制(多數服從少數)看到底分到哪一類(分類問題)

代表算法-RF(隨機森林)

其中的Random就是指
1. 訓練樣本選擇方面的Random:Bootstrap方法隨機選擇子樣本。
2. 特徵選擇方面的Random:屬性集中隨機選擇k個屬性,每個樹節點分裂時,從這隨機的k個屬性,選擇最優的(如何選擇最優又有各種最大增益的方法,不在本文討論範圍內)。

RF優點
1.不容易出現過擬合,因為選擇訓練樣本的時候就不是全部樣本。
2.可以既可以處理屬性為離散值的量,比如ID3算法來構造樹,也可以處理屬性為連續值的量,比如C4.5算法來構造樹。
3.對於高維數據集的處理能力令人興奮,它可以處理成千上萬的輸入變量,並確定最重要的變量,因此被認為是一個不錯的降維方法。此外,該模型能夠輸出變量的重要性程度,這是一個非常便利的功能。
4.分類不平衡的情況時,隨機森林能夠提供平衡數據集誤差的有效方法。

RF缺點
1.隨機森林在解決回歸問題時並沒有像它在分類中表現的那麼好,這是因為它並不能給出一個連續型的輸出。當進行回歸時,隨機森林不能夠作出超越訓練集數據范圍的預測,這可能導致在對某些還有特定噪聲的數據進行建模時出現過度擬合。
2.對於許多統計建模者來說,隨機森林給人的感覺像是一個黑盒子 — — 你幾乎無法控制模型內部的運行,只能在不同的參數和隨機種子之間進行嘗試。

Boosting算法介紹

核心:Boosting是一種框架算法,用來提高弱分類器準確度的方法,這種方法通過構造一個預測函數序列,然後以一定的方式將他們組合成為一個準確度較高的預測函數,還有就是,Boosting算法更加關注錯分的樣本,這點和Active Learning的尋找最有價值的訓練樣本有點遙相呼應的感覺。

結合圖形來過一遍Adaboost算法

算法開始前,需要將每個樣本的權重初始化為1/m,這樣一開始每個樣本都是等概率的分佈,每個分類器都會公正對待。
Round1,因為樣本權重都一樣,所以分類器開始劃分,根據自己分類器的情況,只和分類器有關。劃分之後發現分錯了三個”+”號,那麼這些分錯的樣本,在給下一個分類器的時候權重就得到提高,也就是會影響到下次取訓練樣本的分佈,就是提醒下一個分類器,“誒!你注意點這幾個小子,我上次栽在他們手裡了!”
Round2,第二代分類器信誓旦旦的對上一代分類器說”我知道了,大哥!我一定睜大眼睛好好分著三個玩意!”ok,這次三個上次分錯的都被分出來了,但是並不是全部正確,這次又栽倒在左下角三個”-”上了,然後臨死前,第二代分類器對下一代分類器說”這次我和上一代分類器已經把他們摸得差不多了,你再稍微注意下左下角那三個小子,也別忘了上面那三個(一代錯分的那三個”+”)!”
Round3:有了上面兩位大哥的提醒,第三代分類器表示,我差不多都知道上次大哥們都錯哪了,我只要小心這幾個,應該沒什麼問題!只要把他們弄錯的我給整對了,然後把我們收集的信息一對,這不就行了麼!ok,第三代分類器不負眾望,成功分對上面兩代分類器重點關注的對象,至於分錯的那幾個小的,以前大哥們都分對了,我們坐下來核對一下就行了!
最後,三個分類器坐下來,各自談了談心得,分配了下權重,然後一個諸葛亮就誕生啦!是不是道理很簡單!至於權重如何計算,不在本文討論範圍內。

Adaboost優點
1.可以使用各種方法構造子分類器,Adaboost算法提供的是框架
2.簡單,不用做特徵篩選
3.相比較於RF,更不用擔心過擬合問題

Adaboost缺點
1.從wiki上介紹的來看,adaboost對於噪音數據和異常數據是十分敏感的。Boosting方法本身對噪聲點異常點很敏感,因此在每次迭代時候會給噪聲點較大的權重,這不是我們系統所期望的。
2.運行速度慢,凡是涉及迭代的基本上都無法採用並行計算,Adaboost是一種”串行”算法.所以GBDT(Gradient Boosting Decision Tree)也非常慢。

[參考]
隨機森林算法在機器學習中的作用
https://medium.com/@Synced/how-random-forest-algorithm-works-in-machine-learning-3c0fe15b6674
總結:Bootstrap(自助法),Bagging,Boosting(提升)
https://www.jianshu.com/p/708dff71df3a
Bagging(Bootstrap aggregating)、隨機森林(random forests)、AdaBoost(程式實作)
https://blog.csdn.net/xlinsist/article/details/51475345
[ML] Random Forest
http://hhtucode.blogspot.com/2013/06/ml-random-forest.html

--

--