監(jiān)督學(xué)習(xí)(七)——決策樹集成:隨機(jī)森林

決策樹經(jīng)常會對訓(xùn)練數(shù)據(jù)進(jìn)行過擬合,也就是訓(xùn)練數(shù)據(jù)精度高柠硕,而預(yù)測結(jié)果很低工禾。隨機(jī)森林就是許多決策樹的集合,每一棵決策樹跟其他決策樹都不同,每棵樹都會不同方式的過擬合闻葵,那么對這些樹的結(jié)果取平均值糙捺,就可以降低過擬合。

隨機(jī)森林的隨機(jī)方法有兩種:

1笙隙、通過選擇用于構(gòu)造樹的數(shù)據(jù)點(diǎn)洪灯;
2、通過選擇每次劃分測試的特征竟痰。

一签钩、構(gòu)造隨機(jī)森林

構(gòu)造一個隨機(jī)森林模型,需要先確定用于構(gòu)造的樹的個數(shù) (RandomForestRegressor 或 RandomForestClassifier 的 n_estimators 參數(shù))坏快。這些樹在構(gòu)造時彼此完全獨(dú)立铅檩,算法對每棵樹進(jìn)行不同的隨機(jī)選擇,以確保樹和樹之間是有區(qū)別的莽鸿。首先要對數(shù)據(jù)進(jìn)行自助采樣昧旨。也就是說,從 n_samples 個數(shù)據(jù)點(diǎn)中有放回地(即同一樣本可以被多次抽取)重復(fù)隨機(jī)抽取一個樣本祥得,共抽取 n_samples 次兔沃。這樣會創(chuàng)建一個與原數(shù)據(jù)集大小相同的數(shù)據(jù)
集,但有些數(shù)據(jù)點(diǎn)會缺失级及,有些會重復(fù)乒疏。
接下來,基于這個新創(chuàng)建的數(shù)據(jù)集來構(gòu)造決策樹饮焦。在每個結(jié)點(diǎn)處怕吴,算法隨機(jī)選擇特征的一個子集,并對其中一個特征尋找最佳測試县踢,而不是對每個結(jié)點(diǎn)都尋找最佳測試转绷。選擇的特征個數(shù)由 max_features 參數(shù)來控制。每個結(jié)點(diǎn)中特征子集的選擇是相互獨(dú)立的硼啤,這樣樹的每個結(jié)點(diǎn)可以使用特征的不同子集來做出決策议经。
由于采用了自助采樣,隨機(jī)森林中構(gòu)造每棵決策樹的數(shù)據(jù)集都是略有不同丙曙。由于每個節(jié)點(diǎn)的特征選擇爸业,每棵樹的每次劃分都是基于特征的不同子集,這兩種方法共同保證隨機(jī)森林中所有樹都有所不同亏镰。
在構(gòu)造過程中扯旷,有一個關(guān)鍵參數(shù)是 max_features。
max_features:單個決策樹使用的最大特征個數(shù)
n_features:數(shù)據(jù)的特征個數(shù)

如果我們設(shè)置 max_features 等于 n_features索抓,那么每次劃分都要考慮數(shù)據(jù)集的所有特征钧忽,在特征選擇的過程中沒有添加隨機(jī)性(不過自助采樣依然存在隨機(jī)性)毯炮。如果設(shè)置 max_features 等于 1,那么在劃分時將無法選擇對哪個特征進(jìn)行測試耸黑,只能對隨機(jī)選擇的某個特征搜索不同的閾值桃煎。因此,如果 max_features 較大大刊,那么隨機(jī)森林中的樹將會十分相似为迈,利用最獨(dú)特的特征可以輕松擬合數(shù)據(jù)。如果 max_features 較小缺菌,那么隨機(jī)森林中的樹將會差異很大葫辐,為了很好地擬合數(shù)據(jù),每棵樹的深度都要很大伴郁。

二耿战、預(yù)測原理

先是利用森林中的每棵樹進(jìn)行預(yù)測。
對于回歸問題焊傅,我們可以對這些結(jié)果取平均值作為最終預(yù)測剂陡。
對于分類問題,則用到了“軟投票”策略狐胎。也就是說鸭栖,每個算法做出“軟”預(yù)測,給出每個可能的輸出標(biāo)簽的概率顽爹。對所有樹的預(yù)測概率取平均值纤泵,然后將概率最大的類別作為預(yù)測結(jié)果。
例子

import mglearn
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_moons
import matplotlib.pyplot as plt

X, y = make_moons(n_samples=100, noise=0.25, random_state=3)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=42)

# 創(chuàng)建由5棵樹組成的隨機(jī)森林
forest = RandomForestClassifier(n_estimators=5, random_state=2)
forest.fit(X_train, y_train)
fig, axes = plt.subplots(2, 3, figsize=(20, 10))

# 將這5棵樹每棵樹的決策邊界可視化镜粤,然后將這個森林的總預(yù)測也可視化
for i, (ax, tree) in enumerate(zip(axes.ravel(), forest.estimators_)):
    ax.set_title("Tree {}".format(i))
    mglearn.plots.plot_tree_partition(X_train, y_train, tree, ax=ax)
mglearn.plots.plot_2d_separator(forest, X_train, fill=True, ax=axes[-1, -1], alpha=.4)
axes[-1, -1].set_title("Random Forest")
mglearn.discrete_scatter(X_train[:, 0], X_train[:, 1], y_train)
plt.show()

可視化的圖片


隨機(jī)森林的決策邊界.png

由上面的圖,我們可以看出來玻褪,在前5張圖中肉渴,這5棵樹學(xué)到的決策邊界大不相同。每棵樹都犯了一些錯誤带射,由于自助采樣的原因同规,導(dǎo)致一些訓(xùn)練點(diǎn)不在整個樹的訓(xùn)練集找那個。
隨機(jī)森林比單獨(dú)每一棵樹的過擬合都要小窟社,給出的決策邊界也更符合直覺券勺。在任何實際應(yīng)用中,我們會用到更多棵樹(通常是幾百或上千)灿里,從而得到更平滑的邊界关炼。

三、優(yōu)點(diǎn)匣吊、缺點(diǎn)和參數(shù)

用于回歸和分類的隨機(jī)森林是目前應(yīng)用最廣泛的機(jī)器學(xué)習(xí)方法之一儒拂。 這種方法非常強(qiáng)大寸潦,通常不需要反復(fù)調(diào)節(jié)參數(shù)就可以給出很好的結(jié)果,也不需要對數(shù)據(jù)進(jìn)行縮放社痛。
從本質(zhì)上看见转,隨機(jī)森林擁有決策樹的所有優(yōu)點(diǎn),同時彌補(bǔ)了決策樹的一些缺陷蒜哀。在大型數(shù)據(jù)集上構(gòu)建隨機(jī)森林可能比較費(fèi)時間斩箫,但是可以在多個 CPU上并行計算。通過使用 n_jobs 參數(shù)來調(diào)節(jié)使用的CPU個數(shù)撵儿。但設(shè)置 n_jobs 大于CPU個數(shù)是沒有用的校焦。可以設(shè)置 n_jobs=-1 來使用計算機(jī)的所有內(nèi)核统倒。
隨機(jī)森林本質(zhì)上是隨機(jī)的寨典,設(shè)置不同的隨機(jī)狀態(tài)(或者不設(shè)置 random_state 參數(shù))可以徹底改變構(gòu)建的模型。森林中的樹越多房匆,它對隨機(jī)狀態(tài)選擇的魯棒性就越好耸成。
對于維度非常高的稀疏數(shù)據(jù)(比如文本數(shù)據(jù)),隨機(jī)森林的表現(xiàn)往往不是很好浴鸿。對于這種數(shù)據(jù)井氢,使用線性模型可能更合適。即使是非常大的數(shù)據(jù)集岳链,隨機(jī)森林的表現(xiàn)通常也很好花竞。不過,隨機(jī)森林需要更大的內(nèi)存掸哑,訓(xùn)練和預(yù)測的速度也比線性模型要慢约急。對一個應(yīng)用來說,如果時間和內(nèi)存很重要的話苗分,那么換用線性模型可能更為明智厌蔽。
需要調(diào)節(jié)的重要參數(shù)有 n_estimators 和 max_features,可能還包括預(yù)剪枝選項(如 max_ depth)摔癣。n_estimators 總是越大越好奴饮。對更多的樹取平均可以降低過擬合,從而得到魯棒性更好的集成择浊。不過收益是遞減的戴卜,而且樹越多需要的內(nèi)存也越多,訓(xùn)練時間也越長琢岩。常用的經(jīng)驗法則就是“在時間和內(nèi)存允許的情況下盡量多”投剥。
max_features 決定每棵樹的隨機(jī)性大小,較小的 max_features 可以降低過擬合粘捎。一般使用默認(rèn)值: 對于分類薇缅,默認(rèn)值是 max_features=sqrt(n_ features); 對于回歸危彩,默認(rèn)值是 max_features=n_features。 增 大 max_features 或 max_ leaf_nodes 有時也可以提高性能泳桦。它還可以大大降低用于訓(xùn)練和預(yù)測的時間和空間要求汤徽。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市灸撰,隨后出現(xiàn)的幾起案子谒府,更是在濱河造成了極大的恐慌,老刑警劉巖浮毯,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件完疫,死亡現(xiàn)場離奇詭異,居然都是意外死亡债蓝,警方通過查閱死者的電腦和手機(jī)壳鹤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饰迹,“玉大人芳誓,你說我怎么就攤上這事“⊙迹” “怎么了锹淌?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長赠制。 經(jīng)常有香客問我赂摆,道長,這世上最難降的妖魔是什么钟些? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任烟号,我火速辦了婚禮,結(jié)果婚禮上厘唾,老公的妹妹穿的比我還像新娘褥符。我一直安慰自己,他們只是感情好抚垃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著趟大,像睡著了一般鹤树。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逊朽,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天罕伯,我揣著相機(jī)與錄音,去河邊找鬼叽讳。 笑死追他,一個胖子當(dāng)著我的面吹牛坟募,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播邑狸,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼懈糯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了单雾?” 一聲冷哼從身側(cè)響起赚哗,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎硅堆,沒想到半個月后屿储,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡渐逃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年够掠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茄菊。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡疯潭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出买羞,到底是詐尸還是另有隱情袁勺,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布畜普,位于F島的核電站期丰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏吃挑。R本人自食惡果不足惜钝荡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望舶衬。 院中可真熱鬧埠通,春花似錦、人聲如沸逛犹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽虽画。三九已至舞蔽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間码撰,已是汗流浹背渗柿。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留脖岛,地道東北人朵栖。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓颊亮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親陨溅。 傳聞我的和親對象是個殘疾皇子终惑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容