Оценка AUC для gridsearch cv of best_score_ отличается от auc_roc_score от лучшей модели gridsearch cv - PullRequest
0 голосов
/ 04 апреля 2019

Я выполнил сеточный поиск по логистической регрессии и установил оценку в 'roc_auc'.Grid_clf1.best_score_ дал мне auc 0,7557.После этого я хотел построить кривую ROC лучшей модели.Кривая ROC, которую я видел, имела AUC 0,50. Я вообще не понимаю этого.

Я изучил прогнозируемые вероятности и увидел, что все они равны 0,0 или 1,0.Следовательно, я думаю, что здесь что-то пошло не так, но я не могу найти, что это такое.

Мой код выглядит следующим образом для поиска по сетке cv:

clf1 = Pipeline([('RS', RobustScaler()), ('LR', 
     LogisticRegression(random_state=1, solver='saga'))])

params = {'LR__C': np.logspace(-3, 0, 5),
      'LR__penalty': ['l1']}

grid_clf1 = GridSearchCV(clf1, params, scoring='roc_auc', cv = 5, 
      n_jobs=-1)

grid_clf1.fit(X_train, y_train)
grid_clf1.best_estimator_
grid_clf1.best_score_

Так что для лучшей модели это AUC составило 0,7557.Затем, если я сам вычислю AUC для модели:

y_pred_proba = grid_clf1.best_estimator_.predict_probas(X_test)[::,1]

print(roc_auc_score(y_test, y_pred_proba))

Это даст мне AUC 0,50.

1 Ответ

1 голос
/ 04 апреля 2019

Похоже, что в вашем примере кода есть две проблемы:

  1. Вы сравниваете баллы ROC_AUC для разных наборов данных.Во время примерки используется набор поездов, и набор тестов используется, когда roc_auc_score называется
  2. . Оценка с перекрестной проверкой работает несколько иначе, чем простой вызов функции roc_auc_score.Его можно расширить до np.mean(cross_val_score(...))

Так что, если принять это во внимание, вы получите те же значения баллов.Вы можете использовать ноутбук colab в качестве справочного материала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...