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.

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Typescript教程_安装typescript

    Typescript教程_安装typescript前言由于最近在使用vue3写项目,使用vue3的前提就是要学习TypeScript,TypeScript算是JavaScript的升级版,TypeScript包含JavaScript和自己的一些特性

  • 手把手教你在Linux环境下安装Python3「建议收藏」

    在上一篇文章《手把手教你启用Win10的Linux子系统(超详细)》我们已经学了如何在Win10环境下装Linux子系统了,那么这一篇文章我们将学习如何在该Linux系统下安装Python3。首先是按Win+R键调出cmd命令窗口,然后输入输入bash指令进入Ubuntu系统,接着就可以进入正式的安装过程了。第一步、下载Python3输入下载命令:wgethttps://w…

  • Redis客户端中文乱码[通俗易懂]

    Redis客户端中文乱码[通俗易懂]Redis客户端中文乱码$redis-cliredis127.0.0.1:6379>set’name”中文’OKredis127.0.0.1:6379>get’name’"\xd6\xd0\xce\xc4"redis127.0.0.1:6379>客户端查看乱码,这个情况我们只要将修改客户端命令行就可以。redis-cli –raw$r…

  • 局域网组建与维护期末考试题_局域网聊天程序java报告

    局域网组建与维护期末考试题_局域网聊天程序java报告局域网的组建与维护》学科期中测试题2014年秋季学期13级《局域网的组建与维护》期中测试题班别_____________姓名_____________成绩________________一、填空题(每空2分,共20分)1、计算机网络按地理位置分,可分为广域网、城域网、_局域网___。2、网线制作中,若采用T568B标准,则8针配线线序依次是白橙、橙、白绿_____蓝、白蓝、绿、白棕、棕3、两头都采…

    2022年10月29日
  • 认识和使用COleVariant

    认识和使用COleVariant有时候会用到COleVariant类型数据.比如在CDaoRecordset::SetFieldValue()和GetFieldValue()中. 

  • tikv和tidb_tidb优缺点

    tikv和tidb_tidb优缺点概述:TiKV最底层使用的是RocksDB做为持久化存储,所以TiKV的很多性能相关的参数都是与RocksDB相关的。TiKV使用了两个RocksDB实例,默认RocksDB实例存储KV数据,RaftRocksDB实例(简称RaftDB)存储Raft数据。TiKV使用了RocksDB的 ColumnFamilies 特性。 默认Rock…

发表回复

您的电子邮箱地址不会被公开。

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