GridSearchCV的自定义评分器不允许使用概率

时间:2019-07-03 14:31:35

标签: python machine-learning scikit-learn grid-search gridsearchcv

我尝试为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/1845408中所建议的假阳性率和真实阳性率来计算auc得分。

有帮助吗?

0 个答案:

没有答案