为啥这棵决策树在每一步的值不等于样本数?

Posted

技术标签:

【中文标题】为啥这棵决策树在每一步的值不等于样本数?【英文标题】:Why does this decision tree's values at each step not sum to the number of samples?为什么这棵决策树在每一步的值不等于样本数? 【发布时间】:2019-09-29 21:24:54 【问题描述】:

我正在阅读有关决策树和装袋分类器的信息,并且我正在尝试展示装袋分类器中使用的第一个决策树。我对输出感到困惑。

from sklearn.model_selection import train_test_split
from sklearn.datasets import make_moons
from sklearn.ensemble import BaggingClassifier
from sklearn import tree
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import export_graphviz
from graphviz import Source

X, y = make_moons(n_samples=500, noise=0.30, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

bag_clf = BaggingClassifier(
    DecisionTreeClassifier(), 
    n_estimators=500,
    max_samples=100, 
    bootstrap=True, 
    n_jobs=-1)
bag_clf.fit(X_train, y_train)

Source(tree.export_graphviz(bag_clf.estimators_[0], out_file=None))

这是输出中的一个 sn-p

据我了解,value 应该显示每个类别中有多少样本。在这种情况下,value 字段中的数字不应该与samples 字段相加吗?为什么这里不是这样?

【问题讨论】:

【参考方案1】:

不错的收获。

似乎额外的引导样本包含在value 中,但不包含在全部samples 中;逐字重复您的代码,但更改为 bootstrap=False 消除了差异:

【讨论】:

【参考方案2】:

有趣的发现。

我做了一些挖掘,发现在导出 graphviz 对象时引导开关在比例 = True 开关上。由于同一样本有可能多次通过决策树,因此以百分比表示。如果 bootstrapping = False,则样本只经过一次,因此可以表示为每个类的样本数。

【讨论】:

以上是关于为啥这棵决策树在每一步的值不等于样本数?的主要内容,如果未能解决你的问题,请参考以下文章

使用python实现森林算法方法步骤详解

机器学习_02_决策树

为啥我的决策树会创建一个实际上并未划分样本的拆分?

机器学习决策树为什么对缺失值不敏感,如何处理缺失值?

决策树

DecisiontreeClassifier,为啥值的总和是错误的?