sklearn随机森林分类器可以通过树来调整样本大小,以处理类的不平衡



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

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

更多细节如下:


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

例如,如果您试图预测结果是真是假,并且训练集中90%的结果是假,则可以设置sampsize(500, 500)。这意味着,每棵树都将在来自训练集的随机样本(带替换)上进行训练,该样本具有500个真观测值和500个假观测值。在这些情况下,我发现当使用50%的截止值时,模型可以更好地预测真实结果,产生更高的kappa。

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

  • 有没有办法在sklearn中模仿这个功能
  • 简单地基于Kappa统计优化截止值会得到类似的结果吗?还是在这种方法中有所损失

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

在阅读了文档之后,我认为答案肯定是否定的。不过,任何添加该功能的人都值得称赞。如上所述,R包randomForest包含此功能。

据我所知,scikit学习森林采用自举,即每棵树训练的样本集大小始终相同,并通过随机采样和替换从原始训练集中提取。

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

仅在R中进行变通,对于分类,可以简单地使用具有100%CPU利用率的机器的所有核心。

这与Sklearn RandomForest分类器的时间和速度相匹配。

对于回归,在GitHub上有一个包RandomforestParallel,它比Python Sklearn Regressor快得多。

分类:我已经测试过了,效果很好。

最新更新