首页 > 解决方案 > DecisionTreeClassifier 的 class_weight 属性对混淆矩阵没有影响,召回

问题描述

我正在为讲座准备成本敏感分类的演示,我很困惑为什么 scikit-learn 的 DecisionTreeClassifier 的 class_weight='balanced' 属性似乎根本没有效果。

该数据集有 4521 个实例,有 4000 个“否”值和 521 个“是”值。我正在使用 70/30 的训练/测试拆分,使用此代码构建和拟合模型:

clf = DecisionTreeClassifier(criterion='entropy',random_state=42,class_weight='balanced')
clf.fit(X_train, y_train)

我还尝试为类属性值设置特定的权重。

没有平衡的典型混淆矩阵是:

[[1076  109]
 [ 105   67]]

一个典型平衡混淆矩阵是:

[[1108   77]
 [ 112   60]]

不仅平衡似乎没有效果,而且在这些情况下,允许随机选择测试用例,“是”的召回变得更糟。我觉得我缺少一些非常简单和明显的东西。任何人都可以帮忙吗?

标签: pythondecision-treeimbalanced-data

解决方案


由于您的问题是二元分类,因此请使用 ROC AUC 评估模型性能(标准决策树和加权决策树)。

即使是轻微的,加权决策树也有望表现更好。

使用不同的类权重可能会获得更好的性能,这也取决于用于评估模型的性能指标的选择[1]

您可以使用网格搜索为加权决策树查找一系列不同的类权重,并发现哪些结果会产生最佳 ROC AUC 分数[1]

有关成本敏感模型的进一步阅读和实践,请查看此链接

[1]不平衡分类的成本敏感决策树


推荐阅读