1

当我阅读 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学习中第二种方式的含义是什么?谁能帮我澄清一下?

4

1 回答 1

1

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

  1. 从代表性不足的班级过采样(在不替换的情况下抽取更多样本)
  2. 从过度代表的类中进行欠采样(在有/没有替换的情况下抽取更少的样本)
  3. 代表性不足班级的基于邻域的虚构数据(搜索 SMOTE)
  4. 基于权重的方法:尽管您需要对此进行调整,但大致可以从选择权重开始,使weight*number of observations代表不足和代表过多的组均相等。
于 2016-08-24T11:13:33.310 回答