在sklearn中可以使用自帶的方法計算feature_importance,但是我覺得這是一種整體性的特徵重要性。那麼在每一次單獨的決策過程中,各特徵對最終決策產生的貢獻是不是也是不一樣的呢?請問如何對此種特徵重要性進行計算呢?


feature importance 一般有兩種計算方法:主要思想就是對決策樹構建的參與程度

  • 該feature作為分裂特徵的次數,也就是參與構建樹的參與次數
  • 該feature作為分裂節點時的信息增益 的 累加值
  • 自己DIY:比如越早參與決策樹的節點分裂的特徵往往重要程度越高,可以採用加權的方式計算累加和

至於每一次單獨的決策過程,只會有一個特徵參與(信息增益最大的特徵),將節點分裂成子樹


這點在我的專欄裡面有https://zhuanlan.zhihu.com/p/77480254


在決策樹中,特徵評價有很多種,比較簡單的如計算信息增益(information gain),基尼係數(gini index)等等,究其根本還是判斷樣本經過該特徵進行分類後,對分類的純度的提升程度。當然了這是在決策樹中的用法,更直接的,可以對使用所有特徵進行線性回歸,最終權值越大重要程度相對越大。


特徵重要性有兩種,一種是計算各個特徵出現在樹上節點的個數,一種是進一步計算各個特徵累計的熵增益。


建建議看看這個視頻,10分鐘之內讓你瞭解決策樹是究竟怎麼算來的。

簡單易懂的分類演算法——決策樹AI教育科普的視頻 · 379 播放

關於決策樹和隨機森林的解譯,以及對特徵貢獻的分析,最早的研究大概在2013年。目前網上的資源不多,可能不是很多人關注樹模型的內部機理吧,默認他們都是黑箱。有興趣可以翻閱以下三篇論文,當然如果你不願意看,論文後面我也會放上講解如何實現的博客和視頻的鏈接。

《Interpreting Random Forest Classification Models Using a Feature Contribution Method 》;

《Interpretation of QSAR Models Based on Random Forest Methods》;

《A new approach for interpreting Random Forest models and its application to the biology of ageing》。


1、B站是個學習的好地方。這個視頻講了怎麼把一顆決策樹的所有決策路徑畫出來。

https://www.bilibili.com/video/BV1NA411t7gR

2、參考CSDN上的這篇文章,裡面主要是對特徵貢獻的提取,文中附上了Github的代碼鏈接。

https://blog.csdn.net/FnqTyr45/article/details/78146277

3、利用scikit-learn庫中的treeinterpreter模塊來實現最容易。

http://blog.datadive.net/random-forest-interpretation-with-scikit-learn/


因為我的論文裏用的是隨機森林演算法,所以給的鏈接裏隨機森林方面的比較多,不過原理都差不多,應該會有一定幫助。


推薦閱讀:
相關文章