Я пытаюсь создать собственный счетчик для GridSearchCV
.Вот определение функции:
def custom_auc(ground_truth, probas_):
fpr, tpr, _ = roc_curve(ground_truth, probas_[:, 1], pos_label=1)
return auc(fpr, tpr)
Затем я использую его для создания пользовательского счетчика с именем my_auc
:
# to be standart sklearn's scorer
my_auc = make_scorer(custom_auc, greater_is_better=True, needs_proba=True)
И затем я использую этот пользовательский счетчик вthe GridSearchCV:
param_grid={'C': np.logspace(-2, 2, 40)}
clf = sklearn.model_selection.GridSearchCV(linear_model.LogisticRegression(),
param_grid = param_grid,
cv = 10,
scoring = my_auc,
verbose=False,
n_jobs=-1)
best_clf = clf.fit(X_train, y_train)
В строке, где установлена модель, выдается следующая ошибка:
IndexError: слишком много индексов для массива
Проблема в том, что вместо вероятностей прогнозы (1 или 0) передаются в custom_auc
.То есть probas
содержат прогнозы.
Я проверил с этим, и это сработало:
return sklearn.metrics.roc_auc_score(ground_truth, probas_)
Я предпочитаю свой собственный бомбардир вместо существующего 'roc_auc'
, потому что я хочу вычислить оценку auc
на основе falseположительные и истинно положительные показатели в соответствии с рекомендациями https://stackoverflow.com/a/31161137/1845408.
Любая помощь?