我试图计算真阳性率和假阳性率,然后手动绘制roc曲线,因为我想检查我从sklearn.metrics roc_curve函数得到的roc曲线 . 但是fpr(在x轴上)与tpr(在y轴上)的roc曲线我得到的似乎是轴已经互换了 . 我正在做一个梯度下降二元分类器,有两个正面和负面的标签 . tpr,fpr计算的tensorflow代码的相关部分如下:
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()
我把这个情节附上了.2605459_
这当然不对 . 为什么会这样?我究竟做错了什么?
1 回答
我发现了代码的问题 . 而不是
if(pred_pos[i,1]>=n):
它应该是if(pred_pos[i,0]>=n):
(类似于pred_neg),然后它为fpr和tpr提供正确的值,tpr更大 . 这是因为数据的标记对于正数为[1,0],对于负数为[0,1] . 因此确定位位于预测阵列的第0位置 .