2017-11-08 9 views
1

私は本当の正のレートと誤ったポジティブレートを計算していましたが、私はsklearnから得たrocカーブをチェックしたいので、 .metrics roc_curve関数。 しかし、fpr(x軸上)とtpr(y軸上)のroc曲線は軸が入れ替わったように見えます。 私はグラデーション降下バイナリクラシファイアを2つのラベルが正と負にしています。 TPRためtensorflowコードの関連部分、FPR計算を以下に示す:pythonのrocカーブのバイナリクラシファイアのTPRとFPRを計算する

prediction=tf.nn.softmax(tf.matmul(X,w)+b) 
pred_pos= prediction.eval(feed_dict={X: x_pos}) 
pred_neg= prediction.eval(feed_dict={X: x_neg}) 
tpr=[] 
fpr=[] 
for j in range(100): 
    pos=0 
    neg=0 
    n=j/100. 
    for i in range(0,len(pred_pos)): 
      if(pred_pos[i,1]>=n): 
       pos+=1 
      if(pred_neg[i,1]>=n): 
       neg+=1 
    tpr.append(pos/len(x_pos)) 
    fpr.append(neg/len(x_neg)) 

f= open('output.txt','wb') 
arr=np.array([fpr,tpr]) 
arr=arr.T   
np.savetxt(f,arr,fmt=['%e','%e'])  
f.close() 

I次いでFPR(X軸)とTPR(y軸)とのgnuplotを使用してテキストファイルからプロット、およびIよプロットを添付しています。 roc curve fpr vs tprこれは確かに正しくありません。なぜこれはそうですか?私は間違って何をしていますか?前もって感謝します!

+0

コードは合理的です。ポジティブとネガティブをどこかで交換したように見えます。ターミナルにtprとfprを出力して、tprが高いことを確認してください。そうであれば、グラフを描画するために問題がコード内になければなりません。また、 'arr = np.array([fpr、tpr])'にfprがあることにも注意してください。 – Stephen

+0

@Stephenご意見ありがとうございます。はい、私はそれを端末に出力しようとしました、そして、tprはfprよりも低いです。それでグラフが説明されます。しかし、私はcnnを含む別のネットワークで同じコードを試しました。 tprはfprより大きい。だから私はこの特定の問題の何が間違っているのだろうか – abhih1

答えて

0

私はコードの問題を発見しました。 if(pred_pos[i,1]>=n):の代わりに、if(pred_pos[i,0]>=n):(同様にpred_negの場合)、 である必要があります。次に、fprとtp​​rに適切な値が与えられ、tprは大きくなります。 データのラベル付けは、正の場合は[1,0]、ネガティブの場合は[0,1]として行われたためです。従って、決定ビットは予測配列の0番目の位置にあった。

関連する問題