新聞動態
公司動態
會議與講座
精彩資料
會議報導
SCI&基金&講座資料
MedSci服務與公司動態
會議資訊
常見問題FAQ
專業知識
疾病標準指南
醫學英語
醫學統計與圖表製作技巧
研究動態與學術教育
SCI論文寫作與基金申請
研究動態
Newsletter
當前位置:首 頁 >> 新聞中心: 隨機森林入門攻略(內含R、Python代碼)

隨機森林入門攻略(內含R、Python代碼)

添加時間:2015-9-27

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

隨機森林的發展史

談及隨機森林算法的產生與發展,我們必須回溯到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
fromsklearn.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中隨機森林模型的語法:

classsklearn.ensemble.RandomForestClassifier(n_estimators=10criterion=’gini’,
max_depth=None,min_samples_split=2min_samples_leaf=1min_weight_fraction_leaf=0.0max_features=’auto’,max_leaf_nodes=None,bootstrap=Trueoob_score=Falsen_jobs=1random_state=Noneverbose=0,warm_start=Falseclass_weight=None)

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

 

 

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

結束語

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

醫學統計與圖表製作技巧相關的新聞


臨床研究學院課程推薦2:臨床醫學統計課程
臨床研究學院課程推薦4:SCI發表支持課程
臨床研究學院課程推薦3:SCI論文寫作指導課程
核查知情同意書的十個點
跟我一起從零學習stata統計軟件,從此統計不求人
臨床醫生為什麼要用數據庫開展臨床研究?
論文數據要慎用條圖
SparkR:數據科學家的新利器
大數據分類利器---支持向量機(SVM)入門介紹
web对话
live chat