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_) 

https://stackoverflow.com/a/31161137/1845408で推奨されているように、偽陽性率と真陽性率に基づい'roc_auc'てスコアを計算したいので、既存のスコアラーではなく独自のスコアラーを好みます。auc

何か助けはありますか?

4

0 に答える 0