弄清楚为啥 scikit-learn DecisionTreeClassifier 决定从结果决策树中排除一个特征?
Posted
技术标签:
【中文标题】弄清楚为啥 scikit-learn DecisionTreeClassifier 决定从结果决策树中排除一个特征?【英文标题】:Figuring out why scikit-learn DecisionTreeClassifier decided to exclude a feature from the resulting decision tree?弄清楚为什么 scikit-learn DecisionTreeClassifier 决定从结果决策树中排除一个特征? 【发布时间】:2018-01-16 15:35:25 【问题描述】:我正在使用scikit-learn
的DecisionTreeClassifier
为特定功能集构建决策树。令我惊讶的是,一个被认为很重要的特征被排除在外。
有没有办法深入了解,找出算法选择排除该特征的原因?
或者真的,获取有关决策树构建过程任何部分的更多信息/分析?
【问题讨论】:
怎么说已经被排除了?你在看底层的tree_
吗?也许检查拟合树的feature_importance_
。
@VivekKumar:我使用了export_graphviz()
,但该功能不在渲染树中。
【参考方案1】:
关于您忽略功能的问题,很难说出原因,但我可以建议“玩”sample_weight
标志的权重以更改每个样本的权重,从而为提到的赋予更多权重功能,你可以阅读一个很好的解释here。
此外,为了调试,还有一种方法可以保存经过训练的树的图像,如 documentation 中所示:
export_graphviz
导出器支持多种美学选项,包括按类(或回归值)为节点着色,并在需要时使用显式变量和类名。 IPython
笔记本也可以使用 Image()
函数内联渲染这些图:
from IPython.display import Image
dot_data = tree.export_graphviz(clf, out_file=None, # clf: the trained classifier
feature_names=iris.feature_names,
class_names=iris.target_names,
filled=True, rounded=True,
special_characters=True)
graph = pydotplus.graph_from_dot_data(dot_data)
Image(graph.create_png())
【讨论】:
在我看来,sample_weight 用于为整个样本(不是特征)分配更多权重。以上是关于弄清楚为啥 scikit-learn DecisionTreeClassifier 决定从结果决策树中排除一个特征?的主要内容,如果未能解决你的问题,请参考以下文章