sklearn Random Forest分类器可以通过树调整样本大小,来处理类不平衡吗?

时间:2013-11-27 20:27:46

标签: python r scikit-learn classification random-forest

也许这太啰嗦了。关于sklearn的随机森林的简单问题:

对于真/假分类问题,在sklearn的随机森林中是否有一种方法可以指定用于训练每棵树的样本大小,以及真假观察的比例?

更多详情如下:


在随机森林的R实现中,名为randomForest,有一个选项sampsize()。这允许您根据结果平衡用于训练每棵树的样本。

例如,如果您试图预测结果是真还是假,并且训练集中90%的结果都是假的,您可以设置sampsize(500, 500)。这意味着每棵树将在训练集中随机抽样(替换)进行训练,其中500真实和500错误观察。在这些情况下,我发现模型在使用50%截止值时可以更好地预测真实结果,从而产生更高的kappas。

在sklearn实现中似乎没有这样的选项。

  • 有没有办法在sklearn中模仿这个功能?
  • 根据Kappa统计数据简单地优化截止是否会达到类似的结果,或者在这种方法中丢失了什么?

3 个答案:

答案 0 :(得分:3)

在版本0.16-dev中,您现在可以使用class_weight="auto"来接近您想要做的事情。这仍将使用所有样本,但它会重新加权,以便类平衡。

答案 1 :(得分:2)

阅读完文档后,我认为答案肯定是否定的。感谢任何增加功能的人。如上所述,R包randomForest包含此功能。

答案 2 :(得分:0)

据我所知,scikit-learn森林采用自举,即每个树训练的样本集大小总是大小相同,并通过随机抽样替换原始训练集。

假设你有足够多的训练样本,为什么不平衡它本身以保持50/50阳性/阴性样本,你将达到预期的效果。 scikit-learn为此提供了功能。