隨機森林是一種靈活且易于使用的機器學(xué)習(xí)算法,即便沒有超參數(shù)調(diào)優(yōu),也可以在大多數(shù)情況下得到很好的結(jié)果。它也是最常用的算法之一,因為它很簡易,既可用于分類也能用于回歸任務(wù)。 在這篇文章中,你將了解到隨機森林算法的工作原理以及適用范圍。

機器學(xué)習(xí)算法之隨機森林算法工作原理
隨機森林是一種有監(jiān)督學(xué)習(xí)算法。 就像你所看到的它的名字一樣,它創(chuàng)建了一個森林,并使它擁有某種方式隨機性。 所構(gòu)建的“森林”是決策樹的集成,大部分時候都是用“bagging”方法訓(xùn)練的。 bagging方法,即bootstrap aggregating,采用的是隨機有放回的選擇訓(xùn)練數(shù)據(jù)然后構(gòu)造分類器,最后組合學(xué)習(xí)到的模型來增加整體的效果。
簡而言之:隨機森林建立了多個決策樹,并將它們合并在一起以獲得更準(zhǔn)確和穩(wěn)定的預(yù)測。隨機森林的一大優(yōu)勢在于它既可用于分類,也可用于回歸問題,這兩類問題恰好構(gòu)成了當(dāng)前的大多數(shù)機器學(xué)習(xí)系統(tǒng)所需要面對的。 接下來,將探討隨機森林如何用于分類問題,因為分類有時被認為是機器學(xué)習(xí)的基石。 下圖,你可以看到兩棵樹的隨機森林是什么樣子的:

除了少數(shù)例外,隨機森林分類器使用所有的決策樹分類器以及bagging 分類器的超參數(shù)來控制整體結(jié)構(gòu)。 與其先構(gòu)建bagging分類器,并將其傳遞給決策樹分類器,您可以直接使用隨機森林分類器類,這樣對于決策樹而言,更加方便和優(yōu)化。要注意的是,回歸問題同樣有一個隨機森林回歸器與之相對應(yīng)。

隨機森林算法中樹的增長會給模型帶來額外的隨機性。與決策樹不同的是,每個節(jié)點被分割成最小化誤差的最佳特征,在隨機森林中我們選擇隨機選擇的特征來構(gòu)建最佳分割。因此,當(dāng)您在隨機森林中,僅考慮用于分割節(jié)點的隨機子集,甚至可以通過在每個特征上使用隨機閾值來使樹更加隨機,而不是如正常的決策樹一樣搜索最佳閾值。這個過程產(chǎn)生了廣泛的多樣性,通??梢缘玫礁玫哪P?。
一個更容易理解算法的例子
想象一下,一個名叫安德魯?shù)娜?,想知道一年的假期旅行中他?yīng)該去哪些地方。他會向了解他的朋友們咨詢建議。
起初,他去尋找一位朋友,這位朋友會問安德魯他曾經(jīng)去過哪些地方,他喜歡還是不喜歡這些地方。基于這些回答就能給安德魯一些建議,這便是一種典型的決策樹算法。
朋友通過安德魯?shù)幕卮?,為其制定出一些?guī)則來指導(dǎo)應(yīng)當(dāng)推薦的地方。隨后,安德魯開始尋求越來越多朋友們的建議,他們會問他不同的問題,并從中給出一些建議。 最后,安德魯選擇了推薦最多的地方,這便是典型的隨機森林算法。
機器學(xué)習(xí)算法之隨機森林算法的特征的重要性
隨機森林算法的另一個優(yōu)點是可以很容易地測量每個特征對預(yù)測的相對重要性。 Sklearn為此提供了一個很好的工具,它通過查看使用該特征減少了森林中所有樹多少的不純度,來衡量特征的重要性。它在訓(xùn)練后自動計算每個特征的得分,并對結(jié)果進行標(biāo)準(zhǔn)化,以使所有特征的重要性總和等于1。
如果你不了解決策樹是如何工作對,也不知道什么是葉子或節(jié)點,可以參考維基百科的描述:在決策樹中,每個內(nèi)部節(jié)點代表對一類屬性的“測試”(例如,拋硬幣的結(jié)果是正面還是反面),每個分支代表測試的結(jié)果,每個葉節(jié)點代表一個類標(biāo)簽(在計算所有屬性之后作出的決定)。葉子就是沒有下一分支的節(jié)點。

通過查看特征的重要性,您可以知道哪些特征對預(yù)測過程沒有足夠貢獻或沒有貢獻,從而決定是否丟棄它們。這是十分重要的,因為一般而言機器學(xué)習(xí)擁有的特征越多,模型就越有可能過擬合,反之亦然。
下面你可以看到一個表格和一個可視化圖表,顯示了13個特征的重要性,我在有監(jiān)督分類項目中使用了kaggle上著名的Titanic 數(shù)據(jù)集。

決策樹與隨機森林的區(qū)別
正如我先前提到的,隨機森林是決策樹的集合,但仍有一些區(qū)別。

如果您將帶有特征和標(biāo)簽的訓(xùn)練數(shù)據(jù)集輸入到?jīng)Q策樹中,它將制定一些規(guī)則集,用于預(yù)測。
例如,如果您想預(yù)測某人是否會點擊在線廣告,可以收集該廣告的過去點擊人員以及能夠描述其做決定的特征。一旦你將這些特征和標(biāo)簽放入決策樹中,它會生成節(jié)點和一些規(guī)則,然后你就可以預(yù)測廣告是否會被點擊。但決策樹通常通過計算信息增益和基尼指數(shù)來生成節(jié)點和規(guī)則時,相比之下,隨機森林則是隨機的。
另一個區(qū)別是“深度”決策樹往往會遭遇過擬合問題。而隨機森林則可以通過創(chuàng)建隨機的特征子集并使用這些子集構(gòu)建較小的樹,隨后組成子樹,這種方法可以防止大部分情況的過擬合。要注意的是,這同時會使得計算速度變慢,并取決于隨機森林構(gòu)建的樹數(shù)。
機器學(xué)習(xí)算法之隨機森林算法重要的超參數(shù)
隨機森林中的參數(shù)要么用來增強模型的預(yù)測能力,要么使模型更快。 以下將討論sklearns內(nèi)置的隨機森林函數(shù)中的超參數(shù)。

提高模型預(yù)測準(zhǔn)確性
首先,“n_estimators”超參數(shù)表示算法在進行最大投票或采取預(yù)測平均值之前建立的樹數(shù)。 一般來說,樹的數(shù)量越多,性能越好,預(yù)測也越穩(wěn)定,但這也會減慢計算速度。
另一個重要的超參數(shù)是“max_features”,它表示隨機森林在單個樹中可擁有的特征最大數(shù)量。 Sklearn提供了幾個選項,在他們的文檔中有描述:
http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html
最后一個重要的超參數(shù)是“min_sample_leaf”,正如其名稱所述,這決定了葉子的數(shù)量。
加快模型計算速度
“n_jobs”超參數(shù)表示引擎允許使用處理器的數(shù)量。 若值為1,則只能使用一個處理器。 值為-1則表示沒有限制。
“random_state”,表示隨機數(shù)種子,保證模型的輸出具有可復(fù)制性。 當(dāng)它被賦于一個指定值,且模型訓(xùn)練具有相同的參數(shù)和相同的訓(xùn)練數(shù)據(jù)時,該模型將始終產(chǎn)生相同的結(jié)果。
最后,還有一個“oob_score”(也稱為oob采樣),它是一種隨機森林交叉驗證方法。 在這個抽樣中,大約三分之一的數(shù)據(jù)不用于模型訓(xùn)練,而用來評估模型的性能。這些樣本被稱為袋外樣本。它與留一法交叉驗證方法非常相似,但幾乎沒有附加的計算負擔(dān)。
優(yōu)缺點分析
就像我之前提到的那樣,隨機森林的一個優(yōu)點是它可以用于回歸和分類任務(wù),并且很容易查看模型的輸入特征的相對重要性。
隨機森林同時也被認為是一種非常方便且易于使用的算法,因為它是默認的超參數(shù)通常會產(chǎn)生一個很好的預(yù)測結(jié)果。超參數(shù)的數(shù)量也不是那么多,而且它們所代表的含義直觀易懂。
機器學(xué)習(xí)中的一個重大問題是過擬合,但大多數(shù)情況下這對于隨機森林分類器而言不會那么容易出現(xiàn)。因為只要森林中有足夠多的樹,分類器就不會過度擬合模型。
隨機森林的主要限制在于使用大量的樹會使算法變得很慢,并且無法做到實時預(yù)測。一般而言,這些算法訓(xùn)練速度很快,預(yù)測十分緩慢。越準(zhǔn)確的預(yù)測需要越多的樹,這將導(dǎo)致模型越慢。在大多數(shù)現(xiàn)實世界的應(yīng)用中,隨機森林算法已經(jīng)足夠快,但肯定會遇到實時性要求很高的情況,那就只能首選其他方法。
當(dāng)然,隨機森林是一種預(yù)測性建模工具,而不是一種描述性工具。也就是說,如果您正在尋找關(guān)于數(shù)據(jù)中關(guān)系的描述,那建議首選其他方法。
適用范圍
隨機森林算法可被用于很多不同的領(lǐng)域,如銀行,股票市場,醫(yī)藥和電子商務(wù)。 在銀行領(lǐng)域,它通常被用來檢測那些比普通人更高頻率使用銀行服務(wù)的客戶,并及時償還他們的債務(wù)。 同時,它也會被用來檢測那些想詐騙銀行的客戶。 在金融領(lǐng)域,它可用于預(yù)測未來股票的趨勢。 在醫(yī)療保健領(lǐng)域,它可用于識別藥品成分的正確組合,分析患者的病史以識別疾病。 除此之外,在電子商務(wù)領(lǐng)域中,隨機森林可以被用來確定客戶是否真的喜歡某個產(chǎn)品。
總 結(jié)
隨機森林是一種很好的算法,適合在模型開發(fā)過程的早期進行訓(xùn)練,了解它的工作原理,并且由于其簡易性,很難構(gòu)建出“糟糕”的隨機森林。 如果您需要在短時間內(nèi)開發(fā)模型,隨機森林會是一個不錯的選擇。 最重要的是,它為你選擇的特征提供了一個很好的重要性表示。
隨機森林在性能方面也很難被擊敗。 當(dāng)然,沒有最好只有更好,你總能找到一個性能更好的模型,比如神經(jīng)網(wǎng)絡(luò),但這類模型通常需要更多的時間來開發(fā)。 最重要的是,隨機森林同時可以處理許多不同屬性的特征類型,如二元的,類別的和數(shù)值的。總的來說,隨機森林是一個(相對大部分而言)快速,簡單且靈活的工具,盡管它存在一定的局限性。
-
算法
+關(guān)注
關(guān)注
23文章
4797瀏覽量
98447 -
機器學(xué)習(xí)
+關(guān)注
關(guān)注
67文章
8560瀏覽量
137180 -
隨機森林
+關(guān)注
關(guān)注
1文章
22瀏覽量
4446 -
機器學(xué)習(xí)算法
+關(guān)注
關(guān)注
2文章
47瀏覽量
6867
原文標(biāo)題:聊一聊「隨機森林算法」那些事兒...
文章出處:【微信號:thejiangmen,微信公眾號:將門創(chuàng)投】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
經(jīng)典算法大全(51個C語言算法+單片機常用算法+機器學(xué)十大算法)
隨機森林的跌倒檢測算法
隨機塊模型學(xué)習(xí)算法
反向傳播算法的工作原理
10大常用機器學(xué)習(xí)算法匯總
一種基于數(shù)據(jù)集成的隨機森林算法
基于k近鄰的完全隨機森林算法KCRForest
基于遺傳算法和隨機森林的XGBoost改進方法
面向差分數(shù)據(jù)挖掘隱私保護的隨機森林算法
隨機森林的概念、工作原理及用例
機器學(xué)習(xí)有哪些算法?機器學(xué)習(xí)分類算法有哪些?機器學(xué)習(xí)預(yù)判有哪些算法?
基于Python實現(xiàn)隨機森林算法
機器學(xué)習(xí)算法之隨機森林算法詳解及工作原理圖解
評論