关于如何平衡不平衡数据

时间:2016-08-24 08:03:11

标签: machine-learning scikit-learn

当我在Scikit中阅读Decision Tree时,我发现:

  

在训练前平衡数据集,以防止树木出现   偏向于占主导地位的阶级。类平衡可以   通过从每个类中抽取相同数量的样本来完成,或   优选地,通过归一化样本权重的总和   (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第二种方式的含义是什么?任何人都可以帮我澄清一下吗?

1 个答案:

答案 0 :(得分:1)

有很多方法可以平衡数据集:

  1. 从代表性不足的班级
  2. 过度抽样(无需替换抽取更多样本)
  3. 从过多代表类
  4. 中进行欠采样(使用/不使用替换绘制较少的样本)
  5. 未充分代表类别的基于邻域的伪造数据(搜索SMOTE)
  6. 基于权重的方法:虽然您需要对此进行调整,但粗略地说,您可以从选择权重开始,使weight*number of observations在代表和​​代表过多的群组中都相等。