弄清楚为啥 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-learnDecisionTreeClassifier 为特定功能集构建决策树。令我惊讶的是,一个被认为很重要的特征被排除在外。

有没有办法深入了解,找出算法选择排除该特征的原因?

或者真的,获取有关决策树构建过程任何部分的更多信息/分析?

【问题讨论】:

怎么说已经被排除了?你在看底层的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 决定从结果决策树中排除一个特征?的主要内容,如果未能解决你的问题,请参考以下文章

无法弄清楚为啥“悬停”不起作用

我如何弄清楚为啥这个多面体在雪花中无效?

试图弄清楚为啥 NewID 函数停止在 Oracle 上工作

无法弄清楚为啥我的提交按钮不会提交

无法弄清楚为啥我的注销按钮不起作用(php)[重复]

无法弄清楚为啥页面在底部加载? Angular UI-Router 自动滚动问题