ROC曲线的通俗理解

ROC曲线的通俗理解在准备机器学习导论课程考试的过程中,发现自己根据西瓜书上的讲解总是也理解不上去ROC曲线的含义。于是在网络上寻求答案,发现一篇讲解得不错的博客【1】,说得比西瓜书好很多,通俗易懂。这里说一下自己的感想和理解对于已经有数据标签的训练样本,可以得到它们的评分: 其中class一栏表示真实值,p为正例,n为反例,这20个样本中有10个正例10个反例;score一栏则是分类器给出的分类评分。一…

大家好,又见面了,我是你们的朋友全栈君。

在准备机器学习导论课程考试的过程中,发现自己根据西瓜书上的讲解总是也理解不上去ROC曲线的含义。于是在网络上寻求答案,发现一篇讲解得不错的博客【1】,说得比西瓜书好很多,通俗易懂。这里说一下自己的感想和理解对于已经有数据标签的训练样本,可以得到它们的评分:

 

ROC曲线的通俗理解

其中class一栏表示真实值,p为正例,n为反例,这20个样本中有10个正例10个反例;score一栏则是分类器给出的分类评分。一般的二分类的实现方法就是选择一个阈值,将大于这个阈值的样本认为是正例,小于这个阈值的样本认为是反例。于是,不妨对 样本4来看,如果将样本4的评分设置为分类阈值,被分类器为正例的样本有1 2 3 4,其中真正的正例样本有1 2 4,故其TPR=3/10=0.3,FPR=1/10=0.1(分母虽然数值一样但是意义不同,前面TPR的分母是样本总体中的真正例个数,后者是样本总体中的真反例个数)。接着不妨设置样本9的评分0.51作为阈值,那么样本1~9都会被分类器认为是正例样本,其中为真正例的有1 2 4 5 6 9共6个,所以TPR=6/10=0.6,FPR=3/10=0.3.如此这样,将1~20每个样本的评分均作为分类器的判定阈值,可以得到20组TPR和FPR的有序数对;然后不妨以TPR和FPR为两个坐标轴建立一个直角坐标系,就可以得到这样的图像:

ROC曲线的通俗理解

这样每一组图像在图中都会有一个坐标,可以连成一条折线。一般地我们希望分类器得到的分类结果是完全正确的,也就是正例样本全部都能够被检测出来,并且不会混入真反例样本,这个时候TPR->1且FPR->0,反应在图像上好的分类器的折线应该更加接近左上角。当样本足够多时,折线就近似为圆滑的曲线,类似于这个样子【2】:

 

ROC曲线的通俗理解

从这个图上看,分类器A的结果肯定比分类器B要好。这个就是AOC曲线以及它的含义,通过这样的分析理解,感到自己明白了很多。

 

附上绘图所使用的MATLAB程序:

%code type:MATLAB
%绘制ROC曲线,demo

clear all;
close all;
clc;

%测试样本数据
samples=[
    1,0.9;
    1,0.8;
    0,0.7;
    1,0.6;
    1,0.55;
    1,0.54;
    0,0.53;
    0,0.52;
    1,0.51;
    0,0.505;
    1,0.4;
    0,0.39;
    1,0.38;
    0,0.37;
    0,0.36;
    0,0.35;
    1,0.34;
    0,0.33;
    1,0.30;
    0,0.1];

%首先准备绘制ROC曲线
figure;
%开始计算TPR和FPR
tpr=zeros(20,1);
fpr=zeros(20,1);
%这里的i表示以第i个样本的评分作为分类阈值
for i=1:20
    %正例样本计数
    p_cnt=0;
    %这里的j表示在统计正例个数的时候,遍历到的样本的id
    for j=1:i
        %判断这个遍历到的样本是不是正例
        if(samples(j,1)==1)
            %是?计数器++
            p_cnt=p_cnt+1;
        end
    end
    
    %计算TPR FPR
    tpr(i)=p_cnt/10;    %(10)是表示样本总体中的真正例个数总数为10
    fpr(i)=(i-p_cnt)/10;    %这里的10则是样本总体中的真反例个数总数    
end

%计算完成之后需要做的事情就是……画点,连线
plot(fpr,tpr,'*b-');
xlabel('FPR');
ylabel('TPF');
title('ROC Curve');
text(fpr+0.02,tpr+0.02,num2str(samples(:,2)));

 

参考文献:

【1】dzl_ML.机器学习之分类器性能指标之ROC曲线、AUC值.博客园,https://www.cnblogs.com/dlml/p/4403482.html.20150408,20181105.

【2】Dengchao.博客园,ROC曲线.https://www.cnblogs.com/cdeng/p/3471527.html.20131212,20181105.

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145645.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MCMC采样_MCMC认证

    MCMC采样_MCMC认证MCMC(一)蒙特卡罗方法MCMC(二)马尔科夫链MCMC(三)MCMC采样和M-H采样MCMC(四)Gibbs采样在MCMC(三)MCMC采样和M-H采样中,我们讲到了M-H采样已经可以很好

    2022年8月5日
    6
  • Unity3D学习路线与学习经验分享[通俗易懂]

    Unity3D学习路线与学习经验分享[通俗易懂]Unity3D学习路线与学习经验分享//最后一次更新为2019.7.22日,更新了一些废掉的链接作者:15游02丁祺你好,这篇文档是我的导师孙老师(以下简称老孙)指名我书写给新手、初学者以及技能有些许缺陷的人的一篇经验分享的文档,当然如果你看到了这些文字,代表着你是一个有意愿或期望去学习这款软件的人。因人与人之间有很多的不同,以下我会尽我所能,通过不同切入点与角度,并根据以上人群的不同…

    2022年5月25日
    31
  • 阿里云大数据存储密集型实例d2s云服务器配置性能详解

    阿里云大数据存储密集型实例d2s云服务器配置性能详解阿里云大数据存储密集型实例d2s云服务器配置性能CPU、内存、适用场景、大数据存储密集型d2s实例规格族和优惠报价信息,InstanceTypes分享大数据存储密集型d2s实例详解:大数据存储密集型d2s实例规格族特性I/O优化实例支持ESSD云盘、SSD云盘和高效云盘实例配备大容量、高吞吐SATAHDD本地盘,辅以最大35Gbit/s实例间网络带宽支持在线更换坏盘,支持热插拔坏盘,避免导致实例停机处理器:2.5GHz主频的Intel®Xeon®Platinum8163(Sky.

    2022年5月2日
    55
  • 2021必看!java电子书合集,值得收藏![通俗易懂]

    2021必看!java电子书合集,值得收藏![通俗易懂]正文作为后端开发,日常操作数据库最常用的是写操作和读操作。读操作我们下边会讲,这个分类里我们主要来看看写操作时为什么会导致SQL变慢。刷脏页脏页的定义是这样的:内存数据页和磁盘数据页不一致时,那么称这个内存数据页为脏页。那为什么会出现脏页,刷脏页又怎么会导致SQL变慢呢?那就需要我们来看看写操作时的流程是什么样的。对于一条写操作的SQL来说,执行的过程中涉及到写日志,内存及同步磁盘这几种情况。这里要提到一个日志文件,那就是redolog,位于存储引擎层,用来存储物理日志。在写操

    2022年7月9日
    23
  • HBase开发: Java API 管理表

    HBase开发: Java API 管理表头歌(JavaAPI管理表)答案我看网上都没有这一关的答案,就自己写了一个。

    2022年7月16日
    12
  • mysql数据库中int类型的最大值_mysql自增主键最大值

    mysql数据库中int类型的最大值_mysql自增主键最大值1、mysql中int(11)中的11代表显示宽度整数列的显示宽度,与mysql需要用多少个字符来显示该列数值,与该整数需要的存储空间的大小都没有关系。比如,不管设定了显示宽度是多少个字符,bigint都要占用8个字节。a、int是整型,(11)是指显示字符的宽度,最大为255。b、int(11)是记录行数的id,插入10条记录,那么它就显示00000000001~~~00000000010。c…

    2022年9月3日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号