在近幾年隨機森林非常受到青睞,被運用在大量的機器學習應用中,它的效能、預測能力都很強,而且非常容易使用,另外隨機森林還能更去觀察每一個特徵的重要度。直覺來說,你可以把隨機森林當作是多個決策樹組合而成的,這個在機器學習領域稱為Ensemble中文可以叫整體或集成。相較於一般機器學習演算法是去培育一個天才模型的概念往往會有一些的限制,比如說這個天才模型可能在某些領域會有偏差或是不好的行為。整體機器學習(Ensemble learning)演算法則是結合多個弱學習器來建構一個強穩的模型,而這種模型比較不會有偏差或是發生高度適合(Overfit)。簡單來說機器學習演算法有兩種,一種是天才領導型的、一種是眾人投票型的,而隨機森林就是屬於眾人投票型的。
- 什麼是隨機森林算法?
- 為什麼隨機森林算法?
- 隨機森林算法現實生活中的例子
- Random Forest算法如何工作?
- 隨機森林算法應用。
什麼是隨機森林算法?
首先,隨機森林算法是一種監督分類算法。我們可以從它的名字看到它,即通過某種方式創建一個森林並使其隨機。森林中樹木的數量與可獲得的結果之間存在直接關係:樹木數量越多,結果越準確。但有一點需要注意的是,創建森林與使用信息增益或增益指數方法構建決策不同。
決策樹是決策支持工具。它使用樹狀圖來顯示可能的後果。如果您將具有目標和功能的訓練數據集輸入到決策樹中,它將製定一些規則集。這些規則可用於執行預測。用一個例子來說明這一點:假設你想要預測你的女兒是否會喜歡動畫電影,你應該收集她喜歡的過去的動畫電影,並將一些功能作為輸入。然後,通過決策樹算法,您可以生成規則。然後,您可以輸入此電影的功能,看看您的女兒是否會喜歡它。
隨機森林算法和決策樹算法的區別在於隨機森林中,找到根節點和分割特徵節點的過程將隨機運行。
為什麼隨機森林算法?
作者給出了四個優點來說明我們使用隨機森林算法的原因。
1.可以用於分類和回歸任務。
2.過度擬合是一個可能使結果更糟的關鍵問題,但對於隨機森林算法,如果森林中有足夠的樹,分類器將不會過度擬合模型。
3.隨機森林的分類器可以處理缺失值。
4.可以為隨機森林分類器建模分類值。
隨機森林算法現實生活中的例子
假設Mady想要去他可能喜歡的不同地方進行為期兩週的假期,他會向他的朋友尋求建議。他的朋友會詢問他去過哪裡,以及他是否喜歡他去過的地方。根據Mady的回答,他的朋友開始提出建議。在這裡,他的朋友形成決策樹。
Mady想要更多的朋友尋求建議,因為他認為只有一個朋友無法幫助他做出準確的決定。所以他的其他朋友也問他隨機問題,最後提供了答案。他認為選票最多的地方是他的假期決定。在這裡,作者提供了對此示例的分析。
他的一位朋友問了他一些問題,並根據答案給出了最佳位置的建議。這是典型的決策樹算法方法。朋友根據答案創建規則,並使用規則查找與規則匹配的答案。
Mady的朋友也隨機問他不同的問題,並給出了答案,這對於Mady來說是對這個地方的投票。最後,投票率最高的地方是Mady選擇去的地方。這是典型的隨機森林算法方法。
Random Forest算法如何工作?
隨機森林算法分為兩個階段,一個是隨機森林創建,另一個是從第一階段創建的隨機森林分類器進行預測。整個過程如下所示,使用該圖很容易理解。
首先展示隨機森林創建偽代碼:
- 從總“ m ”特徵中隨機選擇“ K ”特徵,其中k << m
- 在“ K ”特徵中,使用最佳分割點計算節點“ d ”
- 使用最佳拆分將節點拆分為子節點
- 重複a到c步驟,直到達到“l”個節點數
- 通過重複步驟a到d “n”次來構建森林,以創建“n”個樹
圖2顯示了隨機選擇功能的過程:
在下一階段,創建隨機森林分類器,我們將進行預測。隨機森林預測偽代碼如下所示:
- 獲取測試功能並使用每個隨機創建的決策樹的規則來預測結果並存儲預測結果(目標)
- 計算每個預測目標的投票
- 將高投票預測目標視為隨機森林算法的最終預測
這個過程很容易理解,但它有點高效。
隨機森林算法應用
作者給出了使用隨機森林算法的四種應用:銀行,醫藥,股票市場和電子商務:
- 對於銀行業務的應用,隨機森林算法用於尋找忠誠的客戶,這意味著客戶可以獲得足夠的貸款並正確地向銀行支付利息,以及欺詐客戶,這意味著有不良記錄的客戶如未能償還按時貸款或採取危險行動。
- 對於醫學中的應用,隨機森林算法可用於識別醫學中組分的正確組合,並通過分析患者的醫療記錄來識別疾病。
- 對於股票市場中的應用,隨機森林算法可用於識別股票的行為和預期的損失或利潤。
- 對於電子商務中的應用,隨機森林算法可用於根據類似客戶的經驗預測客戶是否會喜歡推薦產品。
Bootstrap(自舉法)
- Bootstrap是現代統計學較為流行的一種統計方法,在小樣本時效果很好。
- 就是一個在自身樣本重採樣的方法來估計真實分佈的問題
- 當我們不知道樣本分佈的時候,bootstrap方法最有用。
- 整合多個弱分類器,成為一個強大的分類器。這時候,集合分類器(Boosting, Bagging等)出現了。
Bagging算法介紹(bootstrap aggregation)
首先:bagging和boosting都是集成學習(ensemble learning)領域的基本算法
bagging:從訓練集從進行子抽樣組成每個基模型所需要的子訓練集,對所有基模型預測的結果進行綜合產生最終的預測結果, 至於為什麼叫bootstrap aggregation,因為它抽取訓練樣本的時候採用的就是bootstrap的方法!
- 從樣本集中用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算法
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