Калибровка улучшает roc Score? - PullRequest
0 голосов
/ 23 января 2019

Я изучаю результаты выполнения калиброванного классификатора и читаю, что цель калибровки - сделать предсказание классификатора более «надежным». Имея это в виду, я думаю, что калиброванный классификатор будет иметь более высокий балл (roc_auc)

При проверке этой гипотезы в Python с помощью sklearn y обнаружена полная противоположность

Не могли бы вы объяснить:

Улучшает ли калибровка показатель 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 голосов
/ 16 мая 2019

TLDR: калибровка не должна влиять на ROCAUC.

Более длинный ответ:

ROCAUC является мерой ранга ( «мы поставили эти наблюдения в наилучшем возможном порядке?» ). Однако это не обеспечивает хороших вероятностей.

Пример: если я классифицирую вероятность того, что кто-то заболеет раком, я может всегда говорить число от 95% до 99%, и все же иметь идеальный ROCAUC, пока я делал свои прогнозы в правильном порядке ( У 99% был рак, у 95% нет).

Здесь мы бы сказали, что этот классификатор (который говорит, что 95%, когда маловероятно иметь рак) имеет хорошую способность ранжироваться, но плохо откалиброван.

Так что мы можем сделать? Мы можем применить монотонное преобразование, которое исправляет его без изменения ранговых способностей (следовательно, не изменяя ROCAUC).

Пример: в нашем примере с раком мы можем сказать, что предсказания до 97,5% они должны быть уменьшены на 90%, а когда они закончатся 97,5% они будут сохранены. Этот действительно грубый подход не повлияет на РПЦ, но отправит «самые низкие» прогнозы близко к 0, улучшая нашу калибровку, измеренную Brier Оценка .

Отлично, теперь мы можем стать умными! Какова «лучшая» монотонная кривая для улучшения нашего показателя Бриера? Ну, мы можем позволить Python справиться с этим , используя калибровку scikit , которая, по сути, находит эту кривую для нас. Опять же, это улучшит калибровку, но не изменит ROCAUC, поскольку поддерживается порядок рангов.

Отлично, поэтому РПЦЗ не двигается.

И еще ...
Процитирую Галилея после признания того, что Земля не движется вокруг Солнца ... "E pur si muove" (и все же она движется)

Ok. Теперь все становится фанк. Для выполнения монотонных преобразований некоторые наблюдения, которые были близки (например, 25% и 25,5%), могут быть "раздавлены" вместе (например, 0,7% и 0,700000001%). Это может быть округлено, в результате чего прогнозы становятся связанными. И потом, когда мы вычислим ROCAUC ... Это будет двигаться.

Однако во всех практических целях вы можете ожидать, что «реальный» ROCAUC не будет зависеть от калибровки, и что он должен просто влиять на вашу способность измерять вероятности, измеряемые Brier Score

...