首頁 >後端開發 >Python教學 >隨機森林演算法入門(python)

隨機森林演算法入門(python)

高洛峰
高洛峰原創
2016-11-15 14:36:502338瀏覽

前言: 隨機森林是一個非常靈活的機器學習方法,從行銷到醫療保險有著眾多的應用。它可以用於行銷​​對客戶獲取和存留建模或預測病人的疾病風險和易感性。

隨機森林能夠用於分類和迴歸問題,可以處理大量特徵,並能夠幫助估計用於建模資料變數的重要性。

這篇文章是關於如何使用Python建立隨機森林模型。

1 什麼是隨機森林

隨機森林可以用於幾乎任何一種預測問題(包括非線性問題)。它是一個相對較新的機器學習策略(90年代誕生於貝爾實驗室)可以用在任何方面。它屬於機器學習中的整合學習這一大類。

1.1 整合學習

整合學習是將多個模型進行組合來解決單一的預測問題。它的原理是產生多個分類器模型,各自獨立地學習並做出預測。這些預測最後結合起來得到預測結果,因此和單獨分類器的結果相比,結果一樣或更好。

隨機森林是整合學習的一個分支,因為它依靠決策樹的整合。更多關於python實現整合學習的文件: Scikit-Learn 文件。

1.2 隨機決策樹

我們知道隨機森林是將其他的模型聚合, 但具體是哪一種模型呢?從其名稱也可以看出,隨機森林聚合的是分類(或迴歸) 樹。一顆決策樹是由一系列的決策組合而成的,可用於資料集的觀測值進行分類 。

隨機森林演算法入門(python)

1.3 隨機森林

引入的隨機森林演算法將自動建立隨機決策樹群。由於這些樹是隨機產生的,大部分的樹(甚至 99.9%)對解決你的分類或迴歸問題是沒有有意義。

1.4 投票

那麼,產生甚至上萬的糟糕的模型有什麼好處呢?好吧,這確實沒有。但有用的是,少數非常好的決策樹也隨之一起生成了。

當你要做預測的時候,新的觀察值隨著決策樹自上而下走下來並被賦予一個預測值或標籤。一旦森林中的每棵樹都給有了預測值或標籤,所有的預測結果將被歸結到一起,所有樹的投票返回做為最終的預測結果。

簡單來說,99.9%不相關的樹所做的預測結果涵蓋所有的情況,這些預測結果將會彼此抵銷。少數優秀的樹的預測結果將會脫穎而出,從而得到一個好的預測結果。

隨機森林演算法入門(python)

2 為什麼要用它

隨機森林是機器學習方法中的Leatherman(多功能折疊刀)。你幾乎可以把任何東西扔給它。它在估計推斷映射方面做的特別好,從而不需要類似SVM醫一樣過多的調參(這點對時間緊迫的朋友非常好)。

2.1 一個映射的例子

隨機森林可以在未經特意手工進行資料變換的情況下學習。以函數f(x)=log(x)為例。

我們將在Yhat自己的互動環境Rodeo中利用Python產生分析數據,你可以在here下載Rodeo的Mac,Windows和Linux的安裝檔。

首先,我們先生成一下數據並添加噪音。

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()

如果我們建立了一個基本的線性模型透過使用x來預測y,我們需要作一條直線,一定成都市算是平分log(x)函數。而如果我們使用隨機森林演算法,它可以更好的逼近log(x)曲線從而使得它看起來更像實際的函數。 

隨機森林演算法入門(python)

隨機森林演算法入門(python)當然,你也可以說隨機森林對log(x)函數有點過擬合。不管怎麼樣,這說明了隨機森林並不限於線性問題。

3 使用方法隨機森林演算法入門(python)

3.1 特徵選擇

隨機森林的一個最佳用例是特徵選擇。嘗試很多決策樹變數的副產品就是,你可以檢查變數在每棵樹中表現的是最佳還是最糟糕。

當一些樹使用一個變量,而其他的不使用這個變量,你就可以對比資訊的丟失或增加。實現的比較好的隨機森林工具能夠為你做這些事情,所以你需要做的只是去查看那個方法或參數。

在下述的例子中,我們試著弄清楚區分紅酒或白酒時,哪些變數是最重要的。

隨機森林演算法入門(python)3.2 分類

隨機森林也很善長分類問題。它可以被用於為多個可能目標類別做預測,它也可以在調整後輸出機率。你需要注意的一件事情是過度擬合。 隨機森林演算法入門(python)

隨機森林容易產生過擬合,特別是在資料集相對小的時候。當你的模型對於測試集合做出「太好」的預測的時候就應該懷疑一下了。避免過擬合的一個方法是在模型中只使用有相關性的特徵,例如使用先前提到的特徵選擇。

3.3 回归

随机森林也可以用于回归问题。

我发现,不像其他的方法,随机森林非常擅长于分类变量或分类变量与连续变量混合的情况。

4 一个简单的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[&#39;is_train&#39;] = np.random.uniform(0, 1, len(df)) <= .75
df[&#39;species&#39;] = pd.Categorical.from_codes(iris.target, iris.target_names)
df.head()

train, test = df[df[&#39;is_train&#39;]==True], df[df[&#39;is_train&#39;]==False]

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

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

pd.crosstab(test[&#39;species&#39;], preds, rownames=[&#39;actual&#39;], colnames=[&#39;preds&#39;])

下面就是你应该看到的结果了。由于我们随机选择数据,所以实际结果每次都会不一样。

隨機森林演算法入門(python)

5 结语

随机森林相当起来非常容易。不过和其他任何建模方法一样要注意过拟合问题。如果你有兴趣用R语言使用随机森林,可以查看randomForest包。


以上就是随机森林算法入门(python)的内容,更多相关内容请关注PHP中文网(www.php.cn)!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn