在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/


因为我的论文里用的是随机森林演算法,所以给的链接里随机森林方面的比较多,不过原理都差不多,应该会有一定帮助。


推荐阅读:
相关文章