11

给定一个平衡的数据集(两个类的大小相同),将其拟合到 SVM 模型中,我会产生高 AUC 值(~0.9)但准确度低(~0.5)。

我完全不知道为什么会发生这种情况,任何人都可以为我解释这个案例吗?

4

4 回答 4

8

我最近偶然发现了同样的问题。这是我自己想出来的——如果我错了,请告诉我。

在我们思考为什么 ROC 曲线下面积 (AUC) 可以高而准确度低之前,让我们先概括一下这些术语的含义。

对于不同的决策阈值(或预测截止值)t ,接收者操作特征(ROC) 曲线绘制了假阳性率 FPR( t ) 与真阳性率 TPR( t ) 的关系。

TPR和FPR定义如下:

TPR = TP / P = TP / (TP+FN) = number of true positives / number of positives
FPR = FP / N = FP / (FP+TN) = number of false positives / number of negatives

在 ROC 分析中,假设分类器可以简化为以下功能行为:

def classifier(observation, t):
    if score_function(observation) <= t: 
        observation belongs to the "negative" class A
    else:           
        observation belongs to the "positive" class B

将决策阈值t视为训练分类器时调整的自由参数。(并非所有分类器都有直接的参数化,但要知道坚持使用逻辑回归或简单阈值,对于这样的参数t有一个明显的选择。)在训练过程中,选择最佳阈值t*使得一些成本功能被最小化。

给定训练/测试数据,请注意参数t的任何选择都决定了哪些数据点是真阳性 (TP)、假阳性 (FP)、真阴性 (TN) 或假阴性 (FN)。因此,t的任何选择也决定了 FPR( t ) 和 TPR( t )。

所以我们已经看到了以下内容:ROC 曲线表示由决策阈值t参数化的曲线,其中 x = FPR( t ) 和 y = TPR( t ) 对于 t 的所有可能

得到的 ROC 曲线下的面积称为 AUC。它测量您的训练/测试数据,分类器如何区分来自“正”和“负”类的样本。一个完美分类器的 ROC 曲线将通过最优点 FPR( t* )=0 和 TPR( t* )=1,并产生 1 的 AUC。然而,随机分类器的 ROC 遵循对角线 FPR( t )=TPR ( t ),得出的 AUC 为 0.5。

最后,准确率定义为所有正确标记的案例与案例总数的比率:

accuracy = (TP+TN)/(Total number of cases) = (TP+TN)/(TP+FP+TN+FN)

那么怎么可能AUC大而准确率低呢?如果您的分类器以高假阴性率(或低数量的真阴性)为代价在正类(高 AUC)上实现了良好的性能,那么这可能会发生。

为什么训练过程导致分类器预测性能如此差的问题是另一个问题,并且特定于您的问题/数据和您使用的分类方法。

总之,ROC 分析告诉你一些关于正类样本与其他类的分离程度,而预测准确度暗示了你的分类器的实际性能。

于 2018-02-06T22:48:46.293 回答
2

我猜你在计算roc曲线时错过了阅读正确的课程......
这将解释准确度和(错误计算的)AUC

很容易看出,当用于比较两个分类器的 ROC 曲线交叉时,AUC 可能会产生误导。分类器 A 可能产生比 B 更高的 AUC,而 B 在您实际使用分类器的大多数阈值上表现更好。而事实上实证研究表明,普通分类器的ROC曲线交叉确实非常普遍。还有更深层的原因导致 AUC 不连贯,因此是不恰当的衡量标准(参见下面的参考资料)。

http://sandeeptata.blogspot.com/2015/04/on-dangers-of-auc.html

于 2016-07-15T04:46:11.697 回答
1

对这种行为的另一个简单解释是,您的模型实际上非常好 - 只是它的最终阈值使预测二元化是不好的。

我在二值图像分类任务中使用卷积神经网络遇到了这个问题。例如,假设您有 4 个样本,标签为 0,0,1,1。假设您的模型为这四个样本创建连续预测,如下所示:0.7、0.75、0.9 和 0.95。

我们认为这是一个很好的模型,因为高值 (> 0.8) 预测类别 1,而低值 (< 0.8) 预测类别 0。因此,ROC-AUC 将为 1。注意我如何使用 0.8 的阈值。但是,如果您对这些预测使用固定且选择不当的阈值,例如 0.5,这是我们有时会强制模型输出的阈值,那么所有 4 个样本预测都将是 1 类,从而导致 50% 的准确度。

请注意,大多数模型不是针对准确性进行优化,而是针对某种损失函数进行优化。在我的 CNN 中,只训练几个 epoch 就可以解决这个问题。

当您将连续模型输出转换为二进制预测时,请确保您知道自己在做什么。如果您不知道给定 ROC 曲线使用什么阈值,请查看 Youden 指数或找到代表 ROC 曲线中“最左上角”点的阈值。

于 2021-01-08T14:23:38.117 回答
0

如果每次都发生这种情况,则可能是您的模型不正确。从内核开始,您需要更改并尝试使用新集合的模型。每次查看混淆矩阵并检查TN和TP区域。该模型应该不足以检测其中之一。

于 2020-06-21T06:01:49.923 回答