我尝试为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)
然后,我在 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'
,因为我想根据https://stackoverflow.com/a/31161137/1845408auc
中建议的误报率和真正率来计算分数。
有什么帮助吗?