为啥叶子中的样本数与 DecisionTreeClassifier 的父节点中的值数不匹配?

Posted

技术标签:

【中文标题】为啥叶子中的样本数与 DecisionTreeClassifier 的父节点中的值数不匹配?【英文标题】:Why the number of samples in a leaf doesn't match the number of values in parent node for DecisionTreeClassifier?为什么叶子中的样本数与 DecisionTreeClassifier 的父节点中的值数不匹配? 【发布时间】:2021-08-17 14:27:05 【问题描述】:

我有一个 python 脚本,它为数据集创建一个DecisionTreeClassifier,然后绘制这棵树的图。问题是叶子中的样本数量总是与父节点中的拆分不同。例如根节点的 value=[4267, 6669],但它的右侧节点只有 828 个样本。

这是我的代码:

# Create Decision Tree classifier object
clf = DecisionTreeClassifier(max_depth=8, min_samples_split=0.03, min_samples_leaf=0.01)

# Train Decision Tree Classifier
clf = clf.fit(X_train_ohe, y_train)

# Predict the response for test dataset
X_test_ohe = ohe.transform(X_test)
y_pred = clf.predict(X_test_ohe)

print("Accuracy:", metrics.accuracy_score(y_test, y_pred))
plt.figure(figsize=(48, 24))
plot_tree(clf,
          feature_names=ohe_df.columns,
          class_names=np.unique(y).astype('str'),
          filled=True,
          fontsize=10)

为什么会这样?

【问题讨论】:

【参考方案1】:

就样本数量而言(请参阅图表中的 samples),具有 10,936 个样本的根节点被拆分为具有 10,108 和 828 个样本的节点,因此它加起来为 (10,108 + 828 = 10,936)。

如果您查看value(显示每个节点中每个类的样本数),您可以看到:

对于第一类 (Bad):根节点中的 4,267 是左孩子中 3,439 和右孩子中 828 的总和 对于第二类 (Good):6,669 是 6,669(左)和 0(右)的总和

【讨论】:

以上是关于为啥叶子中的样本数与 DecisionTreeClassifier 的父节点中的值数不匹配?的主要内容,如果未能解决你的问题,请参考以下文章

为啥将 Magento2 样本数据中的 Luma Thema 样本图像扩展到自定义主题时不可见?

为啥混淆矩阵中的总数与输入的数据不同?

样本方差为啥要除n-1,而不是n

为啥sklearn kNN分类器运行得这么快,而我的训练样本和测试样本的数量很大

LIBSVM 对未训练类的样本给出相同的预测。为啥?

机器学习-决策树和随机森林