有没有办法检索由sklearn.tree.DecisionTreeClassifier生成的最终节点数



如果有办法检索sklearn.tree.DecisionTreeClassifier生成的最终节点数,如果它没有对max_depth,min_samples等的限制?

节点数

拥有树后,您可以访问其内部tree_对象以及该树的各种属性。 来源中描述的其中之一node_count

属性

  • node_count : int
    树中的节点数(内部节点 + 叶)。

所以你可以做到:

c = DecisionTreeClassifier(…)
c.fit(…)
n_nodes = c.tree_.node_count

节点的其他属性

节点

的其他各种属性存储在数组中,这些数组是树对象的属性,并按节点 ID 编制索引。 例如,其 value 属性是节点分数的数组,n_node_samples是每个节点的样本数数组。 ericmjl 的答案更详细地提供了有关该表示的参考资料。您可以使用它来获取特定节点的值:

c = DecisionTreeClassifier(…)
c.fit(…)
value_i = c.tree_.value[i]

部分原因是我没有决策树可以与自己一起工作,所以我无法在这里提供具体的例子。但是,我认为深入研究源代码可能会有所帮助。

https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/tree/_tree.pyx

sklearn 的决策树有一个属性tree_,它是底层的 Tree 对象。Tree 对象在 _tree.pyx 类中定义。树对象是一个:

"二元决策树的基于数组的表示。 二叉树表示为许多并行数组。i -th 元素保存有关节点i的信息。节点 0 是 树根。

回想一下,树中有一些内部节点,但决策树始终是二进制的。因此,从节点 0 开始遍历时,可以访问树属性children_leftchildren_right,以确定哪些节点是每个节点的子节点。threshold属性也可能对您有用。

一些可能(强调可能)工作的伪代码是:

clf = DecisionTreeClassifier()
[... train and test...]
print(clf.tree_.node_count) #get the node count.
print(clf.tree_.children_left[node]) #where node is some integer
print(clf.tree_.children_right[node])
print(clf.tree_.threshold[node])

希望这有帮助。

"if" 节点的数量

我认为计算"如果"节点的数量比计算总节点数更有用。

from sklearn.tree import _tree
clf.fit(…)
ifs_count = len([x for x in clf.tree_.feature if x != _tree.TREE_UNDEFINED])

相关内容

  • 没有找到相关文章

最新更新