天天看點

随機森林算法入門(python)

向AI轉型的程式員都關注了這個号????????????

大資料挖掘DT機器學習  公衆号: datayx

随機森林是一個非常靈活的機器學習方法,從市場營銷到醫療保險有着衆多的應用。它可以用于市場營銷對客戶擷取和存留模組化或預測病人的疾病風險和易感性。

随機森林能夠用于分類和回歸問題,可以處理大量特征,并能夠幫助估計用于模組化資料變量的重要性。

這篇文章是關于如何使用Python建構随機森林模型。

1 什麼是随機森林

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

​內建學習​

​這一大類。

1.1 內建學習

內建學習是将多個模型進行組合來解決單一的預測問題。它的原理是生成多個分類器模型,各自獨立地學習并作出預測。這些預測最後結合起來得到預測結果,是以和單獨分類器的結果相比,結果一樣或更好。

随機森林是內建學習的一個分支,因為它依靠于決策樹的內建。更多關于python實作內建學習的文檔: Scikit-Learn 文檔。

https://link.jianshu.com/?t=http://scikit-learn.org/dev/modules/ensemble.html

1.2 随機決策樹

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

随機森林算法入門(python)

如果一個觀測值為length=45,blue eye,legs=2,那麼它将被劃分為紅色

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​

​的安裝檔案。

首先,我們先生成一下資料并添加噪聲。x+e{-x}}{2}}

import numpy as npimport 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()      

得到如下結果:

随機森林算法入門(python)

如果我們建立了一個基本的線性模型通過使用​

​x​

​來預測​

​y​

​,我們需要作一條直線,一定成都市算是平分​

​log(x)​

​函數。而如果我們使用随機森林算法,它可以更好的逼近​

​log(x)​

​曲線進而使得它看起來更像實際的函數。

随機森林算法入門(python)
随機森林算法入門(python)

線性模型 vs 随機森林

當然,你也可以說随機森林對​

​log(x)​

​函數有點過拟合。不管怎麼樣,這說明了随機森林并不限于線性問題。

3 使用方法

3.1 特征選擇

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

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

在下述的例子中,我們嘗試弄明白區分紅酒或白酒時,哪些變量是最重要的。

随機森林算法入門(python)
随機森林算法入門(python)

3.2 分類

随機森林也很善長分類問題。它可以被用于為多個可能目标類别做預測,它也可以在調整後輸出機率。你需要注意的一件事情是過拟合。

随機森林容易産生過拟合,特别是在資料集相對小的時候。當你的模型對于測試集合做出“太好”的預測的時候就應該懷疑一下了。避免過拟合的一個方法是在模型中隻使用有相關性的特征,比如使用之前提到的特征選擇。

随機森林算法入門(python)

3.3 回歸

随機森林也可以用于回歸問題。

我發現,不像其他的方法,随機森林非常擅長于分類變量或分類變量與連續變量混合的情況。

4 一個簡單的Python示例

随機森林算法入門(python)

下面就是你應該看到的結果了。由于我們随機選擇資料,是以實際結果每次都會不一樣。

preds sertosa versicolor virginica
actual
6
16 1
12

5 結語

随機森林相當起來非常容易。不過和其他任何模組化方法一樣要注意過拟合問題。如果你有興趣用​

​R​

​語言使用随機森林,可以檢視randomForest包。

不斷更新資源

搜尋公衆号添加: datayx  

深度學習、機器學習、資料分析、python

随機森林算法入門(python)

繼續閱讀