2016-08-10 15 views
0

私は以下のコードを使用してROC curveをプロット:scikit-learnを使用してバイナリ値のスコアのROC曲線をプロットする方法は?

fpr["micro"], tpr["micro"], _ = roc_curve(y_test.ravel(), y_score.ravel()) 

plt.plot(fpr["micro"], tpr["micro"], 
     label='ROC curve Fold1 (area = %0.2f)' % roc_auc1["micro"]) 

私は曲線のように見えるプロットをしたいが、何下の図に見られるように、私は、今、実現していますが、2本の直線で構成されてい行:

enter image description here

+0

さて、 'y_score'の値はどのように見えますか?たとえば、 'y_score'に2つの一意の値しか含まれていない場合、ROCカーブが表示されます。 –

+0

「y_score」は、「1000 * 2」の行列であり、「1000」はテストの数であり、「2」はクラスの数である。各列の値は「0」または「1」です。それは良性または悪性を意味する。 –

答えて

1

ROC曲線は、様々な差別を適用することにより、バイナリ値のラベルの組に連続値スコアのセットを比較する方法でありますスコアに対する閾値。

あなたのスコアがすでにバイナリであれば、任意のしきい値を適用する必要はありません - ちょうど例えば、直接ラベルにあなたのスコアを比較することにより、真陽性率と偽陽性率を計算する:

tpr = np.mean((y_score == 1) & (y_label == 1)) 
fpr = np.mean((y_score == 1) & (y_label == 0)) 

の場合そして、あなたはすべてのサンプルを分類threshold > 1場合

  • :あなたはTPR/FPR値の3つだけの可能なペアがあるので、あなたは3点のみを含む行で終わる、バイナリスコアのセットのためのROC曲線をプロットしてみてください負であるため、y私たちのFPRとTPRはともに0です。
  • threshold <= 0の場合、すべてのサンプルを肯定的なものに分類します。したがって、あなたのTPRはラベルセットの1分数に等しく、FPRはあなたのラベル。
  • 0 < threshold <= 1の場合、TPR値とFPR値は、上記で計算された標準TPR値とFPR値に相当します。

これだけです。

関連する問題