摘要:翻譯自昨天收到推送了一篇介紹隨機(jī)森林算法的郵件,感覺作為介紹和入門不錯(cuò),就順手把它翻譯一下。隨機(jī)森林引入的隨機(jī)森林算法將自動(dòng)創(chuàng)建隨機(jī)決策樹群?;貧w隨機(jī)森林也可以用于回歸問題。結(jié)語(yǔ)隨機(jī)森林相當(dāng)起來(lái)非常容易。
翻譯自: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é)語(yǔ)
前言: 隨機(jī)森林是一個(gè)非常靈活的機(jī)器學(xué)習(xí)方法,從市場(chǎng)營(yíng)銷到醫(yī)療保險(xiǎn)有著眾多的應(yīng)用。它可以用于市場(chǎng)營(yíng)銷對(duì)客戶獲取和存留建?;蝾A(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)行組合來(lái)解決單一的預(yù)測(cè)問題。它的原理是生成多個(gè)分類器模型,各自獨(dú)立地學(xué)習(xí)并作出預(yù)測(cè)。這些預(yù)測(cè)最后結(jié)合起來(lái)得到預(yù)測(cè)結(jié)果,因此和多帶帶分類器的結(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)行分類 。
1.3 隨機(jī)森林引入的隨機(jī)森林算法將自動(dòng)創(chuàng)建隨機(jī)決策樹群。由于這些樹是隨機(jī)生成的,大部分的樹(甚至 99.9%)對(duì)解決你的分類或回歸問題是沒有有意義。
1.4 投票那么,生成甚至上萬(wàn)的糟糕的模型有什么好處呢?好吧,這確實(shí)沒有。但有用的是,少數(shù)非常好的決策樹也隨之一起生成了。
當(dāng)你要做預(yù)測(cè)的時(shí)候,新的觀察值隨著決策樹自上而下走下來(lái)并被賦予一個(gè)預(yù)測(cè)值或標(biāo)簽。一旦森林中的每棵樹都給有了預(yù)測(cè)值或標(biāo)簽,所有的預(yù)測(cè)結(jié)果將被歸總到一起,所有樹的投票返回做為最終的預(yù)測(cè)結(jié)果。
簡(jiǎn)單來(lái)說,99.9%不相關(guān)的樹做出的預(yù)測(cè)結(jié)果涵蓋所有的情況,這些預(yù)測(cè)結(jié)果將會(huì)彼此抵消。少數(shù)優(yōu)秀的樹的預(yù)測(cè)結(jié)果將會(huì)脫穎而出,從而得到一個(gè)好的預(yù)測(cè)結(jié)果。
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下載Rodeo的Mac,Windows和Linux的安裝文件。
首先,我們先生成一下數(shù)據(jù)并添加噪聲。
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來(lái)預(yù)測(cè)y,我們需要作一條直線,一定成都市算是平分log(x)函數(shù)。而如果我們使用隨機(jī)森林算法,它可以更好的逼近log(x)曲線從而使得它看起來(lái)更像實(shí)際的函數(shù)。?
當(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)性的特征,比如使用之前提到的特征選擇。
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 |
隨機(jī)森林相當(dāng)起來(lái)非常容易。不過和其他任何建模方法一樣要注意過擬合問題。如果你有興趣用R語(yǔ)言使用隨機(jī)森林,可以查看randomForest包。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/44250.html
摘要:在本教程中,您將了解如何在中從頭開始實(shí)現(xiàn)隨機(jī)森林算法。如何將隨機(jī)森林算法應(yīng)用于預(yù)測(cè)建模問題。如何在中從頭開始實(shí)現(xiàn)隨機(jī)森林圖片來(lái)自,保留部分權(quán)利。這被稱為隨機(jī)森林算法。如何更新決策樹的創(chuàng)建以適應(yīng)隨機(jī)森林過程。 歡迎大家前往云+社區(qū),獲取更多騰訊海量技術(shù)實(shí)踐干貨哦~ 決策樹可能會(huì)受到高度變異的影響,使得結(jié)果對(duì)所使用的特定測(cè)試數(shù)據(jù)而言變得脆弱。 根據(jù)您的測(cè)試數(shù)據(jù)樣本構(gòu)建多個(gè)模型(稱為套袋)可...
閱讀 3037·2021-11-24 09:38
閱讀 3567·2021-11-23 09:51
閱讀 1122·2021-09-09 11:52
閱讀 4141·2021-08-11 11:18
閱讀 1185·2019-08-30 14:05
閱讀 3283·2019-08-30 11:23
閱讀 1840·2019-08-29 17:02
閱讀 1187·2019-08-26 13:49