7

モデルのパフォーマンスを評価するために、scikit-learn の roc_auc_score 関数を使用しています。ただし、predict() または predict_proba() のどちらを使用しても、異なる値が得られます

p_pred = forest.predict_proba(x_test)
y_test_predicted= forest.predict(x_test)
fpr, tpr, _ = roc_curve(y_test, p_pred[:, 1])
roc_auc = auc(fpr, tpr)

roc_auc_score(y_test,y_test_predicted) # = 0.68
roc_auc_score(y_test, p_pred[:, 1])    # = 0.93

それについてアドバイスいただけますか?

前もって感謝します

4

1 に答える 1

8

まず、predict と predict_proba の違いを見てください。前者は特徴セットのクラスを予測し、後者はさまざまなクラスの確率を予測します。

y_test_predicted のバイナリ形式で暗示される丸め誤差の影響が見られます。y_test_predicted は 1 と 0 で構成され、p_pred は 0 と 1 の間の浮動小数点値で構成されます。roc_auc_score ルーチンはしきい値を変更し、真陽性率と偽陽性率を生成するため、スコアはかなり異なって見えます。

次の場合を考えてみましょう。

y_test           = [ 1, 0, 0, 1, 0, 1, 1]
p_pred           = [.6,.4,.6,.9,.2,.7,.4]
y_test_predicted = [ 1, 0, 1, 1, 0, 1, 0]

ROC 曲線は、すべてのカットオフしきい値を考慮して生成されることに注意してください。ここで、0.65 のしきい値を考えてみましょう...

p_pred の場合は次のようになります。

TPR=0.5, FPR=0, 

そして y_test_predicted ケースは以下を与えます:

TPR=.75 FPR=.25.  

これらの 2 つのポイントが異なる場合、2 つの曲線の下の領域もかなり異なることがわかるでしょう。

しかし、それを本当に理解するには、ROC 曲線自体を調べて、この違いを理解することをお勧めします。

お役に立てれば!

于 2015-06-04T01:55:20.600 に答える