为什么两个模型的 ROC 值曲线下面积不同而准确率、精度、召回率、f1-score 和混淆矩阵相同

数据挖掘 机器学习 scikit-学习 逻辑回归 混淆矩阵
2022-02-27 06:18:19

我在完全相同的数据集上应用逻辑回归和支持向量机,其中 70% 的数据用于训练,30% 用于测试。两者的表现完全相同,具有相同的精度、召回率、f1-score 和混淆矩阵。两者的混淆矩阵和分类报告如下所示。

       [1180    0]
       [  17    0]]

         precision    recall  f1-score   support

   0       0.99      1.00      0.99      1180
   1       0.00      0.00      0.00        17

   accuracy                               0.99      1197
   macro avg          0.49      0.50      0.50      1197
   weighted avg       0.97      0.99      0.98      1197

我对两个模型都应用了 10 倍交叉验证,两者都达到了 98.57% 的相同平均准确率,都未能在所有 10 倍中实现任何真阳性,并且在 10- 中的每一个中都有相同数量的 TP、TN、FP、FN折叠

然而,问题是当我计算曲线值下的 roc 面积时,它们是不同的,如下所示:

Logistic Regression: 0.86
Support Vector Machines: 0.23

这些值表明逻辑回归与支持向量机相比要好得多,尽管混淆矩阵和分类报告是相同的我真的很困惑,因为所有其他结果都表明两个模型的性能相同?有人可以帮助为什么两者都获得不同的 roc 值而其他一切都相同。

2个回答

这些分数对我来说看起来很奇怪,但除此之外,您必须记住 F1、准确性、混淆矩阵等取决于所选阈值,而 AUC 与阈值无关(它是从 0 到 1 的所有阈值的积分)。

您的模型返回一些成为第 1 类成员的概率。如果您选择仅用“1”标记那些概率高于 99%(这是一个阈值)的模型,那么您将获得几乎 100% 的召回率和准确率接近 0%。

当您计算 ROC 时,您正在改变决策阈值,而混淆矩阵和基于它的指标使用默认阈值(逻辑回归的概率为 0.5,以及 SVM 的最大边距边界 [这是' t 本身就是概率的])。所以逻辑回归至少在较低的阈值下做了一些有意义的事情,而 SVM 继续做得很差。

逻辑回归模型没有做出正类预测可能只是由于默认阈值 0.5,而 SVM 的决策边界实际上并没有分隔任何正类测试点。

对于这样一个不平衡的数据集,有时 auROC 可能会产生误导:如果多数类中的许多“容易”识别为这样,那么 auROC 可能会相当高,即使其余的多数类和少数类都被彻底打乱了。(这是否“正确”取决于您的观点和上下文。)