【发布时间】:2018-08-16 15:21:57
【问题描述】:
我试图了解如何为 sci-kit learn 中的决策树计算特征重要性。之前已经提出过这个问题,但我无法重现算法提供的结果。
例如:
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]
并给出以下决策树:
现在,answer 的类似问题表明重要性计算为
其中 G 是节点杂质,在本例中为 gini 杂质。据我了解,这是减少杂质。但是,对于功能 1,这应该是:
answer 表明重要性由到达节点的概率加权(近似于到达该节点的样本比例)。同样,对于功能 1,这应该是:
这两个公式都提供了错误的结果。如何正确计算特征重要性?
【问题讨论】:
-
如果您查看source code,重要性也会被归一化。归一化是以输出的总和等于 1 的方式完成的。您还可以在此处查看有关计算的其他详细信息。
-
是的,实际上我的示例代码是错误的。计算出的特征重要性使用
clf.tree_.compute_feature_importances(normalize=False)计算。我更新了我的答案。
标签: python scikit-learn decision-tree feature-selection