【问题标题】:How to interpret almost perfect accuracy and AUC-ROC but zero f1-score, precision and recall如何解释几乎完美的准确率和 AUC-ROC 但 f1 分数、准确率和召回率为零
【发布时间】:2016-04-14 09:10:29
【问题描述】:

我正在训练 ML 逻辑分类器以使用 python scikit-learn 对两个类进行分类。它们处于极度不平衡的数据中(大约 14300:1)。我得到了几乎 100% 的准确率和 ROC-AUC,但准确率、召回率和 f1 得分为 0%。我知道准确度通常在非常不平衡的数据中没有用,但为什么 ROC-AUC 测量也接近完美?

from sklearn.metrics import roc_curve, auc

# Get ROC 
y_score = classifierUsed2.decision_function(X_test)
false_positive_rate, true_positive_rate, thresholds = roc_curve(y_test, y_score)
roc_auc = auc(false_positive_rate, true_positive_rate)
print 'AUC-'+'=',roc_auc

1= class1
0= class2
Class count:
0    199979
1        21

Accuracy: 0.99992
Classification report:
             precision    recall  f1-score   support

          0       1.00      1.00      1.00     99993
          1       0.00      0.00      0.00         7

avg / total       1.00      1.00      1.00    100000

Confusion matrix:
[[99992     1]
 [    7     0]]
AUC= 0.977116255281

上面使用逻辑回归,下面使用决策树,决策矩阵看起来几乎相同,但AUC却大不相同。

1= class1
0= class2
Class count:
0    199979
1        21
Accuracy: 0.99987
Classification report:
             precision    recall  f1-score   support

          0       1.00      1.00      1.00     99989
          1       0.00      0.00      0.00        11

avg / total       1.00      1.00      1.00    100000

Confusion matrix:
[[99987     2]
 [   11     0]]
AUC= 0.4999899989

【问题讨论】:

  • 你可能想给我们混淆矩阵。直觉上,我猜这是不可能的,但我现在没有时间做数学。
  • 感谢您的建议,我已经添加了代码和结果
  • 解释:你没有​​任何可预测性。您基本上没有第 1 类的示例,并且预测全部错误。你最好一直预测0
  • 是的,我明白了,但这会影响准确性和 AUC-ROC 测量吗?还是我的 AUC-ROC 计算错误?
  • 是的,你的模型准确率高,AUC高,你问的是这个吗?但那是因为您的测试集中几乎所有数据都是 0,而且您基本上只预测零。不,这并不表明您的模型有用。我试图给你一个直觉。比较始终预测为 0 的模型的 AUC 和准确度。显然这不是一个有用的模型。但它会得分更好。这是由于测试集的结构。获得一个平衡的测试集,事情就会变得更加清晰。

标签: machine-learning classification roc precision-recall


【解决方案1】:

必须了解 AUC ROC 与准确度/精度等“逐点”指标之间的关键区别。ROC 是阈值的函数。给定一个输出属于每个类的概率的模型(分类器),我们预测具有最高概率(支持)的类。但是,有时我们可以通过更改此规则并要求一个支持比另一个大 2 倍才能实际归类为给定类来获得更好的分数。 这通常适用于不平衡的数据集。这样,您实际上是在修改类的学习先验以更好地拟合您的数据。 ROC 着眼于“如果我将这个阈值更改为所有可能的值会发生什么”,然后 AUC ROC 计算这样一条曲线的积分。

因此:

  • 高 AUC ROC 与低 f1 或其他“点”指标,意味着 您的分类器目前做得不好,但是您可以找到它的分数实际上相当不错的阈值
  • 低 AUC ROC 和低 f1 或其他“点”指标,意味着您的分类器目前做得不好,即使拟合阈值也不会改变它
  • 高 AUC ROC 和高 f1 或其他“点”指标,意味着您的分类器目前做得不错,并且对于许多其他阈值值,它会做同样的事情
  • 低 AUC ROC 与高 f1 或其他“点”指标,这意味着 您的分类器目前做得不错,但是对于许多其他阈值值 - 它非常糟糕

【讨论】:

  • 什么是高或低 f-1 分数? 50% 是好还是坏?
  • 取决于手头的问题,但似乎不太好。 f1 是精度和召回率之间的调和平均值,因此它或多或少地转化为两者的比例(因为它总是在这两个值之间)。我想说的是,低于 0.6 的分数很少被接受。
  • 我做了一些欠采样,因为(1:1 的比率),精确度、召回率和 f-score 测量值显着提高(例如 f1 从 0.44 到 0.93),我想知道我应该依赖哪个结果更多?原始分布更类似于现实世界的分布,而欠采样是有道理的,但它与原始分布的距离不是太远以至于没有代表性吗?
  • 您无法衡量欠采样数据的指标。您只需 训练 重新采样 - 您 必须 测试真实(具有实际先验)的
  • 只要您的测试集足够大,可以代表实际数据 - 是的,您如何构建分类器并不重要。如果没有以任何方式使用测试数据,并且它足够大 - 这就是分类器强度的证据
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-29
  • 2018-11-25
  • 2021-02-22
  • 2022-12-17
  • 1970-01-01
  • 2023-02-10
  • 1970-01-01
相关资源
最近更新 更多