4

したがって、サンプルの重み関数を使用していますが、デフォルトの sklearn スコアリング関数を使用してパフォーマンスを測定したくありません。

ここでは、文字列「roc_auc」を渡すことができ、auc を計算する必要があると書かれているようGridSearchCVですが、計算される auc は重み付けされた auc でしょうか、それとも単なるバニラ auc でしょうか?

4

1 に答える 1

4

オタクのスナイプをありがとう。

この問題をテストするために、バイナリ分類データセットを作成しました。

x y weight 
0 0   1
1 1   1
<repeated 25 times>
0 1   0
1 0   0
<repeated 25 times>

パイソンの使用:

X = np.array([[0], [1]] * 25 +  [[0], [1]] * 25)
y = np.array([ 0 ,  1 ] * 25 +  [ 1 ,  0 ] * 25)
w = np.array([ 1 ,  1 ] * 25 +  [ 0 ,  0 ] * 25)

このデータセットでは、サンプルの重みが存在する場合、モデルは非常によく適合し、対数損失が非常に少ないことがわかります。ウェイトが存在しない場合、損失は非常に大きくなります。

GridSearchCV次に、重みが使用されているかどうかを確認するために使用を構築できます。

clf = LogisticRegression(solver='newton-cg', C=100)
gs = GridSearchCV(clf, {},
                  fit_params={"sample_weight": w}, 
                  scoring="log_loss", cv=KFold(y.shape[0],10, shuffle=True))
gs.fit(X,y)
gs.grid_scores_

[mean: -2.68562, std: 0.68038, params: {}]

損失がかなり大きいことがわかります。これは、重みが使用されていないことを示しています。

これを修正するために scikit-learn にパッチを書きました。実験的なものと考えてください。https://github.com/scikit-learn/scikit-learn/compare/master...dmaust:master

パッチを適用した後、 を有効score_sample_weightにして前のテストを繰り返すと、考慮されている重みから予想される対数損失を確認できます。

gs.score_sample_weight=True
gs.fit(X,y)
gs.grid_scores_

[mean: -0.00486, std: 0.00016, params: {}]
于 2016-01-10T04:26:33.750 に答える