我一直在探索scikit-learn,使用熵和基尼系数作为分割标准来创建决策树,并研究它们的差异。
我的问题是,如何“打开引擎盖”,找出树在每个层级上具体分割的属性,以及它们相关的信息值,这样我就可以看到两种标准在选择上的不同之处?
到目前为止,我已经探索了文档中概述的9种方法。它们似乎无法访问这些信息。但这些信息肯定是可以访问的吧?我设想有一个列表或字典,包含节点和增益的条目。
回答:
直接来自文档( http://scikit-learn.org/0.12/modules/tree.html ):
from io import StringIOout = StringIO()out = tree.export_graphviz(clf, out_file=out)
StringIO
模块在Python3中已不再支持,取而代之的是导入io
模块。
决策树对象中还有一个 tree_
属性,允许直接访问整个结构。
你可以简单地读取它
clf.tree_.children_left #左子节点数组clf.tree_.children_right #右子节点数组clf.tree_.feature #节点分割特征数组clf.tree_.threshold #节点分割点数组clf.tree_.value #节点值数组
更多细节请查看 导出方法的源代码
一般来说,你可以使用 inspect
模块
from inspect import getmembersprint( getmembers( clf.tree_ ) )
来获取对象的所有元素