如何使用 DecisionTreeClassifier 平衡分类?
Posted
技术标签:
【中文标题】如何使用 DecisionTreeClassifier 平衡分类?【英文标题】:How to balance classification using DecisionTreeClassifier? 【发布时间】:2016-09-28 01:53:02 【问题描述】:我有一个类不平衡的数据集。这些类是0
、1
或2
。
如何计算每个类的预测误差,然后在 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 平衡分类?的主要内容,如果未能解决你的问题,请参考以下文章
如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]