隨機(jī)森林算法入門(python)

翻譯自:http://blog.yhat.com/posts/python-random-forest.html

昨天收到yhat推送了一篇介紹隨機(jī)森林算法的郵件慢洋,感覺作為介紹和入門不錯(cuò)塘雳,就順手把它翻譯一下。


目錄

  • 1 什么是隨機(jī)森林
    • 1.1 集成學(xué)習(xí)
    • 1.2 隨機(jī)決策樹
    • 1.3 隨機(jī)森林
    • 1.4 投票
  • 2 為什么要用它
  • 3 使用方法
    • 3.1 變量選擇
    • 3.2 分類
    • 3.3 回歸
  • 4 一個(gè)簡(jiǎn)單的Python示例
  • 結(jié)語

前言: 隨機(jī)森林是一個(gè)非常靈活的機(jī)器學(xué)習(xí)方法普筹,從市場(chǎng)營(yíng)銷到醫(yī)療保險(xiǎn)有著眾多的應(yīng)用败明。它可以用于市場(chǎng)營(yíng)銷對(duì)客戶獲取和存留建模或預(yù)測(cè)病人的疾病風(fēng)險(xiǎn)和易感性太防。

隨機(jī)森林能夠用于分類和回歸問題妻顶,可以處理大量特征,并能夠幫助估計(jì)用于建模數(shù)據(jù)變量的重要性蜒车。

這篇文章是關(guān)于如何使用Python構(gòu)建隨機(jī)森林模型讳嘱。

1 什么是隨機(jī)森林

隨機(jī)森林可以用于幾乎任何一種預(yù)測(cè)問題(包括非線性問題)。它是一個(gè)相對(duì)較新的機(jī)器學(xué)習(xí)策略(90年代誕生于貝爾實(shí)驗(yàn)室)可以用在任何方面酿愧。它屬于機(jī)器學(xué)習(xí)中的集成學(xué)習(xí)這一大類沥潭。

1.1 集成學(xué)習(xí)

集成學(xué)習(xí)是將多個(gè)模型進(jìn)行組合來解決單一的預(yù)測(cè)問題。它的原理是生成多個(gè)分類器模型嬉挡,各自獨(dú)立地學(xué)習(xí)并作出預(yù)測(cè)钝鸽。這些預(yù)測(cè)最后結(jié)合起來得到預(yù)測(cè)結(jié)果呼渣,因此和單獨(dú)分類器的結(jié)果相比,結(jié)果一樣或更好寞埠。

隨機(jī)森林是集成學(xué)習(xí)的一個(gè)分支,因?yàn)樗揽坑跊Q策樹的集成焊夸。更多關(guān)于python實(shí)現(xiàn)集成學(xué)習(xí)的文檔: Scikit-Learn 文檔仁连。

1.2 隨機(jī)決策樹

我們知道隨機(jī)森林是將其他的模型進(jìn)行聚合, 但具體是哪種模型呢阱穗?從其名稱也可以看出饭冬,隨機(jī)森林聚合的是分類(或回歸) 樹。一顆決策樹是由一系列的決策組合而成的揪阶,可用于數(shù)據(jù)集的觀測(cè)值進(jìn)行分類 昌抠。

如果一個(gè)觀測(cè)值為length=45,blue eye,legs=2,那么它將被劃分為紅色

1.3 隨機(jī)森林

引入的隨機(jī)森林算法將自動(dòng)創(chuàng)建隨機(jī)決策樹群。由于這些樹是隨機(jī)生成的鲁僚,大部分的樹(甚至 99.9%)對(duì)解決你的分類或回歸問題是沒有有意義炊苫。

1.4 投票

那么,生成甚至上萬的糟糕的模型有什么好處呢冰沙?好吧侨艾,這確實(shí)沒有。但有用的是拓挥,少數(shù)非常好的決策樹也隨之一起生成了唠梨。

當(dāng)你要做預(yù)測(cè)的時(shí)候,新的觀察值隨著決策樹自上而下走下來并被賦予一個(gè)預(yù)測(cè)值或標(biāo)簽侥啤。一旦森林中的每棵樹都給有了預(yù)測(cè)值或標(biāo)簽当叭,所有的預(yù)測(cè)結(jié)果將被歸總到一起,所有樹的投票返回做為最終的預(yù)測(cè)結(jié)果盖灸。

簡(jiǎn)單來說蚁鳖,99.9%不相關(guān)的樹做出的預(yù)測(cè)結(jié)果涵蓋所有的情況,這些預(yù)測(cè)結(jié)果將會(huì)彼此抵消赁炎。少數(shù)優(yōu)秀的樹的預(yù)測(cè)結(jié)果將會(huì)脫穎而出才睹,從而得到一個(gè)好的預(yù)測(cè)結(jié)果。

Random Forest

2 為什么要用它

隨機(jī)森林是機(jī)器學(xué)習(xí)方法中的Leatherman(多功能折疊刀)甘邀。你幾乎可以把任何東西扔給它琅攘。它在估計(jì)推斷映射方面做的特別好,從而不需要類似SVM醫(yī)一樣過多的調(diào)參(這點(diǎn)對(duì)時(shí)間緊迫的朋友非常好)松邪。

2.1 一個(gè)映射的例子

隨機(jī)森林可以在未經(jīng)特意手工進(jìn)行數(shù)據(jù)變換的情況下學(xué)習(xí)坞琴。以函數(shù)f(x)=log(x)為例。

我們將在Yhat自己的交互環(huán)境Rodeo中利用Python生成分析數(shù)據(jù)逗抑,你可以在here下載RodeoMac,WindowsLinux的安裝文件剧辐。

首先寒亥,我們先生成一下數(shù)據(jù)并添加噪聲。
[01]: http://latex.codecogs.com/png.latex?sh(x)=\\frac{ex+e{-x}}{2}}

import numpy as np
import pylab as pl

x = np.random.uniform(1, 100, 1000)
y = np.log(x) + np.random.normal(0, .3, 1000)

pl.scatter(x, y, s=1, label="log(x) with noise")

pl.plot(np.arange(1, 100), np.log(np.arange(1, 100)), c="b", label="log(x) true function")
pl.xlabel("x")
pl.ylabel("f(x) = log(x)")
pl.legend(loc="best")
pl.title("A Basic Log Function")
pl.show()

得到如下結(jié)果:


如果我們建立了一個(gè)基本的線性模型通過使用x來預(yù)測(cè)y荧关,我們需要作一條直線溉奕,一定成都市算是平分log(x)函數(shù)。而如果我們使用隨機(jī)森林算法忍啤,它可以更好的逼近log(x)曲線從而使得它看起來更像實(shí)際的函數(shù)加勤。

線性模型 vs 隨機(jī)森林

當(dāng)然,你也可以說隨機(jī)森林對(duì)log(x)函數(shù)有點(diǎn)過擬合同波。不管怎么樣鳄梅,這說明了隨機(jī)森林并不限于線性問題。

3 使用方法

3.1 特征選擇

隨機(jī)森林的一個(gè)最好用例是特征選擇未檩。嘗試很多個(gè)決策樹變量的一個(gè)副產(chǎn)品就是戴尸,你可以檢查變量在每棵樹中表現(xiàn)的是最佳還是最糟糕。

當(dāng)一些樹使用一個(gè)變量冤狡,而其他的不使用這個(gè)變量孙蒙,你就可以對(duì)比信息的丟失或增加。實(shí)現(xiàn)的比較好的隨機(jī)森林工具能夠?yàn)槟阕鲞@些事情悲雳,所以你需要做的僅僅是去查看那個(gè)方法或參數(shù)马篮。

在下述的例子中,我們嘗試弄明白區(qū)分紅酒或白酒時(shí)怜奖,哪些變量是最重要的浑测。

3.2 分類

隨機(jī)森林也很善長(zhǎng)分類問題。它可以被用于為多個(gè)可能目標(biāo)類別做預(yù)測(cè)歪玲,它也可以在調(diào)整后輸出概率迁央。你需要注意的一件事情是過擬合

隨機(jī)森林容易產(chǎn)生過擬合滥崩,特別是在數(shù)據(jù)集相對(duì)小的時(shí)候岖圈。當(dāng)你的模型對(duì)于測(cè)試集合做出“太好”的預(yù)測(cè)的時(shí)候就應(yīng)該懷疑一下了。避免過擬合的一個(gè)方法是在模型中只使用有相關(guān)性的特征钙皮,比如使用之前提到的特征選擇蜂科。

predicting_wine_type.png

3.3 回歸

隨機(jī)森林也可以用于回歸問題。

我發(fā)現(xiàn)短条,不像其他的方法导匣,隨機(jī)森林非常擅長(zhǎng)于分類變量或分類變量與連續(xù)變量混合的情況。

4 一個(gè)簡(jiǎn)單的Python示例

from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
import pandas as pd
import numpy as np

iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['is_train'] = np.random.uniform(0, 1, len(df)) <= .75
df['species'] = pd.Categorical.from_codes(iris.target, iris.target_names)
df.head()

train, test = df[df['is_train']==True], df[df['is_train']==False]

features = df.columns[:4]
clf = RandomForestClassifier(n_jobs=2)y, _ = pd.factorize(train['species'])
clf.fit(train[features], y)

preds = iris.target_names[clf.predict(test[features])]

pd.crosstab(test['species'], preds, rownames=['actual'], colnames=['preds'])

下面就是你應(yīng)該看到的結(jié)果了茸时。由于我們隨機(jī)選擇數(shù)據(jù)贡定,所以實(shí)際結(jié)果每次都會(huì)不一樣。

preds sertosa versicolor virginica
actual
sertosa 6 0 0
versicolor 0 16 1
virginica 0 0 12

5 結(jié)語

隨機(jī)森林相當(dāng)起來非常容易可都。不過和其他任何建模方法一樣要注意過擬合問題缓待。如果你有興趣用R語言使用隨機(jī)森林蚓耽,可以查看randomForest包。

有用的話旋炒,就動(dòng)手點(diǎn)一下 喜歡 唄

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末步悠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瘫镇,更是在濱河造成了極大的恐慌鼎兽,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汇四,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡踢涌,警方通過查閱死者的電腦和手機(jī)通孽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來睁壁,“玉大人背苦,你說我怎么就攤上這事∨嗣鳎” “怎么了行剂?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)钳降。 經(jīng)常有香客問我厚宰,道長(zhǎng),這世上最難降的妖魔是什么遂填? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任铲觉,我火速辦了婚禮,結(jié)果婚禮上吓坚,老公的妹妹穿的比我還像新娘撵幽。我一直安慰自己,他們只是感情好礁击,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布盐杂。 她就那樣靜靜地躺著,像睡著了一般哆窿。 火紅的嫁衣襯著肌膚如雪链烈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天挚躯,我揣著相機(jī)與錄音测垛,去河邊找鬼。 笑死秧均,一個(gè)胖子當(dāng)著我的面吹牛食侮,可吹牛的內(nèi)容都是我干的号涯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼锯七,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼链快!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起眉尸,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤域蜗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后噪猾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體霉祸,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年袱蜡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了丝蹭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡坪蚁,死狀恐怖奔穿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情敏晤,我是刑警寧澤贱田,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站嘴脾,受9級(jí)特大地震影響男摧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜译打,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一彩倚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧扶平,春花似錦帆离、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至麻献,卻和暖如春们妥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背勉吻。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工监婶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓惑惶,卻偏偏與公主長(zhǎng)得像煮盼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子带污,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

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