细致说明参考文章Python下使用sklearn绘制ROC曲线(超详细)
但是对原文中的代码关于 y_score的用法存疑,原文中直接把预测值作为y_score来用,但是y_score的解释是模型预测的类别概率值,希望大神指教。
针对原文中代码,做了以下几个调整:
1.将原类别值+1
我本来的类别是[0,1,0…,1]这样的组合,但是在调试过程中,发现始终会提示“UndefinedMetricWarning: No positive samples in y_true, true positive value should be meaningless
UndefinedMetricWarning)”,表示说样本中没有正样本。具体的我也没去深究原理,只是发现[1,2,1…,2]这样的组合不会报错。
2.将TensorFlow张量转为array
我代码本身是构造了BP神经网络来实现二分类识别,得到的结果是TensorFlow张量,首先是使用 y_pred = sess.run(y, feed_dict={x: X_train, y: Y_train, keep_prob: 1.0})将张量转为了array,然后再输入到roc绘图函数中进行处理。
def acu_curve(y_label, y_pre):
y_label = y_label + 1
y_pre = y_pre + 1
fpr, tpr, thersholds = roc_curve(y_label, y_pre, pos_label=2)
roc_auc = auc(fpr, tpr)
plt.plot(fpr, tpr, 'k--', label='ROC (area = {0:.2f})'.format(roc_auc), lw=2)
plt.xlim([-0.05, 1.05]) # 设置x、y轴的上下限,以免和边缘重合,更好的观察图像的整体
plt.ylim([-0.05, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate') # 可以使用中文,但需要导入一些库即字体
plt.title('ROC Curve')
plt.legend(loc="lower right")
plt.show()