ScikitLearn 随机森林中的欠采样与 class_weight

Posted

技术标签:

【中文标题】ScikitLearn 随机森林中的欠采样与 class_weight【英文标题】:Undersampling vs class_weight in ScikitLearn Random Forests 【发布时间】:2017-09-10 21:35:22 【问题描述】:

我正在将 ScikitLearn 的随机森林应用于极其不平衡的数据集(比率为 1:10 000)。我可以使用 class_weigth='balanced' 参数。我读过它相当于欠采样。

但是,这种方法似乎对样本应用了权重,并没有改变实际的样本数量。

因为随机森林的每棵树都是建立在训练集的一个随机抽取的子样本上的,恐怕少数类在每个子样本中都不够有代表性(或者根本没有代表性)。这是真的?这会导致非常有偏见的树。

因此,我的问题是:class_weight="balanced" 参数是否允许在极其不平衡的数据集上构建合理无偏的随机森林模型,或者我是否应该找到一种方法来对每棵树上的多数类或在构建训练集时进行欠采样?

【问题讨论】:

拥有一个没有太多代表性的课程本身就是一种危险。您希望有足够多的少数群体示例具有代表性。这并不意味着对多数类进行欠采样有好处。 【参考方案1】:

我认为您可以将多数类拆分为 +-10000 个样本,并使用每个样本加上少数类的相同点来训练相同的模型。

【讨论】:

非常感谢!我有类似的想法,但我还没有看到任何类似的东西适用于任何地方。我正在考虑在森林的每棵树上使用多数类的不同样本(+少数类的相同点)。跨度>

以上是关于ScikitLearn 随机森林中的欠采样与 class_weight的主要内容,如果未能解决你的问题,请参考以下文章

Julia 中的随机森林和 ROC 曲线

训练测试拆分后不平衡数据的欠采样

集成学习与随机森林随机森林与随机子空间

求会matlab和机器学习的大牛,教我怎么实现一个随机森林

scikit learn .9 或以下的随机森林

Scikit learn - 如何使用 SVM 和随机森林进行文本分类?