如何处理 sklearn 随机森林中的类不平衡。我应该使用样本权重还是类权重参数

Posted

技术标签:

【中文标题】如何处理 sklearn 随机森林中的类不平衡。我应该使用样本权重还是类权重参数【英文标题】:How to handle class imbalance in sklearn random forests. Should I use sample weights or class weight parameter 【发布时间】:2016-04-11 20:55:11 【问题描述】:

我正在尝试解决类别不平衡的二元分类问题。我有一个包含 210,000 条记录的数据集,其中 92 %0s8%1 秒。我在python 中使用sklearn (v 0.16)random forests

我看到在构造分类器时有两个参数sample_weightclass_weight。我目前正在使用参数class_weight="auto"

我使用正确吗? class_weight 和 sample weight 实际上是做什么的,我应该使用什么?

【问题讨论】:

是的,我试过了,class_weight="auto",它给了我很好的精度和召回率,但我想知道幕后发生了什么,我什至做得对 【参考方案1】:

类权重是你应该使用的。

样本权重允许您为特定样本的影响指定一个乘数。对权重为 2.0 的样本进行加权与该点在数据中出现两次的效果大致相同(尽管确切的效果取决于估计器)。

类权重具有相同的效果,但它用于将集合乘数应用于属于指定类的每个样本。就功能而言,您可以使用其中任何一种,但为了方便起见,提供了class_weights,因此您不必手动加权每个样本。也可以将两者的使用结合起来,其中类权重乘以样本权重。

sample_weightsfit() 方法上的主要用途之一是允许提升元算法(如AdaBoostClassifier)对现有的决策树分类器进行操作,并根据算法的需要增加或减少单个样本的权重.

【讨论】:

感谢您的解释。

以上是关于如何处理 sklearn 随机森林中的类不平衡。我应该使用样本权重还是类权重参数的主要内容,如果未能解决你的问题,请参考以下文章

sklearn 集成和树中连续变量的分箱

解决sklearn 随机森林数据不平衡的方法

如何处理 sklearn GradientBoostingClassifier 中的分类变量?

[转]如何处理机器学习中的不平衡类别

如何在 Scikit-Learn 的随机森林分类器中设置子样本大小?特别是对于不平衡的数据

如何处理数据不平衡问题