假设我们有两个分类模型 M1 和 M2,它们在五个测试实例上进行评估。如何举例说明 M1 可以比 M2 具有更高的精度,同时 M2 的 ROC 曲线下面积 (AUC) 比 M1 更高?
我们如何证明一个模型可能比另一个模型具有更高的准确度,但同时 AUC 更低?
数据挖掘
机器学习
预测建模
准确性
2022-02-21 01:38:05
1个回答
通常,当您的课程不平衡时,可能会发生这种情况。假设您要预测这 5 个值:
y_test = [1,0,0,0,0]
并且您的模型 M1 和 M2 预测以下内容:
M1_pred = [0,0,0,0,0]
M2_pred = [1,0,0,1,1]
很明显,我们可以看到 M1 偏向于 0 类,得到 4/5 的正确结果(80% 的准确率!)。而第二个,只能得到 3/5 的正确值(60% 的准确率)。
然而,因为 AUC ROC 是由真阳性率和假阳性率来定义的,将它们结合起来,M2 分类器得到 75% 的 auc,而 M1 只有 50%,因为它没有通过唯一的一个阳性,从而惩罚最终得分。
尝试运行这个玩具示例:
from sklearn.metrics import accuracy_score
from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt
y_test = [1,0,0,0,0] #ground truth
M1_pred = [0,0,0,0,0] #predictions M1
M2_pred = [1,0,0,1,1] #predictions M2
#Calculate both accuracy scores
M1_acc = accuracy_score(y_test, M1_pred)
M2_acc = accuracy_score(y_test, M2_pred)
#Calculate both ROC AUC
fpr1, tpr1, _ = roc_curve(y_test, M1_pred)
roc_auc1 = auc(fpr1, tpr1)
fpr2, tpr2, _ = roc_curve(y_test, M2_pred)
roc_auc2 = auc(fpr2, tpr2)
#Plot both graphs
plt.figure(figsize = (12,6))
#Graph M1
plt.subplot(121)
lw = 2
plt.plot(fpr1, tpr1, color='darkorange',
lw=lw, label='ROC curve (area = %0.2f)\n ACC Score = %0.2f' % (roc_auc1, M1_acc))
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic ROC')
plt.legend(loc="lower right")
#Graph M2
plt.subplot(122)
plt.plot(fpr2, tpr2, color='darkorange',
lw=lw, label='ROC curve (area = %0.2f)\n ACC Score = %0.2f' % (roc_auc2, M2_acc))
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic ROC')
plt.legend(loc="lower right")
plt.show()
你会得到这样的东西:
