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, чтобы помочь понять эту разницу.

Надеюсь это поможет!

Другие вопросы по тегам