【乾貨】隨機森林的Python實現

2020-11-26 搜狐網

原標題:【乾貨】隨機森林的Python實現

1新智元編譯

來源:yhat.com

作者:yhat

譯者:劉小芹

:COO、執行總編、主編、高級編譯、主筆、運營總監、客戶經理、諮詢總監、行政助理等 9 大崗位全面開放。

簡歷投遞:jobs@aiera.com.cn

HR 微信:13552313024

新智元為COO和執行總編提供最高超百萬的年薪激勵;為骨幹員工提供最完整的培訓體系、高於業界平均水平的工資和獎金。

加盟新智元,與人工智慧業界領袖攜手改變世界。

【新智元導讀】在機器學習中,隨機森林是一個包含多個決策樹的分類器,並且其輸出的類別是由個別樹輸出的類別的眾數而定。隨機森林幾乎是任何預測類問題(甚至非線性問題)的首選。本文介紹了隨機森林的原理、用途,以及用 Python 實現隨機森林的方法。

隨機森林是一種高度通用的機器學習方法,廣泛應用於市場營銷、醫療保健、保險等各領域。它可用於模擬市場營銷對客戶獲取、保持和流失的影響,或用於預測患者的患病風險和感病性。

隨機森林能夠進行回歸和分類。它能處理大量的特徵,有助於預估哪些變量在建模的底層數據中很重要。本文介紹了隨機森林的原理、用途,以及用 Python 實現隨機森林的方法。

什麼是隨機森林?

隨機森林幾乎是任何預測類問題(甚至非線性問題)的首選。隨機森林是相對較新的機器學習策略(出自90年代的貝爾實驗室),可應用於幾乎所用問題。它隸屬於更大的一類機器學習算法,叫做「集成方法」(ensemble methods)

集成學習是解決單個預測問題的數個模型的組合。集成學習通過生成多個獨立學習並進行預測的分類器/模型生效。然後這些預測結果被組合成一個預測,這個預測的準確率應當等於或大於任一分類器做出的預測。

隨機森林是集成學習中非常有效的一種,因為它依賴於許多決策樹的集合。更多關於Python 集成學習的內容可參考:http://scikit-learn.org/dev/modules/ensemble.html

我們已經知道隨機森林是其他模型的聚合,那麼它聚合的是哪些模型呢?正如它的名字所示,隨機森林是分類(或回歸)決策樹的聚合。決策樹由一系列能夠用於對一個數據集的觀察進行分類的決策組成()。

誘發隨機森林的算法將自動創建許多隨機決策樹。由於這些樹是隨機生成的,它們大多數(大概99.9%)不會對學習分類/回歸問題有影響。

如果觀察到長度為45,眼睛是藍色,並且有兩條腿,那麼它將被歸類為紅色。

那麼10000個(多半)糟糕的模型有什麼好處?好吧,他們確實沒什麼幫助。但有幫助的是這麼多的模型中也會產生少數幾個非常好的決策樹。

在進行預測時,新觀察到的特徵沿著每棵決策樹的分支往下走,並被賦予一個預測值/標籤(predicted value/label)。當森林中的每棵樹都得到它的預測值/標籤,這些預測就會被統計,所有樹的投票被返回作為最終的預測結果。

簡單地說,99.9%的不相關的樹做出了大部分的預測,但它們彼此抵消。少數好的決策樹做出了準確度高的預測,它們處於「噪聲」的頂端,使得隨機森林最終能產生較好的預測結果。

為什麼使用隨機森林?

隨機森林就像學習方法中的瑞士軍刀,任何東西它都可以給你修好。隨機森林尤其擅長預估推斷變換(inferred transformations),因此,它不需要像 SVM 那樣進行很多調試。

隨機森林能夠在沒有精心設計的數據變換(data transformations)的環境下學習。以 f (x) = log(x)函數為例。

我們在Yhat自己的為數據分析而建的交互環境 Rodeo 中編寫 Python 代碼。可在這裡下載Rodeo:https://www.yhat.com/products/rodeo。

首先,製造一些不真實數據(fake data)來加入一點噪音。

用 Rodeo 的話,應該能看到這樣的情形:

放大看這張圖:

如果我們嘗試建一個基本線性模型來用 x預測 y,我們需要作一條直線來平分 log (x)。但如果我們使用隨機森林,能得到一條接近 log (x)的曲線,看起來更像實際的函數。

你可能認為隨機森林對 log (x)函數過度擬合了。不管怎麼說,我覺得它很好地說明了隨機森林不受線性約束的限制。

用途

隨機森林的最佳使用實例之一是特徵選擇(feature selection)。嘗試許多決策樹變量(variations)帶來的副產品之一是,你可以檢驗每棵樹中哪個變量最相關/無關。

當一棵樹使用某個變量,而另一棵不用這個時,你可以比較包含/排除該變量時丟失或得到的值。在下面的例子中,我們試圖找出哪些變量在將酒分類為紅酒和白酒的任務中最重要。

隨機森林也很擅長分類任務。它能用於對具有多個可能值的類別進行預測,也能被校準來輸出概率。需要注意的是過擬合(overfitting)。隨機森林可能容易過擬合,尤其是使用相對小型的數據集時。如果你的模型在我們的測試集中表現「太好」,就應該懷疑過擬合了。

引起過擬合的原因之一是在模型中只使用真正相關的特徵。雖然不是固定的方式,但使用一些特徵選擇技術(例如前文提到的)可以避免過擬合。

我發現隨機森林——不像其他算法——在學習分類變量或分類變量和真實變量的結合時真的很有效。高基數的分類變量處理起來很棘手,因此隨機森林會大有幫助。

一個 Python 實現的例子

Scikit-Learn 對開始使用隨機森林非常好。Scikit-Learn API 在各種算法中都非常一致,因此可以很容易地在模型之間進行比較和切換。多數時候我會從簡單的地方開始,再轉移到隨機森林。

隨機森林在 scikit-learn 中實現得最好的特徵之一是 n_jobs 參數。它會根據你想要使用的核的數量自動並行擬合隨機森林。這裡有一個關於如何在 20 節點的 EC2 簇中訓練隨機森林的演示:https://vimeo.com/63269736。

按照如上代碼,你應該能看到如下的結果。由於我們使用隨機選擇的數據,因此確切的值每次都會有不同。

總結

隨機森林非常強大而且相當容易使用。與任何模型訓練一樣,要警惕過擬合。

編譯來源:http://blog.yhat.com/posts/python-random-forest.html

:COO、執行總編、主編、高級編譯、主筆、運營總監、客戶經理、諮詢總監、行政助理等 9 大崗位全面開放。

簡歷投遞:jobs@aiera.com.cn

HR 微信:13552313024

新智元為COO和執行總編提供最高超百萬的年薪激勵;為骨幹員工提供最完整的培訓體系、高於業界平均水平的工資和獎金。

加盟新智元,與人工智慧業界領袖攜手改變世界。

點擊閱讀原文,查看新智元招聘信息。返回搜狐,查看更多

責任編輯:

相關焦點

  • 實戰:用Python實現隨機森林
    隨機森林隨機森林是許多決策樹組成的模型。這個模型不僅僅是一個森林,而且它還是隨機的,因為有兩個概念:隨機抽樣的數據點;基於要素子集拆分的節點;隨機抽樣隨機森林背後的關鍵是每棵樹在數據點的隨機樣本上訓練。
  • 用Python實現隨機森林算法
    隨機森林算法(Random forest algorithm)是對 bagging 算法的擴展。除了仍然根據從訓練數據樣本建立複合模型之外,隨機森林對用做構建樹(tree)的數據特徵做了一定限制,使得生成的決策樹之間沒有關聯,從而提升算法效果。本文章旨在探討如何用 Python 實現隨機森林算法。
  • 理解隨機森林:基於Python的實現和解釋
    數據科學家 William Koehrsen 用 Python 實現並解釋了決策樹和隨機森林的工作過程。隨機森林也可以在每個節點考慮所有特徵來進行訓練。(在 Scikit-Learn 隨機森林實現中,這些選項是可調控的。)如果你理解了單個決策樹、bagging 決策樹、特徵的隨機子集,那你就可以很好地理解隨機森林的工作方式了。
  • Python學習第128課——在Python中實現醉漢隨機遊走
    【每天幾分鐘,從零入門python編程的世界!】這節我們在2D平面內實現隨機遊走。我們先把原理搞清楚,用代碼實現這個原理。原理分析:我們想像在2D平面內有一個x軸和y軸組成的坐標系,有一個人他是個醉漢,他以(0,0)為原點,隨機遊走,以x和y表示遊走後的坐標值,剛開始x=0,y=0。他每走一步之前,都需要先做一次選擇,選擇往東南西北哪一個方向去走,這個選擇我們需要先引入一個random庫,這是一個可以用來實現隨機數、隨機選擇的庫,用這個庫來實現隨機方向的選擇。
  • 大盤點:隨機森林的優缺點以及如何用Python解釋
    全文共1755字,預計學習時長3分鐘本文來自The Learning Machine——一個開放原始碼的新項目,該項目旨在為不同背景的人群創建交互式路線圖,其中包含對概念、方法、算法及其在Python或R中的代碼裡實現所有的解釋。
  • R語言實現隨機森林randomForest
    隨機森林是一個樹形分類器的集合。
  • ...詳解線性回歸、樸素貝葉斯、隨機森林在R和Python中的實現應用...
    監督式學習的例子有:回歸(Regression)、決策樹(Decision Tree)、隨機森林(Random Forest)、K最近鄰(KNN)、邏輯回歸(Logistic Regression)等等。
  • 隨機森林(Random Forest)
    隨機森林的名稱中有兩個關鍵詞,一個是「隨機」,一個就是「森林」。「森林」我們很好理解,一棵叫做樹,那麼成百上千棵就可以叫做森林了,這樣的比喻還是很貼切的,其實這也是隨機森林的主要思想--集成思想的體現。「隨機」的含義我們會在下邊部分講到。其實從直觀角度來解釋,每棵決策樹都是一個分類器(假設現在針對的是分類問題),那麼對於一個輸入樣本,N棵樹會有N個分類結果。
  • 玩轉Python 中的隨機數
    開發中我們經常遇到需要隨機數的場景,比如為了用戶密碼更安全我們有時會加鹽,也就是將用戶原密碼連接上一串隨機字符然後加密保存,又比如我們可能需要隨機展示某張圖片等等。今天,我們就來理一理 Python 中的隨機數的玩法,當然,這裡只涉及標準庫。
  • 機器學習:R語言實現隨機森林
    R包randomForest的隨機森林分類模型以及對重要變量的選擇隨機森林(random forest)是一種組成式的有監督學習方法,可視為決策樹的擴展。隨機森林通過對對象和變量進行抽樣構建預測模型,即生成多個決策樹,並依次對對象進行分類。最後將各決策樹的分類結果匯總,所有預測類別中的眾數類別即為隨機森林所預測的該對象的類別,分類準確率提升。
  • WePay機器學習反欺詐實踐:Python+scikit-learn+隨機森林
    對於欺詐模型這類需要不斷重新訓練和快速部署的任務,它有很多優點:scikit-learn使用一個統一的API來跨不同機器學習算法實現模型擬合​​與預測,使得不同算法之間的代碼復用真正有效。算法:隨機森林(Random Forest)回到shell selling,我們測試了幾種算法,然後選定能給以我們最好的性能的算法:隨機森林。
  • python隨機函數random分配應用,隨機分配8名老師到3個教室中
    羽憶教程最近遇到一個問題,要隨機分配8名老師到3個辦公室中,這時小編想要了python中的隨機函數random來進行分配工作,感覺小編像個月老一樣。python隨機函數python隨機函數在python中,想要生成隨機數
  • Python學習第130課——蒙特卡洛模擬隨機遊走
    【每天幾分鐘,從零入門python編程的世界!】之前我們用代碼實現了醉漢隨機遊走的過程。現在我們用蒙特卡洛模擬計算一下,醉漢在不同的條件下打車回家的概率。我們先定義幾個參數。how_many_steps,表示醉漢走多少步數算完成一次隨機遊走。foot_limit,表示醉漢超過出發的原點多少米就不走了,要打車回家。how_many_simulations,表示我們模擬多少次醉漢遊走的過程。taking_a_taxi_counter,表示我們模擬醉漢遊走一定的次數後,統計打車回家的次數。
  • Python學習第129課——醉漢隨機遊走代碼改進
    【每天幾分鐘,從零入門python編程的世界!】上節我們在Python中用代碼實現了醉漢隨機遊走的邏輯和過程,這節我們把上節的代碼改進一下。現在我們的小例子代碼是非常少的,實際開發中,有些項目代碼量會非常大,為了代碼在執行時有更快的速度,那麼就需要對代碼進行改進優化。
  • 從決策樹到隨機森林:樹型算法的原理與實現
    隨機森林通過隨機擾動而令所有的樹去相關,因此隨機森林要比 Bagging 性能更好。隨機森林不像 Bagging,在構建每一棵樹時,每一個結點分割前都是採用隨機樣本預測器。因為在核心思想上,隨機森林還是和 Bagging 樹一樣,因此其在方差上有所減少。
  • 「每日一練」巧用python生成隨機數
    隨機數在我們的生產和生活中有很多的應用場景,比如說登錄驗證的隨機數字等等,那麼你知道在Python中怎麼生成隨機數嗎?往下看,就是這麼簡單!題目python中生成隨機整數、隨機小數、0--1之間小數方法代碼先上代碼~運行效果題目詳述程序分析:隨機整數:random.randint(a,b),生成區間內的整數隨機小數:習慣用numpy庫,利用np.random.randn(5)生成5個隨機小數0-1隨機小數
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    4-08交叉分析方法與實現 4-09交叉分析方法與實現 4-10相關分析與實現 4-11因子分析與實現 4-12本章小結 5-01特徵工程概述 5-02數據樣本採集 5-03異常值處理 5-04標註 5-05特徵選擇 5-06特徵變換-對指化
  • 詳解線性回歸、樸素貝葉斯、隨機森林在R和Python中的...
    監督式學習的例子有:回歸(Regression)、決策樹(Decision Tree)、隨機森林(Random Forest)、K最近鄰(KNN)、邏輯回歸(Logistic Regression)等等。
  • 機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用...
    尹老師,數據科學家,浙江大學物理學博士,浙江某高校數據科學專業負責人,兼任某網絡科技上市公司大數據總監,受聘擔任多家大數據教學機構主講教師,開發多套python高級編程、機器學習、網絡爬蟲與文本挖掘系列課程,10+年python軟體開發數據產品經驗,熟悉R Java等多種程式語言,具有豐富的python統計建模、數據挖掘、大數據技術教學經驗,先後為中國交通銀行,平安保險公司等數十家知名機構主講
  • 機器學習十大經典算法之隨機森林
    隨機森林簡介隨機森林是機器學習一種常用的方法。它是以決策樹為基礎,用隨機的方式排列建立的,森林裡每個決策樹之間都是沒有關聯的。 在得到森林之後,當有一個新的輸入樣本進入的時候,就讓森林中的每一棵決策樹分別進行一下判斷,看看這個樣本應該屬於哪一類(對於分類算法),然後看看哪一類被選擇最多,就預測這個樣本為那一類。隨機森林可以用來進行無監督學習聚類和異常點檢測。