當前位置:
首頁 > 知識 > Python 實現的隨機森林

Python 實現的隨機森林

作者:oschina

隨機森林是一個高度靈活的機器學習方法,擁有廣泛的應用前景,從市場營銷到醫療保健保險。既可以用來做市場營銷模擬的建模,統計客戶來源,保留和流失。也可用來預測疾病的風險和病患者的易感性。

隨機森林是一個可做能夠回歸和分類。它具備處理大數據的特性,而且它有助於估計或變數是非常重要的基礎數據建模。

這是一篇關於使用Python來實現隨機森林文章。

什麼是隨機森林?

隨機森林是幾乎任何預測問題(甚至非直線部分)的固有選擇。它是一個相對較新的機器學習的策略(在90年代產生於貝爾實驗室)和它可以幾乎用於任何方面。它屬於機器學習演算法一大類—–集成學習方法。

集成學習

集成學習通過建立幾個模型組合的來解決單一預測問題。它的工作原理是生成多個分類器/模型,各自獨立地學習和作出預測。這些預測最後結合成單預測,因此優於任何一個單分類的做出預測。

隨機森林是集成學習的一個子類,由於它依靠於策率樹的合併。你可以在這找到用python實現集成學習的文檔:Scikit學習文檔。

隨機決策樹

我們知道隨機森林是其他的模型聚合,但它聚合了什麼類型模型?你可能已經從其名稱、隨機森林聚合分類(或回歸)的樹中猜到。決策樹是由一系列的決策的組合,可用於分類觀察數據集。

隨機森林

演算法引入了一個隨機森林來自動創建隨機決策樹群。由於樹隨機生成的樹,大部分的樹(或許99.9%樹)不會對學習的分類/回歸問題都有意義。

如果觀察到長度為45,藍眼睛,和2條腿,就被歸類為紅色

所以10000個(概率上)糟糕的模型有TMD什麼好的?好吧,這樣確實沒什麼特別的好處。但是隨著很多糟糕的決策樹被生成,其中也會有很少確實很優秀的決策樹。

當你要做預測的時候,新的觀察到的特徵隨著決策樹自上而下走下來,這樣一組觀察到的特徵將會被貼上一個預測值/標籤。一旦森林中的每棵樹都給出了預測值/標籤,所有的預測結果將被歸總到一起,所有樹的模式投票被返回做為最終的預測結果。

簡單來說,99.9%不相關的樹做出的預測結果涵蓋所有的情況,這些預測結果將會彼此抵消。少數優秀的樹的預測結果將會超脫於芸芸「噪音」,做出一個好的預測。

為什麼你讓我用它?

簡單

隨機森林就是學習方法中的Leatherman呀。你幾乎可以把任何東西扔進去,它基本上都是可供使用的。在估計推斷映射方面特別好用,以致都不需要像SVM那樣做很多調試(也就是說對於那些最後期限很緊的傢伙們真是太棒了)。

[譯者註:Leatherman就是那家生產多功能摺疊刀的公司,類似瑞士軍刀]

一個映射的例子

隨機森林在沒有精心準備的數據映射的情況下也能學習。以方程f(x)=log(x)為例。

製造一些假數據,並且加上一點兒噪音。

如果我們建立了一個基本的線性模型通過使用x來預測y,我們需要作一條直線,算是平分log(x)函數。而如果我們使用一個隨機的森林,它不會更好的逼近log(x)曲線並能夠使得它更像實際函數。

你也許會說隨機森林有點擾亂了log(x)函數。不管怎樣,我都認為這做了一個很好的說明如何隨機森林並未綁定於線性約束。

使用

變數選擇

隨機森林最好的用例之一是特徵選擇。嘗試很多決策樹變種的一個副產品就是你可以檢測每棵樹中哪個變數最合適/最糟糕。

當一棵樹使用一個變數,而另一棵不使用這個變數,你就可以從是否包含這個變數來比較價值的減少或增加。優秀的隨機森林實現將為你做這些事情,所以你需要做的僅僅是知道去看那個方法或參數。

在下述的例子中,我們嘗試去指出對於將酒分為紅酒或者白酒哪個變數是最重要的。

分類

隨機森林也很善於分類。它可以被用於為多個可能目標類別做預測,它也可以被校正輸出概率。你需要注意的一件事情是過擬合。隨機森林容易產生過擬合,特別是在數據集相對小的時候。當你的模型對於測試集合做出「太好」的預測的時候就應該懷疑一下了。

產生過擬合的一個原因是在模型中只使用相關特徵。然而只使用相關特徵並不總是事先準備好的,使用特徵選擇(就像前面提到的)可以使其更簡單。

回歸

是的,它也可以做回歸。

我們已經發現隨機森林——不像其它演算法——對分類變數或者分類變數和真實變數混合學習的非常好。具有高基數(可能值的#)的分類變數是很棘手的,所以在你的口袋中放點兒這樣的東西將會是非常有用的。

一個簡短的python例子

Scikit-Learn是開始使用隨機森林的一個很好的方式。scikit-learnAPI在所以演算法中極其的一致,所有你測試和在不同的模型間切換非常容易。很多時候,我從一些簡單的東西開始,然後轉移到了隨機森林。

隨機森林在scikit-learn中的實現最棒的特性是n_jobs參數。這將會基於你想使用的核數自動地並行設置隨機森林。這裡是scikit-learn的貢獻者OlivierGrisel的一個很棒的報告,在這個報告中他談論了使用20個節點的EC2集群訓練隨機森林。

fromsklearn.datasetsimportload_iris fromsklearn.ensembleimportRandomForestClassifier importpandasaspd importnumpyasnp iris=load_iris() df=pd.DataFrame(iris.data,columns=iris.feature_names) df['is_train']=np.random.uniform(0,1,len(df))

看起來很不錯!

結語

隨機森林相當容易使用,而且很強大。對於任何建模,都要注意過擬合。如果你有興趣用R語言開始使用隨機森林,那麼就簽出randomForest包。

End.

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 36大數據 的精彩文章:

大數據早報:谷歌砸重金再在矽谷添置三個辦公樓9.14
大數據浪潮下,航空公司應如何抓住機遇?
大數據早報:Waymo給自動駕駛汽車AI打造虛擬課堂 學者指控Google試圖專利公有領域技術
大數據早報:Waymo給自動駕駛汽車AI打造虛擬課堂 9.13
幫你提升 Python的27 種編程語言

TAG:36大數據 |