如何处理 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 % 是 0s 而 8% 是 1 秒。我在python
中使用sklearn (v 0.16)
为random forests
。
我看到在构造分类器时有两个参数sample_weight
和class_weight
。我目前正在使用参数class_weight="auto"
。
我使用正确吗? class_weight 和 sample weight 实际上是做什么的,我应该使用什么?
【问题讨论】:
是的,我试过了,class_weight="auto",它给了我很好的精度和召回率,但我想知道幕后发生了什么,我什至做得对 【参考方案1】:类权重是你应该使用的。
样本权重允许您为特定样本的影响指定一个乘数。对权重为 2.0 的样本进行加权与该点在数据中出现两次的效果大致相同(尽管确切的效果取决于估计器)。
类权重具有相同的效果,但它用于将集合乘数应用于属于指定类的每个样本。就功能而言,您可以使用其中任何一种,但为了方便起见,提供了class_weights
,因此您不必手动加权每个样本。也可以将两者的使用结合起来,其中类权重乘以样本权重。
sample_weights
在fit()
方法上的主要用途之一是允许提升元算法(如AdaBoostClassifier
)对现有的决策树分类器进行操作,并根据算法的需要增加或减少单个样本的权重.
【讨论】:
感谢您的解释。以上是关于如何处理 sklearn 随机森林中的类不平衡。我应该使用样本权重还是类权重参数的主要内容,如果未能解决你的问题,请参考以下文章
如何处理 sklearn GradientBoostingClassifier 中的分类变量?