了解 export_graphviz 的决策树输出

Posted

技术标签:

【中文标题】了解 export_graphviz 的决策树输出【英文标题】:Understanding decision tree output from export_graphviz 【发布时间】:2017-06-05 23:14:14 【问题描述】:

问题设置:我有一个不平衡的数据集,其中 98% 的数据属于 A 类,2% 属于 B 类。我训练了一个 DecisionTreeClassifier(来自 sklearn),其 class_weights 设置为与以下设置保持平衡:

dtc_settings = 
    'criterion': 'entropy',
    'min_samples_split': 100,
    'min_samples_leaf': 100,
    'max_features': 'auto',
    'max_depth': 5,
    'class_weight': 'balanced'

我没有理由将标准设置为熵(而不是 gini)。我只是在玩设置。

我使用tree的export_graphviz得到了下面的决策树图。这是我使用的代码:

dot_data = tree.export_graphviz(dtc, out_file=None, feature_names=feature_col, proportion=False)
graph = pydot.graph_from_dot_data(dot_data)  
graph.write_pdf("test.pdf")

我对下图中的值列表输出感到困惑:

值列表变量是否意味着两个类的权重相等?如果是这样,如何为树中的后续节点计算值列表?

这是我在 export_graphviz 中将比例设置为 True 的另一个示例:

我不知道如何解释值列表。条目是类权重吗?这是否意味着分类器将这些权重分别应用于每个类以确定在下一个节点中使用的下一个阈值?

【问题讨论】:

【参考方案1】:

该列表表示每个类中到达该节点的记录数。根据您组织目标变量的方式,第一个值表示到达该节点的 A 类型记录数,第二个值表示到达该节点的 B 类型记录数(反之亦然)。

当比例设置为 True 时,现在是到达该节点的每个类的记录的分数

决策树的工作方式是尝试找到最能分离类的决策。因此,它更喜欢会导致类似[0, 100] 的决策而不是导致[50, 50] 的决策

【讨论】:

感谢您的回答。只有当我有一个平衡的数据集时,记录的数量才有意义。在这种情况下,98% 的样本属于 A 类,2% 属于 B 类。我将 class_weight 设置为“平衡”,这将值列表中的每个条目设置为相同。因此,当数据本身没有这种分布时,我看不出记录的比例是如何相同的。 声称该节点中的熵 = 1 也暗示了同样的事情。当类平衡时,Entry 为 1,当它们都是一个类时为 0。将 class_weight 设置为 'balanced' 将复制少数类,直到两个类具有相等的表示 ***.com/questions/30972029/…

以上是关于了解 export_graphviz 的决策树输出的主要内容,如果未能解决你的问题,请参考以下文章

如何阅读graphviz决策树?

决策树可视化Graphviz中文乱码

export_graphviz 返回 NoneType

Scikit决策树分类特征

Python、PyDot 和决策树

如何显示测试样本的决策树路径?