当我在Scikit中阅读Decision Tree时,我发现:
在训练之前 balancer 数据集,以防止树偏向主导的类 . 可以通过从每个类中采样相等数量的样本来完成类 balancer ,或者优选地通过将每个类的样本权重(sample_weight)的总和归一化为相同的值来完成 .
在链接中:http://scikit-learn.org/stable/modules/tree.html
我很迷惑 .
(1)
可以通过从每个类中抽取相同数量的样本来完成类 balancer
如果我喜欢这样,我应该为每个类中的每个样本添加适当的样本权重(或添加类样本......) .
例如,如果我有两个类: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
但似乎我没有采取任何措施来 balancer 不 balancer 的数据 .
哪种方式更好,Scikit第二种方式的含义是什么?任何人都可以帮我澄清一下吗?
1 回答
balancer 数据集的方法有很多种:
过度采样(从代码不足的类中抽取更多样本而无需替换)
从过度代表的类中进行欠采样(使用/不使用替换绘制较少的样本)
基于邻域的未充分代表类的伪造数据(搜索SMOTE)
基于权重的方法:虽然您需要对此进行调整,但粗略地说,您可以从选择权重开始,这使得
weight*number of observations
在表示和过度表示的组下均相等 .