のカスタムスコアラーを作成しようとしています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
何か助けはありますか?