python 如何使用DecisionTreeClassifier平衡分类?

hyrbngr7  于 2023-02-15  发布在  Python
关注(0)|答案(3)|浏览(112)

我有一个类不平衡的数据集,类不是0就是1或者2
如何计算每个类的预测误差,然后在scikit-learn中相应地重新平衡weights

3qpi33ja

3qpi33ja1#

如果你想完全平衡(对每个类都同等重要),你可以简单地传递class_weight='balanced',正如docs中所述:
平衡”模式使用y值自动调整权重,权重与输入数据中n_samples / (n_classes * np.bincount(y))的类频率成反比

kq0g1dla

kq0g1dla2#

如果类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)

zte4gxcn

zte4gxcn3#

你可以使用class_weight,但是它似乎不太擅长处理严重不平衡的类,还有其他方法:
我在这里用二进制分类作为一个例子...
0类(任职人数不足):记录数x
第1类(比例过高):记录数y
过采样:如果有x个代表性不足的班级的记录,y个代表性过高的班级的记录,那么你取所有的y,加上x个重复的(y/x)
采样不足:如果有x个代表性不足的类的记录,y个代表性过高的类的记录,那么你取所有的x加上代表性过高的类的y大小的样本
还有一个SMOTE,它试图为代表性不足的类创建合成记录:https://imbalanced-learn.org/stable/references/generated/imblearn.over_sampling.SMOTE.html

相关问题