使用scikit-learn时,如何找到树分割的属性?
machine-learning
python
scikit-learn
6
0

我一直在探索scikit-learn,用熵和基尼分裂准则来制定决策树,并探索其中的差异。

我的问题是,如何才能“打开引擎盖”并准确找出树木在每个级别上划分的属性以及相关的信息值,这样我才能看到这两个标准在哪里做出不同的选择?

到目前为止,我已经探索了文档中概述的9种方法。他们似乎不允许访问此信息。但是肯定可以访问此信息吗?我正在设想一个列表或字典,其中包含节点和增益的条目。

如果您错过了显而易见的事情,感谢您的帮助和歉意。

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

直接从文档( http://scikit-learn.org/0.12/modules/tree.html ):

from io import StringIO
out = StringIO()
out = tree.export_graphviz(clf, out_file=out)

StringIO不再支持StringIO模块,而是导入io模块。

决策树对象中还有tree_属性,该属性允许直接访问整个结构。

你可以简单地阅读它

clf.tree_.children_left #array of left children
clf.tree_.children_right #array of right children
clf.tree_.feature #array of nodes splitting feature
clf.tree_.threshold #array of nodes splitting points
clf.tree_.value #array of nodes values

有关更多详细信息,请参见导出方法源代码

通常,您可以使用inspect模块

from inspect import getmembers
print( getmembers( clf.tree_ ) )

获取对象的所有元素

sklearn文档中的决策树可视化

收藏
评论

如果您只想快速查看树中发生了什么,请尝试:

zip(X.columns[clf.tree_.feature], clf.tree_.threshold, clf.tree_.children_left, clf.tree_.children_right)

其中X是自变量的数据帧,而clf是决策树对象。注意, clf.tree_.children_leftclf.tree_.children_right一起包含进行分割的顺序(每个分割都对应于graphviz可视化中的箭头)。

收藏
评论

Scikit export_text在0.21版(2019年5月)中引入了一种名为export_text的美味新方法,可从树中查看所有规则。 文档在这里

拟合模型后,只需两行代码。首先,导入export_text

from sklearn.tree.export import export_text

其次,创建一个包含规则的对象。要使规则看起来更具可读性,请使用feature_names参数并传递功能名称列表。例如,如果您的模型称为model并且要素在名为X_train的数据X_train命名,则可以创建一个名为tree_rules的对象:

tree_rules = export_text(model, feature_names=list(X_train))

然后只需打印或保存tree_rules 。您的输出将如下所示:

|--- Age <= 0.63
|   |--- EstimatedSalary <= 0.61
|   |   |--- Age <= -0.16
|   |   |   |--- class: 0
|   |   |--- Age >  -0.16
|   |   |   |--- EstimatedSalary <= -0.06
|   |   |   |   |--- class: 0
|   |   |   |--- EstimatedSalary >  -0.06
|   |   |   |   |--- EstimatedSalary <= 0.40
|   |   |   |   |   |--- EstimatedSalary <= 0.03
|   |   |   |   |   |   |--- class: 1
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号