班级不平衡-如何最大程度地减少误报?


11

我有一个具有二进制类属性的数据集。有623个类别为+1的实例(癌症阳性)和101,671个实例为-1的实例(癌症阴性)。

我尝试了各种算法(朴素贝叶斯,随机森林,AODE,C4.5),并且所有算法都有不可接受的假负比率。随机森林具有最高的总体预测准确度(99.5%)和最低的假阴性率,但仍错过了79%的阳性分类(即未能检测到79%的恶性肿瘤)。

有什么想法可以改善这种情况吗?

谢谢!


您可以看一下这个问题,在这个问题上我得到了有趣的答复。最好的问候
Michael Hooreman 2015年

Answers:


9

班级不平衡是一个非常普遍的问题。您可以对正类别进行过度采样(或对负类别进行欠采样),也可以添加类别权重。

在这种情况下要记住的另一件事是,准确性在这里并不是非常有用的指标。您可能会考虑AUCF1分数

更改决策阈值似乎很有吸引力,但显然会导致(在这种情况下可能会急剧增加)误报率(尽管在医学诊断中,FP的功能不如FN更好,如果测试的费用不是很高的话)。

这里提供了班级不平衡的情况下对选项的更深入分析。


3

即使实际上答案总是truefalse,您也可以使类属性不是标签,而是浮点数,即1.0和0.0(或100和0)。也就是说,您可以将其框架化为回归问题,而不是分类问题。

然后,预测输出将同样是该频谱上的数字,即概率而不是标签。您当前的实现实质上等效于阈值为0.5的回归模型。

通过这样的输出,您或您的客户可以定义一个可接受的阈值(例如0.3)。当然,届时会有更多的误报,但是对于某些应用(例如检测癌症)而言,这是最佳选择。

过采样(正值)或欠采样(负值)也是解决此问题的方法,但必须经过深思熟虑才能完成,可能会牺牲精度,在创建数据和训练后仍会牺牲控制权来移动阈值。


0

欠采样和过采样是一种技术,但我想我会指出一个常用的变体:

SMOTE:综合少数族裔过采样技术

在2002年的这篇论文中对此进行了介绍。这是摘要的摘录:

本文表明,与仅对多数类进行欠采样相比,我们对少数(异常)类进行过度采样和对多数(正常)类进行欠采样的方法的组合可以实现更好的分类器性能(在ROC空间中)。


您可以使用Scikit-Learn 的contrib模块中包含imbalanced-learnpackage,在Python中轻松使用它,并且必须单独安装。

imbalanced-learn是一个python软件包,提供了许多重采样技术,这些技术通常用于显示强烈的类间不平衡的数据集中。

该软件包包括组合过采样/欠采样的方法以及一组实用程序,以生成可流入Keras / Tensorflow的批量数据。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.