使用Scikit-learn 理解隨機森林

2020-12-11 雷鋒網

雷鋒網(公眾號:雷鋒網)按:本文為 AI 研習社編譯的技術博客,原標題 Random forest interpretation with scikit-learn,作者 ando。

翻譯 |  汪鵬        校對 | 餘杭      整理 |  餘杭


在我以前的一篇文章中,我討論了隨機森林如何變成一個「白箱子」,這樣每次預測就能被分解為各項特徵的貢獻和,即預測=偏差+特徵 1 貢獻+ ... +特徵 n 貢獻。

我的一些代碼包正在做相關工作,然而,大多數隨機森林算法包(包括 scikit-learn)並沒有給出預測過程的樹路徑。因此 sklearn 的應用需要一個補丁來展現這些路徑。幸運的是,從 0.17 版本的 scikit-learn 開始,在 api 中有兩個新增功能,這使得這個過程相對而言比較容易理解 : 獲取用於預測的所有葉子節點的 id ,並存儲所有決策樹的所有節點中間值,而不僅僅只存葉子節點的。通過這些,我們可以提取每個單獨預測的樹路徑,並通過檢查路徑來分解這些預測過程。

閒話少說,代碼託管在 github ,你也可以通過pip install treeinterpreter來獲取。

注意:這需要 0.17 版本的 scikit-learn ,你可以通過訪問  http://scikit-learn.org/stable/install.html#install-bleeding-edge 這個網址來進行安裝。


使用 treeinterpreter 分解隨機森林

首先我們將使用一個簡單的數據集,來訓練隨機森林模型。在對測試集的進行預測的同時我們將對預測值進行分解。

從模型中任意選擇兩個產生不同價格預測的數據點。

對於這兩個數據點,隨機森林給出了差異很大的預測值。為什麼呢?我們現在可以將預測值分解成偏差項(就是訓練集的均值)和單個特徵貢獻值,以便於觀察究竟哪些特徵項造成了差異,差異程度有多大。

我們可以簡單地使用 treeinterpreter 中 predict 方法,向其傳入模型和數據作為參數。

將表格列印出來


  

各個特徵的貢獻度按照絕對值從大到小排序。我們 觀察到第一個樣本的預測結果較高,正貢獻值主要來自 RM 、LSTAT 和 PTRATIO。第二個樣本的預測值則低得多,因為 RM 實際上對預測值有著很大的負影響,而且這個影響並沒有被其他正效應所補償,因此低於數據集的均值。

但是這個分解真的是對的麼?這很容易檢查:偏差和各個特徵的貢獻值加起來需要等於預測值。

請注意,在把貢獻值相加時,我們需要對浮點數進行處理,所以經過四捨五入處理後的值可能略有不同。  


比較兩個數據集

在對比兩個數據集時,這個方法將會很有用。例如:


......

想要繼續閱讀,請移步至我們的AI研習社社區:https://club.leiphone.com/page/TextTranslation/627

更多精彩內容盡在 AI 研習社。

不同領域包括計算機視覺,語音語義,區塊鏈,自動駕駛,數據挖掘,智能控制,程式語言等每日更新。

手機端可以掃描二維碼訪問:雷鋒網雷鋒網

雷鋒網原創文章,未經授權禁止轉載。詳情見轉載須知。

相關焦點

  • WePay機器學習反欺詐實踐:Python+scikit-learn+隨機森林
    WePay採用了流行的Python、scikit-learn開源學習機器學習工具以及隨機森林算法。以下是文章內容:什麼是shellselling?雖然欺詐幾乎涉及各種領域,但相對於傳統的買方或賣方僅僅擔心對方是否是騙子,支付平臺需要擔心的是交易雙方。如果其中任何一方存在信用詐騙,真正的持卡人發現和撤銷費用,平臺自身就要進行帳單償還。
  • Scikit-learn使用總結
    在機器學習和數據挖掘的應用中,scikit-learn是一個功能強大的python包。在數據量不是過大的情況下,可以解決大部分問題。學習使用scikit-learn的過程中,我自己也在補充著機器學習和數據挖掘的知識。這裡根據自己學習sklearn的經驗,我做一個總結的筆記。另外,我也想把這篇筆記一直更新下去。
  • 使用 scikit-learn 玩轉機器學習——集成學習
    Random Forests(隨機森林)我們都知道森林是由樹構成的(手動滑稽,QAQ),所以隨機森林也不例外,隨機森林裡面的樹叫做決策樹。上次我們剛聊過決策樹,相信小夥伴們還有些印象,決策樹是由一系列節點構成的,每劃分一個節點都要在所有的特徵維度的每個特徵可能取到的值上進行搜索,以取得信息熵的最小和,或最大的信息增益。
  • 第二章 使用scikit-learn進行分類預測
    可以簡單的理解為這個估算器就是scikit-learn這個強大的工具包中的各個小工具的統稱。estimators 必須具備以下兩個重要的函數:fit():該函數執行算法的訓練--設置內部參數值。這個函數執行算法的訓練--設置內部參數的值。
  • Python中的人工智慧入門:在scikit-learn中的建模
    此外,我們將使用seaborn和scikit-plot庫進行可視化,所以我們也將安裝它們。!pip install seaborn scikit-plot使用如此知名的數據集的方便之處在於,我們可以很容易地從很多包中加載數據集,例如,像這樣。
  • Scikit-learn估計器分類
    Scikit-learn實現了一系列數據挖掘算法,提供通用編程接口、標準化的測試和調參公局,便於用戶嘗試不同算法對其進行充分測試和查找最優參數值。本次講解數據挖掘通用框架的搭建方法。有了這樣一個框架,後續章節就可以把講解重點放到數據挖掘應用和技術上面。為幫助用戶實現大量分類算法,scikit-learn把相關功能封裝成估計器。估計器用於分類任務,它主要包括兩個函數。
  • python機器學習之使用scikit-learn庫
    引言數據分析由一連串的步驟組成,對於其中預測模型的創建和驗證這一步,我們使用scikit-learn這個功能強大的庫來完成。scikit-learning庫python庫scikit-learn整合了多種機器學習算法。
  • 利用Spark 和 scikit-learn 將你的模型訓練加快 100 倍
    當我們使用 Spark 進行數據處理時,我們首選的機器學習框架是 scikit-learn。隨著計算機變得越來越便宜,機器學習解決方案的上市時間變得越來越關鍵,我們探索了加快模型訓練的各種方法。其中一個解決方案是將 Spark 和 scikit-learn 中的元素組合到我們自己的混合解決方案中。
  • 利用Python的Scikit-Learn對遙感影像進行隨機森林分類
    隨機森林是一個包含多個決策樹的分類器,因其運算速度快、分類精度高、算法穩定等特點,被廣泛應用到遙感圖像的分類研究中。
  • 開源機器學習框架:Scikit-learn API簡介
    目前Scikit-learn已經實現的算法包括:支持向量機(SVM),最近鄰,邏輯回歸,隨機森林,決策樹以及多層感知器(MLP)神經網絡等等。需要指出的是,由於Scikit-learn本身不支持深度學習,也不支持GPU加速,因此這裡對於MLP的實現並不適合於處理大規模問題。有相關需求的讀者可以查看同樣對Python有良好支持的Keras和Theano等框架。
  • CDA承接的全球頂級機器學習Scikit-learn 中文社區上線啦!
    (註:scikit-learn的官網是www.scikit-learn.org,CDA承接的中文社區網址是www.scikit-learn.org.cn,這同時也標誌著CDA與全球頂級深度學習和機器學習框架更進一步融合,CDA認證更加得到全球頂級技術框架的認可!Scikit-learn(也稱為sklearn)是針對Python程式語言的免費機器學習庫。
  • 隨機森林入門攻略
    當在基於某些屬性對一個新的對象進行分類判別時,隨機森林中的每一棵樹都會給出自己的分類選擇,並由此進行「投票」,森林整體的輸出結果將會是票數最多的分類選項;而在回歸問題中,隨機森林的輸出將會是所有決策樹輸出的平均值。
  • 用 Scikit-learn Pipeline 創建機器學習流程
    本文翻譯自:https://medium.com/vickdata/a-simple-guide-to-scikit-learn-pipelines
  • 使用scikit-learn進行機器學習
    更高級的scikit-learn介紹      導語為什麼要出這個教程?1.基本用例:訓練和測試分類器練習2.更高級的用例:在訓練和測試分類器之前預處理數據2.1 標準化您的數據2.2 錯誤的預處理模式2.3 保持簡單,愚蠢:使用scikit-learn的管道連接器練習3.當更多優於更少時:交叉驗證而不是單獨拆分練習4.超參數優化:微調管道內部練習5.總結:我的scikit-learn管道只有不到10行代碼(跳過import語句)6.異構數據:當您使用數字以外的數據時練習
  • 7個常用的Scikit-learn使用技巧
    Python的scikit學習庫。我個人喜歡使用sklearn庫。sklearn提供了很好的靈活性,而且由於它易於理解的文檔,它為Python中最流行的機器學習庫奠定了基礎。由於sklearn是我們機器學習項目的基礎,因此我們必須了解一些鮮為人知但功能強大的特點,這些功能將在模型構建過程為你提供更多控制和功能。
  • 使用scikit-learn進行數據預處理
    更高級的scikit-learn介紹      導語為什麼要出這個教程?1.基本用例:訓練和測試分類器練習2.更高級的用例:在訓練和測試分類器之前預處理數據2.1 標準化您的數據2.2 錯誤的預處理模式2.3 保持簡單,愚蠢:使用scikit-learn的管道連接器練習3.當更多優於更少時:交叉驗證而不是單獨拆分練習4.超參數優化:微調管道內部練習5.總結:我的scikit-learn管道只有不到10行代碼(跳過import語句)6.異構數據:當您使用數字以外的數據時練習
  • 一遍就懂的Scikit-Learn機器學習分類過程
    首先我們來理解本文的目標。本文介紹了常見的機器學習問題。我的主要目的不是再次解決同樣的問題,而是使用Python的Scikit-Learn庫闡述教育目的的機器學習分類過程。在深入研究要解決的問題之前,我們首先理解可能涉及到的重要術語。
  • 極簡Scikit-Learn入門
    Scikit-Learn高清全景圖傳送:http://scikit-learn.org/stable/tutorial/machine_learning_map/index.html在機器學習和數據挖掘的應用中
  • scikit-learn — 神經網絡模型
    特別是,scikit-learn沒有提供GPU支持。要獲得基於GPU更快的實現,以及提供更多靈活性以構建深度學習體系結構的框架,請參見相關項目https://scikit-learn.org/stable/related_projects.html#related-projects。1.
  • 看完這篇 scikit-learn學習指南,下節AI課不用上了
    基於樹的算法:決策樹、隨機森林和提升樹等基於樹的算法用於解決分類和回歸問題。 樸素貝葉斯:樸素貝葉斯分類器是一種利用數學概率模型來解決分類問題的機器學習算法。Cython為這些算法提供了類似於C語言的性能,因此在此過程中,使用scikit-learn非常有效。Scikit-learn旨在解決與監督學習和非監督學習相關的問題,目前還不支持強化學習。