【发布时间】:2023-03-17 03:35:01
【问题描述】:
以下是我的问题的简要说明:
- 我正在执行监督学习 任务来训练二元 分类器。
- 我有一个具有大类不平衡分布的数据集:8 个负实例每个正实例。
- 我使用 f-measure(即特异性和灵敏度之间的调和平均值)来评估分类器的性能。
我绘制了几个分类器的 ROC 图,所有分类器的 AUC 都很好,这意味着分类很好。但是,当我测试分类器并计算 f 度量时,我得到的值非常低。我知道这个问题是由数据集的类偏斜引起的,到目前为止,我发现了两种解决方法:
- 通过为数据集的实例分配权重来采用成本敏感方法(参见post)
- 阈值化分类器返回的预测概率,以减少误报和误报的数量。
我选择了第一个选项,这解决了我的问题(f-measure 令人满意)。但是,现在,我的问题是:这些方法中哪一种更可取?又有什么区别?
P.S:我正在使用 Python 和 scikit-learn 库。
【问题讨论】:
-
这更像是一个统计问题而不是编程问题。目前还不清楚这些模型是如何构建的。你的数据集有多大?您是否使用了分层 CV,或者您如何确定您没有过度拟合您的模型(因此 F 值较低)?也就是说,一般而言,我会遵从 cost-sensitive,因为 thresholding 方法对于指定截止值(恕我直言)的用户更为主观。
-
我有 3000 个实例,是的,我确实使用了 10 倍分层 CV 来防止过度拟合。
-
我遇到了二进制分类问题,其中存在 97%/3% 的偏度。平衡训练用例的数量,大大提高了 3% 端的预测。我之前没有在我的分类器中尝试过阈值化。
-
可能有点晚了,但我们最近研究了这个问题并表明阈值处理效果更好,并且与 bagging ensemble 结合起来也更灵活。请参阅“Reviving Threshold-Moving:用于二进制和多类不平衡数据的简单插件 Bagging Ensemble”arxiv.org/abs/1606.08698。我希望这会有所帮助。
标签: python r machine-learning classification