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

Posted

技术标签:

【中文标题】DecisiontreeClassifier,为啥值的总和是错误的?【英文标题】:DecisiontreeClassifier, why is the sum of values wrong?DecisiontreeClassifier,为什么值的总和是错误的? 【发布时间】:2021-06-23 03:20:09 【问题描述】:

我可视化了我的决策树分类器,我注意到样本总和错误或公式不同,“值”值与样本值不匹配(屏幕截图)?我是否误解了我的决策树?我想如果在我的节点中有 100 个样本并且 40 个是 True 而 60 个是 False,我会在我的下一个节点中得到 40 个(或 60 个)样本,这些样本再次被划分......

import matplotlib.pyplot as plt
from sklearn import tree
tree1=DecisionTreeClassifier(criterion="entropy",max_features=13,max_leaf_nodes=75,min_impurity_decrease=0.001,min_samples_leaf=12,min_samples_split=20,splitter="best",max_depth=9)

tree1.fit(X_train,y_train)
feature_names=Daten.drop("Abwanderung_LabelEncode",axis=1).columns
class_names=["Keine Abwanderung","Abwanderung"]
fig = plt.figure(figsize=(25,20))
_ = tree.plot_tree(tree1, 
               feature_names=feature_names,
               class_names=class_names,
               rounded=True,
               filled=True)

【问题讨论】:

【参考方案1】:

情节是正确的。

value中的两个值不是去子节点的样本数;相反,它们是节点中的负类和正类计数。例如,748=101+647;该节点中有 748 个样本,其中 647 个是正类。子节点有685和63个样本,685+63=647。左孩子有47个负样本,右节点有54个,47+54=101,负样本总数。

【讨论】:

【参考方案2】:

value 字段不代表拆分的大小,而是代表每个类有多少数据点。例如,顶部节点 voicemail_tarif_labelencode <= 0.5 的拆分有 748 个样本,101 个属于索引 0 的类,647 个属于索引 1 的类。它确实显示数据点的数量 0.5。如果您现在查看接下来的两个节点,这些样本大小的总和 (685 + 63) = 748,即父节点中的样本数。

【讨论】:

以上是关于DecisiontreeClassifier,为啥值的总和是错误的?的主要内容,如果未能解决你的问题,请参考以下文章

弄清楚为啥 scikit-learn DecisionTreeClassifier 决定从结果决策树中排除一个特征?

处理 sklearn.tree.DecisionTreeClassifier 中的连续变量

DecisionTreeClassifier 上的 GridSearchCV

Scikit-learn 在 DecisionTreeClassifier 上使用 GridSearchCV

sklearn.tree.DecisionTreeClassifier 详细说明

Sklearn 的 DecisionTreeClassifier 和 CART 的区别