sklearn绘制roc曲线二三事

本文详细介绍了如何在Python中使用sklearn库绘制ROC曲线,特别讨论了在遇到'UndefinedMetricWarning'错误时,如何通过调整类别标签和数据类型来解决。作者指出,y_score应为模型预测的类别概率值,而非直接的预测类别。在实践中,将类别值加1以及将TensorFlow张量转换为array是解决问题的有效方法。
摘要由CSDN通过智能技术生成

细致说明参考文章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()
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值