隨機森林入門攻略
簡介
近年來,隨機森林模型在界內的關注度與受歡迎程度有著顯著的提升,這多半歸功于它可以快速地被應用到幾乎任何的數(shù)據(jù)科學問題中去,從而使人們能夠高效快捷地獲得***組基準測試結果。在各種各樣的問題中,隨機森林一次又一次地展示出令人難以置信的強大,而與此同時它又是如此的方便實用。
需要大家注意的是,在上文中特別提到的是***組測試結果,而非所有的結果,這是因為隨機森林方法固然也有自己的局限性。在這篇文章中,我們將向你介紹運用隨機森林構建預測模型時最令人感興趣的幾個方面。
隨機森林的發(fā)展史
談及隨機森林算法的產生與發(fā)展,我們必須回溯到20世紀80年代??梢哉f,該算法是Leo Breiman, Adele Cutler, Ho Tin Kam, Dietterich, Amit和Geman這幾位大師嘔心瀝血的共同結晶,他們中的每個人都對隨機森林算法的早期發(fā)展作出了重要的貢獻。Leo Breiman和 Adele Cutler最早提出了執(zhí)行隨機森里的關鍵算法,這一算法也成為了他們的專利之一。Amit, Gemen和Ho Tim Kam各自獨立地介紹了特征隨即選擇的思想,并且運用了Breiman的“套袋”思想構建了控制方差的決策樹集合。在此之后,Deitterich在模型中引入了隨即節(jié)點優(yōu)化的思想,對隨機森里進行了進一步完善。
什么是隨機森林?
隨機森林是一種多功能的機器學習算法,能夠執(zhí)行回歸和分類的任務。同時,它也是一種數(shù)據(jù)降維手段,用于處理缺失值、異常值以及其他數(shù)據(jù)探索中的重要步驟,并取得了不錯的成效。另外,它還擔任了集成學習中的重要方法,在將幾個低效模型整合為一個高效模型時大顯身手。
在隨機森林中,我們將生成很多的決策樹,并不像在CART模型里一樣只生成唯一的樹。當在基于某些屬性對一個新的對象進行分類判別時,隨機森林中的每一棵樹都會給出自己的分類選擇,并由此進行“投票”,森林整體的輸出結果將會是票數(shù)最多的分類選項;而在回歸問題中,隨機森林的輸出將會是所有決策樹輸出的平均值。
隨機森林在Python和R中的實現(xiàn)
隨機森林在R packages和Python scikit-learn中的實現(xiàn)是當下非常流行的,下列是在R和Python中載入隨機森林模型的具體代碼:
Python
#Import Libraryfromsklearn.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 objectmodel= RandomForestClassifier(n_estimators=1000)# Train the model using the training sets and check scoremodel.fit(X, y)#Predict Outputpredicted= model.predict(x_test)
R Code
library(randomForest)x<- cbind(x_train,y_train)# Fitting modelfit<- randomForest(Species ~ ., x,ntree=500)summary(fit)#Predict Outputpredicted= predict(fit,x_test)
好了,現(xiàn)在我們已經了解了運行隨機森林算法的代碼,接下來讓我們看看這個算法本身的運作方式是什么樣的吧!
#p#
隨機森林算法是如何工作的?
在隨機森林中,每一個決策樹“種植”和“生長”的規(guī)則如下所示:
1.假設我們設定訓練集中的樣本個數(shù)為N,然后通過有重置的重復多次抽樣來獲得這N個樣本,這樣的抽樣結果將作為我們生成決策樹的訓練集;
2.如果有M個輸入變量,每個節(jié)點都將隨機選擇m(m<M)個特定的變量,然后運用這m個變量來確定***的分裂點。在決策樹的生成過程中,m的值是保持不變的;
3.每棵決策樹都***可能地進行生長而不進行剪枝;
4.通過對所有的決策樹進行加總來預測新的數(shù)據(jù)(在分類時采用多數(shù)投票,在回歸時采用平均)。
隨機森林的優(yōu)點與缺點
優(yōu)點:
1.正如上文所述,隨機森林算法能解決分類與回歸兩種類型的問題,并在這兩個方面都有相當好的估計表現(xiàn);
2.隨機森林對于高維數(shù)據(jù)集的處理能力令人興奮,它可以處理成千上萬的輸入變量,并確定最重要的變量,因此被認為是一個不錯的降維方法。此外,該模型能夠輸出變量的重要性程度,這是一個非常便利的功能。下圖展示了隨機森林對于變量重要性程度的輸出形式:
3.在對缺失數(shù)據(jù)進行估計時,隨機森林是一個十分有效的方法。就算存在大量的數(shù)據(jù)缺失,隨機森林也能較好地保持精確性;
4.當存在分類不平衡的情況時,隨機森林能夠提供平衡數(shù)據(jù)集誤差的有效方法;
5.模型的上述性能可以被擴展運用到未標記的數(shù)據(jù)集中,用于引導無監(jiān)督聚類、數(shù)據(jù)透視和異常檢測;
6.隨機森林算法中包含了對輸入數(shù)據(jù)的重復自抽樣過程,即所謂的bootstrap抽樣。這樣一來,數(shù)據(jù)集中大約三分之一將沒有用于模型的訓練而是用于測試,這樣的數(shù)據(jù)被稱為out of bag samples,通過這些樣本估計的誤差被稱為out of bag error。研究表明,這種out of bag方法的與測試集規(guī)模同訓練集一致的估計方法有著相同的精確程度,因此在隨機森林中我們無需再對測試集進行另外的設置。
缺點:
1.隨機森林在解決回歸問題時并沒有像它在分類中表現(xiàn)的那么好,這是因為它并不能給出一個連續(xù)型的輸出。當進行回歸時,隨機森林不能夠作出超越訓練集數(shù)據(jù)范圍的預測,這可能導致在對某些還有特定噪聲的數(shù)據(jù)進行建模時出現(xiàn)過度擬合。
2.對于許多統(tǒng)計建模者來說,隨機森林給人的感覺像是一個黑盒子——你幾乎無法控制模型內部的運行,只能在不同的參數(shù)和隨機種子之間進行嘗試。
調整隨機森林模型中的參數(shù)
到目前為止,我們已經對整個隨機森林模型進行了基本的了解,與此同時,對于模型中各種參數(shù)的調整與修改也十分重要,下列為python scikit-learn中隨機森林模型的語法:
classsklearn.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)
具體的參數(shù)說明這里不再贅述,大家可以到scikit-learn.org的3.2.4.3.1章節(jié)進行查看。
這些參數(shù)在調節(jié)隨機森林模型的準確性方面起著至關重要的作用??茖W地使用這些指標,將能顯著的提高模型工作效率。