sklearn随机森林分类器能否通过树来调整样本大小以处理类别不平衡问题?

6
也许这里说得有点啰嗦了。关于sklearn的随机森林,一个简单的问题:

在进行真/假分类问题时,在sklearn的随机森林中是否有一种指定用于训练每个树的样本量以及真/假观测比率的方法?

以下是更多详细信息:


在R语言实现的随机森林randomForest中,有一个选项叫做。这可以让你基于结果平衡用于训练每棵树的样本。

例如,如果您试图预测一个结果是真还是假,并且训练集中90%的结果都是假的,则可以设置。这意味着每棵树将在训练集中随机抽取(带替换)500个真和500个假的观测来进行训练。在这些情况下,我发现当使用50%的切割点时,模型在预测真实结果时表现更好,从而产生更高的kappa值。

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

  • 是否有任何方法可以在sklearn中模拟此功能?
  • 是否简单地基于Kappa统计量来优化切割点可以实现类似的结果,还是会有些问题?
4个回答

3
在0.16-dev版本中,您现在可以使用class_weight="auto"来实现与您所需相似的功能。这仍将使用所有样本,但将重新加权以使类变得平衡。

2

阅读完文档后,我认为答案肯定是否定的。不过,如果有人增加这个功能,那么可以给他们点赞。如上所述,R软件包randomForest包含了这个功能。


0
据我所知,scikit-learn的随机森林采用自助法,即每个树所训练的样本集大小始终相同,并且是通过有放回的随机抽样从原始训练集中抽取的。
假设您拥有足够大的训练样本集,为什么不将其平衡为50/50的正/负样本,这样就可以达到期望的效果。scikit-learn提供了此功能。

0

仅适用于R的解决方法,对于分类问题,可以使用机器的所有核心,实现100%的CPU利用率。

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

此外,对于回归问题,GitHub上有一个RandomforestParallel包,比PythonSklearn Regressor快得多。

分类:我已经测试过并且运行良好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接