scikit-learn 决策树算法中特征(自变量)重要性的计算

14 篇文章 3 订阅
7 篇文章 0 订阅

sklearn.tree.DicisionTreeClassifier类中的feature_importances_属性返回的是特征的重要性,feature_importances_越高代表特征越重要,scikit-learn官方文档1中的解释如下:

The importance of a feature is computed as the (normalized) total reduction of the criterion brought by that feature. It is also known as the Gini importance.

这是说,树的构建中,每个特征我们都会计算一个它的criterion(基尼指数2或者信息熵3),特征重要性就是这个criterion减少量的归一化值。在scikit-learn中的默认实现也就是我们常说的Gini importance

stackover上的帖子4中答主Seljuk Gülcan指出如果每个特征只被使用一次,那么feature_importances_应当就是这个Gini importance

N_t / N * (impurity - N_t_R / N_t * right_impurity
                    - N_t_L / N_t * left_impurity)
  •  

其中,N是样本的总数,N_t是当前节点的样本数目,N_t_L是结点左孩子的样本数目,N_t_R是结点右孩子的样本数目。impurity直译为不纯度(基尼指数或信息熵),这里的实现的是基尼指数。
举个例子,下面的决策树

from StringIO import StringIO

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree.export import export_graphviz
from sklearn.feature_selection import mutual_info_classif

X = [[1,0,0], [0,0,0], [0,0,1], [0,1,0]]

y = [1,0,1,1]

clf = DecisionTreeClassifier()
clf.fit(X, y)

feat_importance = clf.tree_.compute_feature_importances(normalize=False)
print("feat importance = " + str(feat_importance))

out = StringIO()
out = export_graphviz(clf, out_file='test/tree.dot')

最后的输出结果为:

feat importance = [0.25       0.08333333 0.04166667]
  •  

该决策树的图示如下:
上面代码对应的决策树图示
对于X[2]特征,

feature_importance = (4 / 4) * (0.375 - (3 / 4 * 0.444)) = 0.042
  •  

对于X[1]特征,

feature_importance = (3 / 4) * (0.444 - (2 / 3 * 0.5)) = 0.083
  •  

对于X[0]特征,

feature_importance = (2 / 4) * (0.5) = 0.25
  •  

与输出结果是吻合的。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值