【问题标题】:Random forest: balancing test set?随机森林:平衡测试集?
【发布时间】:2019-07-21 11:58:24
【问题描述】:

我正在尝试在不平衡的数据集 (~1:4) 上运行随机森林分类器。

我正在使用 imblearn 的方法如下:

from imblearn.ensemble import BalancedRandomForestClassifier

rf=BalancedRandomForestClassifier(n_estimators=1000,random_state=42,class_weight='balanced',sampling_strategy='not minority')
rf.fit(train_features,train_labels) 
predictions=rf.predict(test_features)

使用来自 scikit learn 的 RepeatedStratifiedKFold 在交叉验证方法中执行训练和测试集的拆分。

但是,我想知道是否也需要平衡测试集才能获得合理的准确度分数(敏感性、特异性等)。我希望你能帮我解决这个问题。

非常感谢!

【问题讨论】:

    标签: python random-forest imblearn


    【解决方案1】:

    来自 imblearn docs

    一个平衡的随机森林随机地对每个 bootstrap 样本进行欠采样 平衡它。

    如果您可以将随机欠采样作为平衡方法,那么分类器会在“幕后”为您执行此操作。事实上,这就是首先使用 imblearn 来处理类不平衡的重点。如果您使用的是直接随机森林,例如 sklearn 的开箱即用版本,那么我会更关心在前端处理类不平衡。

    【讨论】:

    • 感谢您的回复。您基本上是在暗示调用 predict 方法时也要对测试集进行欠采样,对吗?
    • 类不平衡实际上只是训练模型的一个问题,以防止它过度拟合分类器。一旦它被拟合/训练,那么预测不依赖于类平衡,它们只是根据已经训练的模型单独评估。
    • 我明白了。但是,我不确定这是否仍会影响敏感性和特异性的评估。假设在特定折叠的交叉验证过程中,测试集主要由多数标签组成(假设是正面标签)。因此,如果我没记错的话,准确性评估会偏向于高灵敏度值和低特异性。这实际上会是一个问题吗?我可以假设交叉验证过程以某种方式弥补了这一点吗?
    • 交叉验证旨在帮助解决这个问题。在每个拆分中,分类器中的内置平衡器应该考虑任何不平衡。现在,它必须做多少欠采样将受到每个折叠的平衡的很大影响,但这应该通过多次拆分来抵消。如果你担心,你总是可以在做简历时使用更多的折叠,最多留一个。同样,我认为关键是您使用分类器明确设计 用于类不平衡。而且,标准建议适用,您可以随时尝试两种方式,看看结果如何!
    • 我很乐意提供帮助。我鼓励你尝试两种选择,平衡的和不平衡的,如果我错了,就回来对我大喊大叫,如果我离基地太远了,大写!
    猜你喜欢
    • 2012-02-01
    • 2017-03-26
    • 2015-04-20
    • 2019-01-29
    • 2020-10-31
    • 2013-03-11
    • 2014-08-07
    • 2018-03-10
    相关资源
    最近更新 更多