不平衡的类——如何最小化假阴性?

数据挖掘 分类 随机森林 决策树 阶级失衡
2021-09-23 04:25:22

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

我尝试了各种算法(朴素贝叶斯、随机森林、AODE、C4.5),它们都有不可接受的假阴性率。随机森林具有最高的总体预测准确率(99.5%)和最低的假阴性率,但仍然漏掉了 79% 的阳性类别(即未能检测到 79% 的恶性肿瘤)。

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

谢谢!

3个回答

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

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

更改您的决策阈值似乎很有吸引力,但显然会导致(在这种情况下可能会急剧)增加误报(尽管在医疗诊断的情况下,如果测试不是过于昂贵,FP 可能不如 FN 糟糕)。

此处提供了对类别不平衡情况下的选项的更深入分析

即使现实中的答案总是trueor false,您也可以让您的类属性不是标签而是浮点数,即 1.0 和 0.0(或 100 和 0)。也就是说,您可以将其框定为回归问题,而不是分类问题。

那么预测的输出也将是该频谱上的数字,即概率而不是标签。您当前的实现基本上等同于阈值为 0.5 的回归模型。

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

过采样(阳性)或欠采样(阴性)也是解决此问题的方法,但必须深思熟虑,会牺牲准确性,并且在创建数据和训练后仍然会牺牲控制来移动阈值。

已经提到过采样和过采样作为一种技术,但我想我会指出一个常用的变体:

SMOTE:合成少数过采样技术

于 2002 年在本文中提出。这是摘要中的一个片段:

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


你可以很容易地在 Python 中使用它,使用package imbalanced-learn它包含在 Scikit-Learn 的contrib模块中,必须单独安装。

不平衡学习是一个 python 包,提供了许多数据集中常用的重采样技术,显示出严重的类间不平衡。

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