云走雾走走行程,救苦救难救灾星

有求必应,出古洞四海扬名,在深山修真养性

ROC曲线绘制原理即AUC意义详解

ROC曲线绘制原理

ROC曲线常常用来判定一个分类器的分类效果,想要探究ROC曲线的绘制原理,首先要弄清楚以下几个概念。

在一个分类任务中,样品往往是要分为两类。比如“有病”vs“没病”、“男人”vs“女人”。而往往我们的分类器的分类效果并没有那么好,所以会出现分错的情况。根据这些错分的样品数量,我们得到一个概念——假阳性率(FPR):

与之对应的是真阳性率(TPR):

那么所谓ROC曲线,便是在不同阈值下,由TPR和FPR所构成的图像了。

这个时候你肯定还是看不懂,因为你看得懂就不会翻到我这篇文章了…(酸里酸气)

ok,我从一个分类问题开始,一步步的绘制ROC曲线。

这里呢,通过你选定的超平面分类算法,将两类点成功分类。其中红色的点为阳性,绿色的点为阴性。
可以看到这条超平面的分类效果是很棒的,没有分类错误的现象。
而超平面的公式是

所以你可以利用得出的W来为每个点算出一个值,具体数值已经在图片中标出。得数的绝对值越大,证明离超平面越远,分类越清晰。

如果你理解不了加黑字体的意思,我还有下一个版本的:

通过分类算法找到了一条“分类用的线”,并且把每个点到这条线的距离都标在了图片上,距离这条线越远,证明分类正确的把握越大。

那么ROC曲线是怎么画的呢?

把握最大的点开始(在分类线最上方的点),不断的将点划入阳类,同时计算真阳性率(TPR)和假阳性率(FPR)
注:这里是从点的值为负数开始,也就是线的上方开始不断的将点划入阳类

为了方便下文理解,重新放进这张图

最开始呢,我们把点(1,4)划入阳性集,此时a=1,b=0,真实阳性个数(T)=3,真实阴性个数(F)=3
那么真阳性率为/1/3,假阳性率为0

之后我们把(1,3)划入阳性集,此时a=2,b=0,真实阳性个数(T)=3,真实阴性个数(F)=3
那么真阳性率为/2/3,假阳性率为0

之后我们把(1,2)划入阳性集,此时a=3,b=0,真实阳性个数(T)=3,真实阴性个数(F)=3
那么真阳性率为1,假阳性率为0

之后我们把(2,1)划入阳性集,此时a=3,b=1,真实阳性个数(T)=3,真实阴性个数(F)=3
那么真阳性率为1,假阳性率为1/3
注:从这里开始,将阴性点划入阳性集,出现假阳性

之后我们把(3,1)划入阳性集,此时a=3,b=2,真实阳性个数(T)=3,真实阴性个数(F)=3
那么真阳性率为1,假阳性率为2/3

之后我们把(3,1)划入阳性集,此时a=3,b=3,真实阳性个数(T)=3,真实阴性个数(F)=3
那么真阳性率为1,假阳性率为1

通过将不同点划入阳性集所得到的真阳性率和假阳性率,就可以绘制ROC曲线啦!

建议用笔自己画一画!!!!

好嘞,现在开始说一下这个ROC的特点,通过上述步骤可以看出来,每划入一个点到阳性集,都会使得 a增大 1 (判断正确——真阳性数量增加),或b增大1(判断错误——假阳性数量增加)。当a增大时,曲线会向上生长一小段,当b增大时图像会向右生长一小段。所以ROC的特点就是只能向上或是向右生长,不能向下向左生长!

那么问题来了,所谓的AUC是什么?为什么AUC越大表示分类效果越好?

AUC的意义

AUC即为ROC曲线下的面积。由于真阳性率和假阳性率的范围都是[0,1],所以AUC最大值为1。

上述的ROC曲线的AUC是1,证明分类效果非常棒。

但是请想一想,如果我们的数据如下图所示:

会发生什么?

他会造成真阳性率没有到达1的时候,假阳性率大于0。换句话说,他会让曲线还没有生长到最高处的时候,右拐,这样AUC就不会达到1.。而当判断错误的点(即假阳性点)离分类线越远,这种右拐现象越早发生,曲线下面积AUC就越小,而右拐现象发生的越晚AUC面积就越大

如果离分类线很远的点还被分类错了(AUC相对较小),即分类正确的把握很大的点被分错了,那么说明我们的分类算法或是分类特征是有问题的。如果离线很近的点被分错了(AUC相对较大),即分类正确的把握很小的点被分错了,那只能说数据有问题(笑)或者这种问题是我们可以接受的。

我们当然希望分类错误的点尽可能的靠近分类线,这样就可以说是数据的问题而不是算法的问题(笑)。这就是为什么AUC越大,说明分类效果越好。

如果你对我上述说明充分理解,那么请看以下叙述
通过将点到分类线的距离排序,所得的对应标签排序:
AUC1 ----> a,a,a,a,a,b,b,b,b,b

AUC2-----> a,a,a,a,b,a,b,b,b,b

AUC3----->a,b,a,a,a,a,b,b,b,b

有AUC1>AUC2>AUC3

同时ROC曲线还特别适合我们样本点分类不均的适合衡量分类器的效能

这里算是介绍完了ROC和AUC。
就说到这里啦!有帮助的话帮忙点个赞哦!!

ROC曲线绘制原理即AUC的意义详解相关推荐

  1. 偏AUC(partial AUC)或者部分AUC是什么?R语言使用pROC包绘制ROC曲线并定义偏AUC(partial AUC):分别聚焦特异度、敏感度角度

    偏AUC(partial AUC)或者部分AUC是什么?R语言使用pROC包绘制ROC曲线并定义偏AUC(partial AUC):分别聚焦特异度.敏感度角度 目录

  2. 超详细的ROC曲线绘制教程

    ROC曲线是临床中常用的统计分析之一,R中可以绘制ROC曲线的包也有很多,pROC包就是其中的佼佼者. pROC包可以计算AUC和95%置信区间,可以可视化.平滑和比较ROC曲线.下面是pROC包中的 ...

  3. 基于逻辑回归的癌症分类预测-良/恶性乳腺癌肿瘤预测及ROC曲线绘制

    逻辑回归 逻辑回归(Logistic Regression)是机器学习中的一种分类模型,逻辑回归是一种分类算法,虽然名字中带有回归.由于算法的简单和高效,在实际中应用非常广泛.逻辑回归是解决二分类问题 ...

  4. python 将多个模型的ROC曲线绘制在一张图里(含图例)

    一. 多条ROC曲线绘制函数 def multi_models_roc(names, sampling_methods, colors, X_test, y_test, save=True, dpin ...

  5. 多分类问题的ROC曲线绘制

    多分类问题的ROC曲线绘制 目录 多分类问题的ROC曲线绘制 #roc曲线 (1)ROC曲线图中的四个点

  6. matlab roc曲线,MATLAB画ROC曲线,及计算AUC值

    标签: 根据决策值和真实标签画ROC曲线,同时计算AUC的值 function auc = roc_curve(deci,label_y) %%deci=wx+b, label_y, true lab ...

  7. r roc曲线 语言_R语言系列6:生存分析中多重时间依赖性ROC曲线绘制 timeROC

    上一篇文章,我们讲到R语言实现Cox回归生存预测模型构建,以及如何将Logistic回归中,多条ROC曲线绘制在一个图里 今天主要围绕生存分析中,预测模型验证部分,如何将多条time-depend e ...

  8. roc曲线spss怎么做_SPSS单因素ROC曲线及多因素联合诊断ROC曲线绘制(原创手把手) - 医学统计和生物统计讨论版 -丁香园论坛...

    最近被好几个师弟师妹问到ROC曲线的绘制,尤其是多因素联合诊断ROC曲线的绘制(如下图这样的怎么做),所以干脆好好总结一下: 一.单因素ROC曲线 其实这个最简单,估计很多人也会,我知道的有两种办法, ...

  9. matlab计算prc曲线auc面积,MATLAB画ROC曲线,及计算AUC值

    根据决策值和真实标签画ROC曲线,同时计算AUC的值 步骤: 根据决策值和真实标签画ROC曲线,同时计算AUC的值: 计算算法的决策函数值deci 根据决策函数值deci对真实标签y进行降序排序,得到 ...

最新文章

  1. 读完这本书,我做了一个APP
  2. matlab2ask和2psk仿真实验代码
  3. 转贴 CxImage类库使用说明
  4. 【BZOJ-2938】病毒 Trie图 + 拓扑排序
  5. ORA-12516 TNS监听程序找不到符合协议堆栈要求的可用处理程序--解决方法
  6. Caffe + Ubuntu 14.04 64bit + CUDA6.5 + 无GPU 配置
  7. 有哪些wordpress企业网站主题推荐?
  8. 漳州帷博计算机科技,福建省漳州市芗城中学高二6月月考语文试题 含答案(11页)-原创力文档...
  9. linux连ftp超时,ftp上传超时的一种解决方案
  10. kafka sasl_ssl配置
  11. 【Python网络编程】爬取百度贴吧、小说内容、豆瓣小说、Ajax爬微博、多线程爬淘宝
  12. Mac安装photoshopcs6
  13. 实时时间(24小时制)
  14. python脚本一键抓考试资料网答案
  15. pytorch学习之图片处理
  16. CSS3 - 使用弹性盒子(Flex Box)实现完美居中、栅格系统及响应式布局
  17. 自主小型Web服务器实现——TinyHttp
  18. 微信支付之Native支付H5支付JSAPI支付退款
  19. 双系统安装红旗linux,win7与红旗Linux7.0双系统安装的方法
  20. C语言复习----------指针

热门文章

  1. Python开发系列课程(12) - 图形用户界面和游戏开发
  2. PHP实现RSA签名和验签
  3. TransparentBlt
  4. android拍照图片如何存储空间不足,手机照相显示内存不足怎么办 解决方法【详解】...
  5. 软件开发新人如何高效解决BUG
  6. 如何通过对范德蒙德行列式的学习来领悟数学思维
  7. Linux虚拟网络基础——Firewall和mangle
  8. addslashes php,PHP关于反斜杠处理函数addslashes()和stripslashes()的用法 - YangJunwei
  9. 利用java发送短信
  10. 数据结构--二叉树遍历(详细过程)