关于如何平衡不平衡的数据
Posted
技术标签:
【中文标题】关于如何平衡不平衡的数据【英文标题】:About how to balance imbalanced data 【发布时间】:2016-12-31 06:09:10 【问题描述】:当我在 Scikit learn 中阅读决策树时,我发现:
在训练之前平衡您的数据集,以防止树被 偏向于占主导地位的阶级。类平衡可以 通过从每个类中抽取相同数量的样本来完成,或 最好通过标准化样本权重的总和 (sample_weight) 为每个类设置相同的值。
在链接中:http://scikit-learn.org/stable/modules/tree.html
我很困惑。
(1)
类平衡可以通过采样相同数量的样本来完成 每个班级
如果我这样做,我应该使用为每个类中的每个样本添加适当的样本权重(或添加类样本......)。
例如,如果我有两个类:A 和 B 的样本数
A:100 B:10000
我可以为每个输入 10000 个样本并设置权重吗:
A的输入样本:10000,B的输入样本:10000
A 的重量:0.01,B 的重量:1.0
(2)
但还是说:
最好通过标准化样本权重的总和 (sample_weight) 为每个类设置相同的值
我完全被它弄糊涂了。这是否意味着我应该输入 100 个 A 样本和 10000 个 B 样本然后设置权重:
A:100 的输入样本,B:10000 的输入样本
A 的权重:1.0,B 的权重:1.0
但我似乎没有采取任何措施来平衡不平衡的数据。
Scikit learn 中哪种方式更好,第二种方式是什么意思?谁能帮我澄清一下?
【问题讨论】:
【参考方案1】:有很多方法可以平衡数据集:
-
从代表性不足的类中过度采样(抽取更多样本而不进行替换)
从过度代表的类中进行欠采样(在有/没有替换的情况下抽取更少的样本)
针对代表性不足的班级基于邻域的虚构数据(搜索 SMOTE)
基于权重的方法:虽然您需要对此进行调整,但大致可以从选择权重开始,使
weight*number of observations
对于代表不足和代表过多的组均相等。
【讨论】:
非常感谢。代表不足和过度呈现的组是否意味着样本较少和样本较多? 我对你的前三种方式感到困惑,你为什么不需要增加重量?第四种方法,为什么我们可以调整权重?我一直认为权重*观察次数=不同的组,这是我们需要始终遵循的约束。 尝试了解为什么存在权重以及它如何影响分类中的目标函数。你会更好地了解体重。不平衡数据的问题是过度表示的数据占主导地位。随着过度/不足采样/SMOTE 数据分布变得相同(想想 100:1 -> 10:1 或 5:1)。所以你不再需要权重以上是关于关于如何平衡不平衡的数据的主要内容,如果未能解决你的问题,请参考以下文章