我使用scikit-learn
的DecisionTreeClassifier
为特定功能集构建决策树。令我惊讶的是,一个被认为很重要的特征被排除了。找出为什么scikit-learn DecisionTreeClassifier决定从结果决策树中排除一个特征?
有没有办法在引擎盖下进行窥视,并找出算法为什么选择排除该功能?
还是真的,获得有关决策树构建过程的任何部分的更多信息/分析?
我使用scikit-learn
的DecisionTreeClassifier
为特定功能集构建决策树。令我惊讶的是,一个被认为很重要的特征被排除了。找出为什么scikit-learn DecisionTreeClassifier决定从结果决策树中排除一个特征?
有没有办法在引擎盖下进行窥视,并找出算法为什么选择排除该功能?
还是真的,获得有关决策树构建过程的任何部分的更多信息/分析?
关于您忽略某个功能的问题,很难说清楚为什么,但我可以建议“玩”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用于为整个样本(不是特征)分配更多的权重。 –
你怎么说,它已被排除在外?你在看底层的'tree_'吗?也许检查合适树的'feature_importance_'。 –
@VivekKumar:我使用'export_graphviz()',并且该特征不在渲染的树中。 –