ROC与AUC曲线绘制
由于ROC曲线面积比较难求得,所以判断模型好坏一般使用AUC曲线
关于AUC曲线的绘制,西瓜书上写得比较学术,不太能理解,假设有这么一个样本集:
假设预测样本为20个,预测为正类的概率已经进行了排序,得分递减,画图步骤为:
(1) 在所排序的样本最左边,画一条线即 无 | 1 2 3 4 5 …,线左边的认为是正类,右边认为是负类,可以算出,TP(实际为正,预测为正)=0,FN(实际为正,预测为负)=10,TN(实际为负,预测为负)=10,FP(实际为负,预测为正)=0,故而TPR=0,FPR=0
(2) 在第一个样本后面,画一条线即 1 | 2 3 4 …,线左边的认为是正类,右边认为是负类,可以算出,TP(实际为正,预测为正)=1,FN(实际为正,预测为负)=9,TN(实际为负,预测为负)=10,FP(实际为负,预测为正)=0,故而TPR=0.1,FPR=0
(3) 在第二个样本后面,画一条线即 1 2| 3 4 …,线左边的认为是正类,右边认为是负类,可以算出,TP(实际为正,预测为正)=2,FN(实际为正,预测为负)=8,TN(实际为负,预测为负)=10,FP(实际为负,预测为正)=0,故而TPR=0.2,FPR=0
(4) 在第三个样本后面,画一条线即 1 2 3| 4 5…,线左边的认为是正类,右边认为是负类,可以算出,TP(实际为正,预测为正)=2,FN(实际为正,预测为负)=8,TN(实际为负,预测为负)=10,FP(实际为负,预测为正)=1,故而TPR=0.2,FPR=0.1
... ...
依次例推:起点一定为(0,0),终点一定为(1,1),由此即可画出AUC曲线
但这样做比较繁琐,可以总结规律为:
按照预测为正类的概率值由大到小排序,首先起点一定是(0,0),然后使用上述划线法进行计算,每次碰到一个预测为正的样本,则在Y方向加一个Y步长,否则在X方向加一个X步长,其中X和Y的步长,计算方法为X: 负类样本个数分之1,Y:正类样本个数分之1,如果是降序排列,则是减一个对应方向的步长即可。
代码部分:
import numpy as np import matplotlib.pyplot as plt from matplotlib.font_manager import FontPropertiesdef plotROC(predStrengths,classLabels):font = FontProperties(fname = r"c:\windows\fonts\simsun.ttc",size=14)cur=(1.0,1.0) #绘制光标位置ySum=0.0 #用于计算AUCnumPosClas=np.sum(np.array(classLabels)==1.0) #正类样本的个数yStep = 1/float(numPosClas) #Y轴步长xStep = 1/float(len(classLabels)-numPosClas) #X轴步长 sortedIndicies = predStrengths.argsort()fig =plt.figure()fig().clf()ax=plt.figure()for inddex in sortedIndicies.tolist()[0]:if classLabels[index]==1.0delX=0; delY = yStep #碰到一个正类,Y的步长减 1else:delX = xStep; delY=0 #碰到一个负类,X的步长减1ySum += cur[1] #每次cur[1]都可能变化了 #高度累加ax.plot([cur[0],cur[0]-delX],[cur[1],cur[1]-delY],c = 'b') #绘制ROCcur = (cur[0]-delX,cur[1]-delY) #更新绘制光标的位置ax.plot([0,1],[0,1],'b--')plt.title('ROC曲线',FontProperties =font)plt.xlabel('假正例率',FontProperties = font)plt.ylabel(('真正例率',FontProperties = font))ax.axis([0,1,0,1])print('AUC面积:',ySum*xStep) #计算AUCplt.show()
转载于:https://www.cnblogs.com/roscangjie/p/11173900.html
ROC与AUC曲线绘制相关推荐
- 机器学习:性能度量篇-Python利用鸢尾花数据绘制ROC和AUC曲线
文章目录 前言 一.ROC与AUC 1.ROC 2.AUC 二.代码实现 总结 前言 内容接上一篇机器学习:性能度量篇-Python利用鸢尾花数据绘制P-R曲线_fanstuck的博客-CSDN博客_ ...
- 二分类及多分类ROC和PR曲线绘制
目录 1.二分类曲线 1.1 二分类ROC曲线 1.2 二分类PR曲线 2.多分类曲线 2.1多分类ROC曲线 2.2 多分类PR曲线 前两天2022年第二届全国高校大数据竞赛已经落下帷幕,比赛中也用 ...
- roc与auc曲线的理解
roc:专业术语称为"受试者工作特征"(Receiver Operating Characteristic)曲线:它是真正例与假正例比值:首先后面两字"正例"就 ...
- roc曲线和auc_roc和auc曲线的初学者指南
roc曲线和auc 博客结构(Blog Structure) As can be seen in the title above, the purpose of this blog is to gai ...
- 模型评估指标_精准率、召回率、F1-score、ROC曲线、AUC曲线
一.分类结果混淆矩阵 1.T.F.P.N辨析 P(Positive).N(Negative)针对的是预测值的结果. P表示对样本的预测结果为正例, N表示对样本的预测结果为反例. T(True).F( ...
- ROC曲线绘制原理即AUC的意义详解
云走雾走走行程,救苦救难救灾星 有求必应,出古洞四海扬名,在深山修真养性 ROC曲线绘制原理即AUC意义详解 ROC曲线绘制原理 ROC曲线常常用来判定一个分类器的分类效果,想要探究ROC曲线的绘制原 ...
- 机器学习之支持向量机SVM之python实现ROC曲线绘制(二分类和多分类)
目录 一.ROC曲线 二.TP.FP.TN.FN 三. python绘制ROC曲线(二分类) 1.思路 2.关键代码 3.完整代码 四. python绘制ROC曲线(多分类) 五.参考文献 一.ROC ...
- 分类性能度量指标:准确性(AC)、敏感性(SE)、特异性(SP)、F1评分、ROC曲线、PR(Precision-Recall)曲线、AUC曲线,混淆曲线
一:比较容易理解的比喻 以糖尿病人的筛查为例.第一个钟形代表正常人,第二个钟形代表糖尿病人.理想中,如果正常人和糖尿病人的血糖范围完全没有重合就好了.这样我就把标准定在中间那个最低点.低于此点的,就是 ...
- 建模知识2: ROC、AUC、K-S曲线
1.混淆矩阵(confusion matrix) 一个二分问题,即将实例分成正类(positive)或负类(negative).对一个二分问题来说,会出现四种情况.如果一个实例是正类并且也被预测成正类 ...
最新文章
- 荣耀手表magic2更新鸿蒙时间表,荣耀手表2更新百种运动模式 618期间到手价799元起...
- 用两个栈(C++)实现插入排序
- boost::graph模块实现一个只读隐式加权图的简单示例的测试程序
- 《教你10分钟制作3D网游》视频吐槽
- python基础开发环境_Python基础教程,第一讲,开发环境搭建
- Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题
- [转载] java中数组的反射的探究
- java导出excel弹出下载框_JavaWeb导出Excel文件并弹出下载框
- mysql 线上修改参数_9.10、mysql进程、状态在线修改参数重要知识
- 数据中心降低运营成本战略解密
- 红黑树时间复杂度证明(O(lgn))
- 黎曼猜想能用计算机算吗,关于黎曼猜想的计算机验证
- 最基本财务基础知识,财务知识基础
- Stream流的常用方法以及代码练习
- 手机端页面的自适应设计的开发思路
- 在python中一个复数的虚部用i表示_以3为实部4为虚部,Python复数的表达形式为___________或________。_学小易找答案...
- MicroERP数据初始化SQL脚本
- .net平台项目案例集锦
- 【netcore】 ASP.NET Core 中间件
- 速看常用工控通讯接口协议大全
热门文章
- matting系列论文笔记(一):Deep Image Matting
- 软件生存周期及开发模型
- 专业知识感觉什么都会,面试官一问却回答不上来怎么办?
- 如何修改华为S5720交换机密码
- java keystore如何使用_java KeyStore 使用
- 电脑/笔记本重装系统“我们无法创建新的分区,也找不到现有的分区”问题解决
- 《认知觉醒》:第一章 大脑——一切问题的起源
- CSS鼠标指针样式详解,鼠标经过变小手(链接类型指针)提示可点击
- 物联网控制技术课内实验-NUAA-matlab2020a安装以及考试碎碎念
- CDN内容分发服务好最后一公里