Scikit-Learn: roc_auc_score
Я использую функцию roc_auc_score из scikit-learn для оценки характеристик моей модели. Как бы то ни было, я получаю различные значения независимо от того, использую ли я предиката () или предиката ()
p_pred = forest.predict_proba(x_test)
y_test_predicted= forest.predict(x_test)
fpr, tpr, _ = roc_curve(y_test, p_pred[:, 1])
roc_auc = auc(fpr, tpr)
roc_auc_score(y_test,y_test_predicted) # = 0.68
roc_auc_score(y_test, p_pred[:, 1]) # = 0.93
Не могли бы посоветовать, пожалуйста?
заранее спасибо
1 ответ
Сначала посмотрите на разницу между предсказанием и предсказанием. Первый прогнозирует класс для набора функций, а второй прогнозирует вероятности различных классов.
Вы видите эффект ошибки округления, который неявно присутствует в двоичном формате y_test_predicted. y_test_predicted состоит из 1 и 0, где p_pred состоит из значений с плавающей запятой от 0 до 1. Процедура roc_auc_score изменяет пороговое значение и генерирует истинную положительную оценку и ложную положительную оценку, поэтому оценка выглядит совершенно иначе.
Рассмотрим случай, когда:
y_test = [ 1, 0, 0, 1, 0, 1, 1]
p_pred = [.6,.4,.6,.9,.2,.7,.4]
y_test_predicted = [ 1, 0, 1, 1, 0, 1, 0]
Обратите внимание, что кривая ROC генерируется с учетом всех порогов отсечки. Теперь рассмотрим порог 0,65...
Случай p_pred дает:
TPR=0.5, FPR=0,
и случай y_test_predicted дает:
TPR=.75 FPR=.25.
Вы, вероятно, видите, что если эти две точки различны, то область под двумя кривыми также будет совершенно другой.
Но чтобы действительно понять это, я предлагаю взглянуть на сами кривые ROC, чтобы помочь понять эту разницу.
Надеюсь это поможет!