如何使用 DecisionTreeClassifier 平衡分类?

Posted

技术标签:

【中文标题】如何使用 DecisionTreeClassifier 平衡分类?【英文标题】:How to balance classification using DecisionTreeClassifier? 【发布时间】:2016-09-28 01:53:02 【问题描述】:

我有一个类不平衡的数据集。这些类是012

如何计算每个类的预测误差,然后在 scikit-learn 中相应地重新平衡 weights

【问题讨论】:

【参考方案1】:

如果 A 类的频率为 10%,B 类的频率为 90%,那么 B 类将成为主导类,您的决策树将偏向于主导类

在这种情况下,你可以给模型传递一个 dic A:9,B:1 来指定每个类的权重,比如

clf = tree.DecisionTreeClassifier(class_weight=A:9,B:1)

class_weight='balanced' 也可以,它只是根据每个类频率的比例自动调整权重

我用class_weight='balanced'后,每个班级的记录数都变了(88923左右)

【讨论】:

【参考方案2】:

如果您想完全平衡(将每个类视为同等重要),您可以简单地传递class_weight='balanced',正如docs 中所述:

“平衡”模式使用 y 的值来自动调整 权重与输入数据中的类频率成反比 如n_samples / (n_classes * np.bincount(y))

【讨论】:

请注意,它是分类器(构造函数)的参数,而不是fit的参数。 请注意,使用它会降低模型的校准度。

以上是关于如何使用 DecisionTreeClassifier 平衡分类?的主要内容,如果未能解决你的问题,请参考以下文章

如果加入条件,我该如何解决。如果使用字符串连接,我如何使用

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?