1

我尝试为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中建议的误报率和真正率来计算分数。

有什么帮助吗?

4

0 回答 0