也许这太冗长了。关于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
快得多。
分类:我已经测试过了,效果很好。