AUC值越大_模型评价——准确率、精确率与召回率与F值、宏平均与微平均、ROC曲线与AUC值...-程序员宅基地

技术标签: AUC值越大  预测评价系统  

183e0f78df932e09bceb5323c75a56d5.png

在上一篇文章中(baiziyu:模型评价——训练误差与测试误差、过拟合与欠拟合、混淆矩阵)主要介绍了模型评价涉及的基本概念,本节给出一些常用的评价指标。这些指标大致可以分为三类,第一大类是普通的准确率评价指标,它给出了模型在验证集或测试集上的一个大致准确性,在sklearn中可以通过调用模型实例的score方法获得。第二大类是精确率与召回率以及宏平均与微平均。这部分指标在一般的论文实验部分都会使用。它们比起准确率能更精细地描述模型效果。并且这些指标也是信息检索中常用的指标。在sklearn中可以通过classification_report方法获得这些指标,该方法会给出每一个类别的三个具体指标,使我们能更清晰地了解系统在哪一个类别上效果比较好,在哪一个类别上还需要进行分析改进。第三大类是ROC曲线与AUC值,这两个指标主要作为不平衡分类的评价指标。当然第二大类中涉及的指标也会作为不平衡分类的可选评价指标。第三大类由于涉及作图,因此大家要拿出一点点耐心,仔细琢磨一下图线各关键点的意义,必要时可以先自己手算一下。

为了定义指标,我们引入上一篇文章中的混淆矩阵。这里以二分类为例

c05bc66313bd5db90b12f1043b43afea.png

准确率

  • 准确率

从计算公式,我们可以看到它计算的是整体的平均准确性。对于不平衡分类,准确率并不是一个好的衡量指标。这是因为一个将所有文档都不归于小类的分类器会获得很高的准确率,但是这显然并不能说明系统实际的准确性。因此对于不平衡分类来说,精确率、召回率和F值才是更好的衡量指标。

精确率、召回率、F值

  • 精确率

度量分类器对某一类别预测结果的准确性,对所有类别求和取均值后可以得到整体精确率。

  • 召回率

度量分类器对某一类别预测结果的覆盖面,对所有类别求和取均值后可以得到整体覆盖面。

  • F值

度量分类器对某一个类别预测结果的精确性和覆盖面。它是精确率和召回率的调和平均值。

宏平均与微平均

当评价多类目分类器的效果时,还经常采用宏平均和微平均两个度量方法。下表以两个类别为例说明计算方法。

e5d848c8dc8570278a7d66762f01370f.png
  • 宏平均

度量常见类效果

  • 微平均

度量稀有类效果

在sklearn中使用classification_report计算上边提到的5个指标的时候,需要说明一下类别名称和类别标记的对应关系,因此这里直接把示例代码列出了。

>>> y_true = [-1, 0, 1, 1, -1] # 实际类别值
>>> y_pred = [-1, -1, 1, 0, -1] # 预测类别值
>>> from sklearn.metrics import classification_report
>>> target_names = ['class 0', 'class 1', 'class 2']
>>> print(classification_report(y_true, y_pred, target_names=target_names))
              precision    recall  f1-score   support

     class 0       0.67      1.00      0.80         2
     class 1       0.00      0.00      0.00         1
     class 2       1.00      0.50      0.67         2

   micro avg       0.60      0.60      0.60         5
   macro avg       0.56      0.50      0.49         5
weighted avg       0.67      0.60      0.59         5

classification_report中target_names列表中的类别名称依次对应的是预测值去重升序排列后对应的类别整数值。因此’class 0’对应的类别是-1,’class 1’对应的类别是0,’class 2’对应的类别是1。

ROC曲线与AUC值

ROC曲线和AUC值是处理不平衡分类问题的评价方法。显示分类器真正率tpr和假正率fpr之间折中的一种图形化方法(fpr为横坐标,tpr为纵坐标)。真正率和假正率的定义将在下边介绍。一个好的分类模型的ROC曲线应尽可能靠近面积为1的正方形的左上角。AUC值是ROC曲线下的面积。AUC值越大,分类器效果越好。

  • 真正率

  • 假正率

介绍了真正率和假真率以及ROC曲线后,你应该能回答下边两个问题了。

问题1 一个随机预测正、负类别的分类器的ROC曲线是什么样的?

答:是连接(0,0)点和(1,1)点之间的对角线。

问题2 ROC曲线上的每一个点都对应于一个分类器归纳的模型。那么把每个实例都预测为正类的模型所对应的点的坐标是什么呢?把每个实例都预测为负类的模型所对应的点的坐标是什么呢?一个理想的分类模型所对应的点的坐标是什么呢?

答:TPR=1,FPR=1的点对应的模型为把每个实例都预测为正类。TPR=0,FPR=0的点对应的模型为把每个实例都预测为负类。TPR=1,FPR=0的点对应的模型为理想模型。

  • ROC曲线的绘制过程

为了能够绘制ROC曲线,分类器需要能提供预测类别的得分值,用来对预测为正类的实例按得分生序排列,最不肯定的排在前,最肯定的排在后。需要注意的是,这个得分是预测为正类(稀有类)的分值,而不是正、负类中得分最高的值。具体绘制过程如下:

(1)让模型对每一个实例进行预测,记录正类得分,并按得分将实例升序排列。

(2)从排序列表中按顺序选择第1个得分最小的记录,从该记录开始到列表结束的所有记录都被指定为正类,其他实例被指定为负类(此时显然所有实例都被指定为正类),计算混淆矩阵并计算TPR,FPR。此时,TPR=FPR=1。

(3) 从排序列表中选择下1个记录,从该记录开始到列表结束的所有记录都被指定为正类,其他实例指定为负类,计算混淆矩阵并计算TPR,FPR

(4) 重复步骤(3),直到列表中所有实例都被选择过。

(5) 以FPR为横轴,TPR为纵轴,描点绘制ROC曲线。

示例:

下表中,每一列表示一个实例,已经按照预测为正类的得分升序排列。第1行为实例的实际类别,第2行为实例被模型预测为正类的得分。请计算出第2行之后的各行表示的混淆矩阵元素值以及TPR、FPR值。

00f10e7f493a5ce94dbcc60725a96443.png

解:首先选择第1个实例,按照绘制过程的第(2)个步骤,此时所有实例都被指定为+,则比较表中第1行的实际类别,可以计算出TP=5, FP=5, TN=0, FN=0, TPR=1, FPR=1。将计算得到的值填入表中第1列相应位置。接着按照第(3)个步骤,选择第2个实例,此时从第2到第10的8个实例指定为正类,其余实例即第1个实例指定为负类,计算TP=4,FP=5,TN=0,FN=1,TPR=4/(4+1)=0.8, FPR=5/(5+0)=1。依次类推计算第3-8列的各行元素值。接下来便可以FPR为横轴,TPR为纵轴,描出表中给(fpr,tpr)点,绘制模型的ROC曲线。

d72fc767f3776bda33a3438eb1cc6346.png

示例代码

https://github.com/baiziyuandyufei/text_classification_tradition/blob/master/sklearn示例/sklearn-roc_curve和auc.ipynb​github.com

好了,今天的内容有些多就介绍到这里了。模型评价的全部内容都已介绍完毕,如果后续还有补充会再续补文章。接下来会用很快的时间把朴素贝叶斯,线性SVC,SGD Classifier写出来,这三个分类器的示例先不打算写呢,因为我觉得我们还是先把基本原理记清楚再去实践会好一些。后边在介绍了特征工程初步后会写3个文本分类的应用示例,分别是新闻文本分类,影评情感分类,英文垃圾邮件分类,3个应用示例都基于朴素贝叶斯,语言都是英语。朴素贝叶斯,线性SVC,SGD Classifier这三个分类器都是sklearn官网关于模型选择的推荐流图,我在另一篇文章(baiziyu:文本分类模型比较与选择)中介绍过,大家可以再回过头去温习一下。谢谢大家关注。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39637589/article/details/109903351

智能推荐

【Android】Retrofit入门详解-程序员宅基地

文章浏览阅读1.6k次,点赞23次,收藏2次。简介:大三学生党一枚!主攻Android开发,对于Web和后端均有了解。个人语录:取乎其上,得乎其中,取乎其中,得乎其下,以顶级态度写好一篇的博客。Retrofit入门一.Retrofit介绍二.Retrofit注解2.1 请求方法注解2.1.1 GET请求2.1.2 POST请求2.2 标记类注解2.2.1 FormUrlEncoded2.2.2 Multipart2.2.3 Streaming2.3 参数类注解2.3.1 Header和Headers2.3.2 Body2.3.3 Path2.3.4_retrofit

教你拷贝所有文件到指定文件夹_所有文件夹下文件的 拷贝怎么弄-程序员宅基地

文章浏览阅读1.9k次。在处理文件的时候,如何将文件、文件夹复制到指定文件夹之中呢?打开【文件批量改名高手】,在“文件批量管理任务”中,先点“添加文件”,将文件素材导入。选好一系列的复制选项,单击开始复制,等全部复制好了,提示“已完成XX%”然后可以任意右击一个文件夹路径,在显示出的下拉列表中,选择“打开文件夹”在“复制到的目标文件夹(目录)”中,导入文件夹,多个文件夹,一行一个。最后,即可看到文件、文件夹都复制到各个指定的文件夹之中一一显示着啦。导入后,在表格中我们就可以看到文件或文件夹的名称以及所排列的序号。..._所有文件夹下文件的 拷贝怎么弄

win10和linux双系统安装步骤(详细!)_怎么装双系统win10和linux-程序员宅基地

文章浏览阅读5k次,点赞11次,收藏42次。Windows10安装ubuntu双系统教程ubuntu分区方案_怎么装双系统win10和linux

从图的邻接表表示转换成邻接矩阵表示_typedef struct arcnode{int adjvex;-程序员宅基地

文章浏览阅读1.1k次。从图的邻接表表示转换成邻接矩阵表示typedef struct ArcNode{ int adjvex;//该弧指向的顶点的位置 struct ArcNode *next;//下一条弧的指针 int weight;//弧的权重} ArcNode;typedef struct{ VertexType data;//顶点信息 ArcNode *firstarc;} VNode,AdList[MAXSIZE];typedef struct{ int vexnum;//顶点数 int _typedef struct arcnode{int adjvex;

学好Python开发你一定会用到这30框架种(1)-程序员宅基地

文章浏览阅读635次,点赞18次,收藏26次。14、fabric是基于Python实现的SSH命令行工具,简化了SSH的应用程序部署及系统管理任务,它提供了系统基础的操作组件,可以实现本地或远程shell命令,包括命令执行,文件上传,下载及完整执行日志输出等功能。7、pycurl 是一个用C语言写的libcurl Python实现,功能强大,支持的协议有:FTP,HTTP,HTTPS,TELNET等,可以理解为Linux下curl命令功能的Python封装。Scipy是Python的科学计算库,对Numpy的功能进行了扩充,同时也有部分功能是重合的。

Ubuntu中anaconda图形化界面的使用_ubuntu安装anaconda后怎么运行图形化节目-程序员宅基地

文章浏览阅读4.9k次,点赞3次,收藏25次。看网上教程,跟着配置,然后装完anaconda之后,大家都继续安装pycharm,然后傻吊的以为Ubuntu下的anaconda是没有图形化界面的,只有win下面 装完anaconda之后,可以直接在jupyter下面写代码今天突然发现Ubuntu下anaconda也是有图像化界面的$ conda --version /* 查看版本 */$ conda create --name my_en..._ubuntu安装anaconda后怎么运行图形化节目

随便推点

openFOAM学习笔记(四)—— openFOAM中的List_openfoam list-程序员宅基地

文章浏览阅读3.2k次。又是一个很底层的部分,但是也非常重要_openfoam list

C++对象的JSON序列化与反序列化探索_c++对象 json 序列化和反序列化 库-程序员宅基地

文章浏览阅读1.7w次,点赞3次,收藏15次。一:背景作为一名C++开发人员,我一直很期待能够像C#与JAVA那样,可以轻松的进行对象的序列化与反序列化,但到目前为止,尚未找到相对完美的解决方案。本文旨在抛砖引玉,期待有更好的解决方案;同时向大家寻求帮助,解决本文中未解决的问题。 二:相关技术介绍本方案采用JsonCpp来做具体的JSON的读入与输出,再结合类成员变量的映射,最终实现对象的JSON序列化与反序列化。本文不再_c++对象 json 序列化和反序列化 库

linux x window 详解,王垠:详解Xwindow(插窗户)的工作原理-程序员宅基地

文章浏览阅读523次。该楼层疑似违规已被系统折叠隐藏此楼查看此楼(本文作者貌似是王垠,在某处扒拉出来的转载过来)Xwindow 是非常巧妙的设计,很多时候它在概念上比其它窗口系统先进,以至于经过很多年它仍然是工作站上的工业标准。许多其它窗口系统的概念都是从 Xwindow 学来的。Xwindow 可以说的东西太多了。下面只分辨一些容易混淆的概念,提出一些正确使用它的建议。分辨 X server 和 X client这..._整个插入的窗叫什么

AHAS arms调用链查询中,接口实际耗时和监听耗时差异在什么地方?_arms调用链路耗时看不懂-程序员宅基地

文章浏览阅读109次。监听耗时仅代表了 AHAS ARMS Listener(即调用链收集器)在收集并处理当前请求的调用信息时所需要的时间。它不包括网络传输、处理请求、执行操作、处理响应等其他阶段的时间,仅代表 Listener 所需的时间。通常这个时间会很短,只有几毫秒甚至更短。接口实际耗时包括了整个请求/响应周期中的所有时间,包括网络传输、处理请求、执行操作、处理响应等阶段消耗的时间。它代表了该请求在客户端发起到最终服务器响应完成所花费的总时间。_arms调用链路耗时看不懂

常见的Web应用的漏洞总结(原理、危害、防御)_web 应用中常见的漏洞及其危害有哪些-程序员宅基地

文章浏览阅读2.5k次。一、 SQL注入1.原理:SQL注入就是把SQL命令插入到Web表单然后提交到所在页面请求(查询字符串),从而达到欺骗服务器执行恶意的SQL命令。它是利用现在已有的应用程序,将SQL语句插入到数据库中执行,执行一些并非按照设计者意图的SQL语句。2.原因:根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入..._web 应用中常见的漏洞及其危害有哪些

离散数学——命题逻辑_离散数学命题逻辑-程序员宅基地

离散数学中的命题逻辑,包括命题的表示和联结词的运用,推理理论和常用的证明方法,如真值表法和直接证明法。还介绍了附加前提证明法或CP规则。