校准会提高 roc 分数吗?
Posted
技术标签:
【中文标题】校准会提高 roc 分数吗?【英文标题】:Does calibration improve roc score? 【发布时间】:2019-06-16 13:14:19 【问题描述】:我正在研究执行校准分类器的效果,我读到校准的目的是使分类器的预测更加“可靠”。 考虑到这一点,我认为经过校准的分类器会有更高的分数(roc_auc)
在 Python 中使用 sklearn y 测试这个假设时发现正好相反
请解释一下:
(或任何指标)
如果不是真的。执行校准有什么好处?
clf=SVC(probability=True).fit(X_train,y_train)
calibrated=CalibratedClassifierCV(clf,cv=5,method='sigmoid').fit(X_train,y_train)
probs=clf.predict_proba(X_test)[:,1]
cal_probs=calibrated.predict_proba(X_test)[:,1]
plt.figure(figsize=(12,7))
names=['non-calibrated SVM','calibrated SVM']
for i,p in enumerate([probs,cal_probs]):
plt.subplot(1,2,i+1)
fpr,tpr,threshold=roc_curve(y_test,p)
plt.plot(fpr,tpr,label=nombre[i],marker='o')
plt.title(names[i]+ '\n' + 'ROC: '+ str(round(roc_auc_score(y_test,p),4)))
plt.plot([0,1],[0,1],color='red',linestyle='--')
plt.grid()
plt.tight_layout()
plt.xlim([0,1])
plt.ylim([0,1])
【问题讨论】:
@AI_Learning 你能帮我澄清这个问题吗?我真的很感激 您的问题中的“可靠”是什么意思?据我所知,校准不应该改变预测的等级,只改变它们的绝对值。因此,ROC 曲线应该完全相同,您看到的是不同训练程序的产物。 【参考方案1】:TLDR:校准不应影响 ROCAUC。
更长的答案:
ROCAUC 是排名的衡量标准(“我们是否将这些观察按最佳顺序排列?”)。但是,它并不能保证好的概率。
示例:如果我要对某人患癌症的可能性进行分类,我 可能总是说一个介于 95% 和 99% 之间的数字,并且仍然完美 ROCAUC,只要我的预测顺序正确( 99%s 患有癌症,而 95%s 没有)。
在这里我们会说这个分类器(即 95% when then 是 不太可能得癌症)有很好的排名能力,但很差 已校准。
那么我们能做些什么呢?我们可以应用monotonic 转换,在不改变排名能力的情况下修复它(因此不改变 ROCAUC)。
示例:在我们的癌症示例中,我们可以说预测是 低于 97.5% 应减少 90%,当超过 97.5% 他们会被保留。这种非常粗鲁的方法不会影响 ROC,但会将“最低”预测发送到接近 0, 改进我们的校准,由Brier Score 衡量。
太好了,现在我们可以变聪明了!提高 Brier 分数的“最佳”单调曲线是什么?好吧,我们可以通过使用scikit's calibration 来let Python deal with this,它基本上为我们找到了这条曲线。同样,它将改进校准,但不会改变 ROCAUC,因为等级顺序保持不变。
太好了,所以 ROCAUC 不动。
然而…… 在承认地球不绕太阳转后引用伽利略的话……“E pur si muove” (但它仍在运动)
好的。现在事情变得很时髦。为了进行单调变换,一些接近的观察值(例如 25% 和 25.5%)可能会被“挤压”在一起(例如 0.7% 和 0.700000001%)。这可能是四舍五入的,导致预测变得平庸。然后,当我们计算 ROCAUC 时……它会移动。
但是,出于所有实际目的,您可以预期“真实的”ROCAUC 不会受到校准的影响,它只会影响您测量概率的能力,如 Brier Score 所测量的那样
【讨论】:
以上是关于校准会提高 roc 分数吗?的主要内容,如果未能解决你的问题,请参考以下文章