Skip to main content
 首页 » 编程设计

python之scikit-learn DecisionTreeClassifier.tree_.value 有什么作用

2025年05月04日16bjzhanghao

我正在研究 DecisionTreeClassifier 模型,我想了解模型选择的路径。所以我需要知道什么值给了

DecisionTreeClassifier.tree_.value 

请您参考如下方法:

好吧,您是对的,因为文档实际上对此含糊不清(但老实说,我也不确定它的用处)。

让我们复制 documentation 中的示例虹膜数据:

from sklearn.datasets import load_iris 
from sklearn import tree 
iris = load_iris() 
clf = tree.DecisionTreeClassifier() 
clf = clf.fit(iris.data, iris.target) 

请求 clf.tree_.value,我们得到:

array([[[ 50.,  50.,  50.]], 
       [[ 50.,   0.,   0.]], 
       [[  0.,  50.,  50.]], 
       [[  0.,  49.,   5.]], 
       [[  0.,  47.,   1.]], 
       [[  0.,  47.,   0.]], 
       [[  0.,   0.,   1.]], 
       [[  0.,   2.,   4.]], 
       [[  0.,   0.,   3.]], 
       [[  0.,   2.,   1.]], 
       [[  0.,   2.,   0.]], 
       [[  0.,   0.,   1.]], 
       [[  0.,   1.,  45.]], 
       [[  0.,   1.,   2.]], 
       [[  0.,   1.,   0.]], 
       [[  0.,   0.,   2.]], 
       [[  0.,   0.,  43.]]]) 

和

len(clf.tree_.value) 
# 17 

要了解这个数组究竟代表什么,查看树可视化很有用(也可在文档中获得,为方便起见在此处复制):

正如我们所见,这棵树有 17 个节点;仔细观察,我们看到每个节点的 value 实际上是我们的 clf.tree_.value 数组的一个元素。

所以,长话短说:

  • clf.tree_.value 是数组的数组,长度等于树中的节点数
  • 它的每个元素数组(对应于一个树节点)的长度等于类的数量(这里是 3 个)
  • 这些 3 元素数组中的每一个都对应于最终出现在每个类的相应节点中的训练样本的数量。

为了通过示例阐明最后一点,请考虑数组的第二个元素 [[ 50., 0., 0.]](对应于橙色节点) : 它说,在这个节点中,最终有来自类别 #0 的 50 个样本,以及来自其他两个类别(#1 和 #2)的零个样本。