校准会提高roc得分吗?

时间:2019-01-23 01:43:22

标签: python machine-learning scikit-learn classification roc

我正在研究执行经过校准的分类器的效果,并且我读到,校准的目的是使分类器的预测更加“可靠”。 考虑到这一点,我认为校准的分类器将具有更高的分数(roc_auc)

当用sklearn y在Python中测试这个假设时,发现完全相反

请您解释一下:

校准会提高roc得分吗? (或任何指标)

如果不正确。进行校准有什么优点?

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])

enter image description here

1 个答案:

答案 0 :(得分:0)

TLDR:校准不应影响ROCAUC。

更长的答案:

ROCAUC是等级的量度(“我们是否将这些观察结果按最佳顺序排列?” )。但是,它不能确保良好的机率。

  

示例:如果我要对某人患癌症的可能性进行分类,   可能总是说一个介于95%和99%之间的数字,并且仍然完美   ROCAUC,只要我以正确的顺序做出了预测(   99%的人患有癌症,而95%的人没有。

     

在这里我们要说这个分类器(那时95%   不太可能患有癌症)具有良好的排名能力,但很差   已校准。

那我们该怎么办?我们可以应用monotonic转换,在不更改排名能力(因此不更改ROCAUC)的情况下对其进行修复。

  

示例:在我们的癌症示例中,我们可以说预测是   低于97.5%,则应减少90%;超过   他们将保留97.5%。这种真正的粗暴方法不会影响ROC,但会发送“最低”的预测值,使其接近于0,   通过Brier Score来衡量我们的校准水平。

太好了,现在我们可以变得聪明了!改善Brier分数的“最佳”单调曲线是什么?好吧,我们可以使用let Python deal with this scikit's calibration,从本质上为我们找到那条曲线。同样,它将保持等级顺序,从而改善校准,但不会更改ROCAUC。

太好了,因此ROCAUC不会移动。

还有...
在承认地球不会绕太阳运动之后引用伽利略。... “ E pur si muove” (但它仍在运动)

好的。现在事情变得时髦了。为了进行单调变换,一些接近的观测值(例如25%和25.5%)可能会被“压缩”在一起(例如0.7%和0.700000001%)。这可能会被四舍五入,导致预测变得束缚。然后,当我们计算ROCAUC时...它将会移动。

但是,出于所有实际目的,您可以期望“真实的” ROCAUC不会受到校准的影响,并且应该仅仅影响您用Brier Score测量的概率测量概率