隨機森林入門攻略

簡介

近年來,隨機森林模型在界內的關注度與受歡迎程度有著顯著的提升,這多半歸功於它可以快速地被應用到幾乎任何的數據科學問題中去,從而使人們能夠高效快捷地獲得第一組基準測試結果。在各種各樣的問題中,隨機森林一次又一次地展示出令人難以置信的強大,而與此同時它又是如此的方便實用。

在這篇文章中,我們將向你介紹運用隨機森林構建預測模型時那些最令人感興趣的方面。

隨機森林的發展史

談及隨機森林算法的產生與發展,我們必須回溯到20世紀80年代。可以說,該算法是Leo Breiman, Adele Cutler, Ho Tin Kam, Dietterich, Amit和Geman這幾位大師嘔心瀝血的共同結晶,他們中的每個人都對隨機森林算法的早期發展作出了重要的貢獻。Leo Breiman和 Adele Cutler最早提出了執行隨機森裡的關鍵算法,這一算法也成為了他們的專利之一。Amit, Gemen和Ho Tim Kam各自獨立地介紹了特徵隨即選擇的思想,並且運用了Breiman的「套袋」思想構建了控制方差的決策樹集合。在此之後,Deitterich在模型中引入了隨即節點優化的思想,對隨機森裡進行了進一步完善。

Leo Breiman

什麼是隨機森林?

隨機森林是一種多功能的機器學習算法,能夠執行回歸和分類的任務。同時,它也是一種數據降維手段,用於處理缺失值、異常值以及其他數據探索中的重要步驟,並取得了不錯的成效。另外,它還擔任了集成學習中的重要方法,在將幾個低效模型整合為一個高效模型時大顯身手。

在隨機森林中,我們將生成很多的決策樹,並不像在CART模型裡一樣只生成唯一的樹。當在基於某些屬性對一個新的對象進行分類判別時,隨機森林中的每一棵樹都會給出自己的分類選擇,並由此進行「投票」,森林整體的輸出結果將會是票數最多的分類選項;而在回歸問題中,隨機森林的輸出將會是所有決策樹輸出的平均值。

隨機森林在Python和R中的做到

隨機森林在R packages和Python scikit-learn 中的做到是當下非常流行的,下列是在R和Python中載入隨機森林模型的具體代碼:

Python

#Import Library 
from sklearn.ensemble import RandomForestClassifier
#use RandomForestRegressor for regression problem
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset

# Create Random Forest object
model= RandomForestClassifier(n_estimators=1000)
# Train the model using the training sets and check score
model.fit(X, y) #Predict Output
predicted= model.predict(x_test)


R Code

library(randomForest) 
x <- cbind(x_train,y_train) 
# Fitting model fit <- randomForest(Species ~ ., x,ntree=500) 
summary(fit) 
#Predict Output  predicted= predict(fit,x_test)

好了,現在我們已經了解了運行隨機森林算法的代碼,接下來讓我們看看這個算法本身的運作方式是什麼樣的吧!

隨機森林算法是如何工作的?

在隨機森林中,每一個決策樹「種植」和「生長」的規則如下所示:

1.假設我們設定訓練集中的樣本個數為N,然後通過有重置的重復多次抽樣來獲得這N個樣本,這樣的抽樣結果將作為我們生成決策樹的訓練集;

2.如果有M個輸入變量,每個節點都將隨機選擇m(m<M)個特定的變量,然後運用這m個變量來確定最佳的分裂點。在決策樹的生成過程中,m的值是保持不變的; 3.每棵決策樹都最大可能地進行生長而不進行剪枝; 4.通過對所有的決策樹進行加總來預測新的數據(在分類時採用多數投票,在回歸時採用平均)。

隨機森林的優點與缺點

優點:

  1. 正如上文所述,隨機森林算法能解決分類與回歸兩種類型的問題,並在這兩個方面都有相當好的可能表現;

  2. 隨機森林對於高維數據集的處理能力令人興奮,它可以處理成千上萬的輸入變量,並確定最重要的變量,因此被認為是一個不錯的降維方法。此外,該模型能夠輸出變量的重要性程度,這是一個非常便利的功能。下圖展示了隨機森林對於變量重要性程度的輸出形式:

  3. 在對缺失數據進行可能時,隨機森林是一個十分有效的方法。就算存在大量的數據缺失,隨機森林也能較好地保持精確性;

  4. 當存在分類不平衡的情況時,隨機森林能夠提供平衡數據集誤差的有效方法;

  5. 模型的上述性能可以被擴展運用到未標記的數據集中,用於引導無監督聚類、數據透視和異常檢測;

  6. 隨機森林算法中包含了對輸入數據的重復自抽樣過程,即所謂的bootstrap抽樣。這樣一來,數據集中大約三分之一將沒有用於模型的訓練而是用於測試,這樣的數據被稱為out of bag samples,通過這些樣本可能的誤差被稱為out of bag error。研究表明,這種out of bag 方法的與測試集規模同訓練集一致的可能方法有著相同的精確程度,因此在隨機森林中我們無需再對測試集進行另外的設置。

缺點:

  1. 隨機森林在解決回歸問題時並沒有像它在分類中表現的那麼好,這是因為它並不能給出一個連續型的輸出。當進行回歸時,隨機森林不能夠作出超越訓練集數據範圍的預測,這可能導致在對某些還有特定噪聲的數據進行建模時出現過度擬合。

  2. 對於許多統計建模者來說,隨機森林給人的感覺像是一個黑盒子——你幾乎無法控制模型內部的運行,只能在不同的參數和隨機種子之間進行嘗試。

調整隨機森林模型中的參數

到目前為止,我們已經對整個隨機森林模型進行了基本的了解,與此同時,對於模型中各種參數的調整與修改也十分重要,下列為python scikit-learn中隨機森林模型的語法:

class sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion='gini', max_depth=None,min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='auto', max_leaf_nodes=None,bootstrap=True, oob_score=False, n_jobs=1, random_state=None, verbose=0, warm_start=False, class_weight=None)

具體的參數說明這裡不再贅述,大家可以到scikit-learn.org的3.2.4.3.1章節進行查看。

這些參數在調節隨機森林模型的準確性方面起著至關重要的作用。科學地使用這些指標,將能顯著的提高模型工作效率。

結束語

在本文中,我們介紹了最常用的機器學習算法之一——隨機森林,並對它的優缺點以及參數調整進行了說明,我們非常推薦大家在日常分析中使用隨機森林,並通過參數調整進一步了解這個模型的分析能力。

  • 原文作者:SUNIL RAY

  • 翻譯:SDCry!!!

  • 原文鏈接:http://www.analyticsvidhya.com/blog/2015/09/random-forest-algorithm-multiple-challenges/

從今天開始,同學們如果有求職需求,可以給待字閨中留言。待字閨中會幫助大家發布求職的信息。不過,這裡推薦大家盡量寫一篇文章,寫自己最擅長的技術,寫自己最大的亮點等,會比簡歷有效得多。

閱讀原文


關於作者:
了解國內外,最新最全的面試經驗,最新的最有趣的面試題。

微信號:daiziguizhongren