【问题标题】:Can sklearn Random Forest classifier adjust sample size by tree, to handle class imbalance?sklearn 随机森林分类器可以通过树调整样本大小来处理类不平衡吗?
【发布时间】:2013-12-13 16:27:56
【问题描述】:

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

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

更多详情如下:


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

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

在 sklearn 实现中似乎没有此选项。

  • 有没有办法在 sklearn 中模仿这个功能?
  • 简单地根据 Kappa 统计量优化截止值是否会获得类似的结果,或者这种方法会丢失一些东西?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      据我所知,scikit-learn 森林采用自举,即每棵树训练时使用的样本集大小始终相同,并通过带放回的随机抽样从原始训练集中抽取。

      假设您有足够大的训练样本集,为什么不将其本身平衡以容纳 50/50 个正/负样本,您将达到预期的效果。 scikit-learn 为此提供了功能。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          仅在R 中的解决方法,对于分类,可以简单地使用机器的所有内核以 100% 的CPU 利用率。

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

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

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

          【讨论】:

            猜你喜欢
            • 2023-03-09
            • 2014-09-03
            • 2018-03-05
            • 2012-02-01
            • 2019-11-16
            • 1970-01-01
            • 2016-04-11
            • 2018-02-18
            • 2021-08-13
            相关资源
            最近更新 更多