文章目录

  • 1. 最常见的性能度量 - 错误率与精度
  • 2. 查准率/查全率/F1
  • 3. ROC与AUC
  • 4. 代价敏感错误率与代价曲线

导语: 如何计算“测试误差”? 需要利用性能度量,例如:均方差,错误率等,即“测试误差”的一个评价标准。有了评估方法和性能度量,就可以计算出学习器的“测试误差”,但由于“测试误差”受到很多因素的影响,例如:算法随机性或测试集本身的选择。

预备知识: 何为泛化能力? 是指在利用训练集建立一个模型完成后, 该模型对于新的数据集 (或测试集)的一个适应能力, 有的模型在训练集中拟合的非常漂亮, 但是对于一个新的数据, 并不能很好的预测, 说明这样的模型泛化能力很差, 一般是过拟合的情况

性能度量(performance measure)是衡量模型泛化能力的评价标准,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果。

1. 最常见的性能度量 - 错误率与精度

  1. 在回归任务中,即预测连续值的问题,最常用的性能度量是“均方误差”(mean squared error),很多的经典算法都是采用了MSE作为评价函数。

  1. 在分类任务中,即预测离散值的问题,最常用的是错误率和精度,错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占样本总数的比例,易知:错误率+精度=1。

2. 查准率/查全率/F1

错误率和精度虽然常用,但不能满足所有的需求,例如:在推荐系统中,只关心推送给用户的内容用户是否感兴趣(即查准率),或者说所有用户感兴趣的内容推送出来了多少(即查全率)。因此,使用查准/查全率更适合描述这类问题。对于二分类问题,分类结果混淆矩阵与查准/查全率定义如下:

初次接触时,FN与FP很难正确的理解,按照惯性思维容易把FN理解成:False->Negtive,即将错的预测为错的,这样FN和TN就反了,后来找到一张图,描述得很详细,为方便理解,把这张图也贴在了下边:

正如天下没有免费的午餐(NFL),查准率和查全率是一对矛盾的度量。例如想让推送的内容尽可能用户全都感兴趣,那只能推送把握高的内容,这样就漏掉了一些用户感兴趣的内容,查全率就低了;如果想让用户感兴趣的内容都被推送,那只有将所有内容都推送上,宁可错杀一千,不可放过一个,这样查准率就很低了。

“P-R曲线”正是描述查准/查全率变化的曲线,P-R曲线定义如下:根据学习器的预测结果(一般为一个实值或概率)对测试样本进行排序,将最可能是“正例”的样本排在前面,最不可能是“正例”的排在后面,按此顺序逐个把样本作为“正例”进行预测,每次计算出当前的P值和R值,如下图所示:

P-R曲线如何评估呢?若一个学习器A的P-R曲线被另一个学习器B的P-R曲线完全包住,则称:B的性能优于A。若A和B的曲线发生了交叉,则谁的曲线下的面积大,谁的性能更优。但一般来说,曲线下的面积是很难进行估算的,所以衍生出了“平衡点”(Break-Event Point,简称BEP),即当P=R时的取值,平衡点的取值越高,性能更优。

P和R指标有时会出现矛盾的情况,这样就需要综合考虑他们,最常见的方法就是F-Measure,又称F-Score。F-Measure是P和R的加权调和平均,即:

特别地,当β=1时,也就是常见的F1度量,是P和R的调和平均,当F1较高时,模型的性能越好。

有时候会有多个二分类混淆矩阵,例如:多次训练或者在多个数据集上训练,那么估算全局性能的方法有两种,分为宏观和微观。简单理解,宏观就是先算出每个混淆矩阵的P值和R值,然后取得平均P值macro-P和平均R值macro-R,在算出Fβ或F1,而微观则是计算出混淆矩阵的平均TP、FP、TN、FN,接着进行计算P、R,进而求出Fβ或F1。

3. ROC与AUC

如上所述:学习器对测试样本的评估结果一般为一个实值或概率,设定一个阈值,大于阈值为正例,小于阈值为负例,因此这个实值的好坏直接决定了学习器的泛化性能,若将这些实值排序,则排序的好坏决定了学习器的性能高低。ROC曲线正是从这个角度出发来研究学习器的泛化性能,ROC曲线与P-R曲线十分类似,都是按照排序的顺序逐一按照正例预测,不同的是ROC曲线以“真正例率”(True Positive Rate,简称TPR)为横轴,纵轴为“假正例率”(False Positive Rate,简称FPR),ROC偏重研究基于测试样本评估值的排序好坏。

简单分析图像,可以得知:当FN=0时,TN也必须0,反之也成立,可以画一个队列,试着使用不同的截断点(即阈值)去分割队列,来分析曲线的形状,(0,0)表示将所有的样本预测为负例,(1,1)则表示将所有的样本预测为正例,(0,1)表示正例全部出现在负例之前的理想情况,(1,0)则表示负例全部出现在正例之前的最差情况。

现实中的任务通常都是有限个测试样本,因此只能绘制出近似ROC曲线。绘制方法:首先根据测试样本的评估值对测试样本排序,接着按照以下规则进行绘制。

同样地,进行模型的性能比较时,若一个学习器A的ROC曲线被另一个学习器B的ROC曲线完全包住,则称B的性能优于A。若A和B的曲线发生了交叉,则谁的曲线下的面积大,谁的性能更优。ROC曲线下的面积定义为AUC(Area Uder ROC Curve),不同于P-R的是,这里的AUC是可估算的,即AOC曲线下每一个小矩形的面积之和。易知:AUC越大,证明排序的质量越好,AUC为1时,证明所有正例排在了负例的前面,AUC为0时,所有的负例排在了正例的前面。

4. 代价敏感错误率与代价曲线

上面的方法中,将学习器的犯错同等对待,但在现实生活中,将正例预测成假例与将假例预测成正例的代价常常是不一样的,例如:将无疾病–>有疾病只是增多了检查,但有疾病–>无疾病却是增加了生命危险。以二分类为例,由此引入了“代价矩阵”(cost matrix)。

在非均等错误代价下,希望的是最小化“总体代价”,这样“代价敏感”的错误率(2.5.1节介绍)为:

同样对于ROC曲线,在非均等错误代价下,演变成了“代价曲线”,代价曲线横轴是取值在[0,1]之间的正例概率代价,式中p表示正例的概率,纵轴是取值为[0,1]的归一化代价。

代价曲线的绘制很简单:设ROC曲线上一点的坐标为(TPR,FPR) ,则可相应计算出FNR,然后在代价平面上绘制一条从(0,FPR) 到(1,FNR) 的线段,线段下的面积即表示了该条件下的期望总体代价;如此将ROC 曲线土的每个点转化为代价平面上的一条线段,然后取所有线段的下界,围成的面积即为在所有条件下学习器的期望总体代价,如图所示:

本文部分内容引用<西瓜书−周志华著西瓜书_{-周志华著}西瓜书−周志华著​>

性能度量 - 对学习器泛化能力的评估相关推荐

  1. 从傅里叶分析角度解读深度学习的泛化能力

    作者丨许志钦 学校丨纽约大学阿布扎比分校博士后,纽约大学库朗研究所访问学者 研究方向丨计算神经科学,深度学习理论 深度学习成功地应用在很多领域,但对它的理论理解却非常缺乏.这两年,很多理论学家把关注点 ...

  2. 深度学习提高泛化能力的技术

    LeetCode题目记录 1.泛化能力(generalization) 2.正则化(regularization) 2.1 正则化方法 1.泛化能力(generalization) 对于模型,我们不仅 ...

  3. 思考深度学习的泛化能力

      深度神经网络往往带有大量的参数,但依然表现出很强的泛化能力(指训练好的模型在未见过的数据上的表现).深度神经网络为何会拥有如此强的泛化能力?2016年.2017年的两篇论文引起了广泛思考. 神经网 ...

  4. 评估方法提高深度学习模型泛化能力

    三种经典的评估方法提高模型泛化能力 ①留出验证:评估模型时,将数据划分为训练集.验证集.测试集.(比较适合大数据集) 在训练数据上训练模型,在验证数据上评估模型,最后在测试数据上测试最佳参数的模型. ...

  5. 深度学习:泛化能力、不收敛

    文章目录 一.什么是"泛化能力" 二.什么是"不收敛"? 一.什么是"泛化能力" 是指一个机器学习算法对于没有见过的样本的识别能力.我们也叫 ...

  6. 图解深度学习-提高泛化能力的方法

    数据集 在深度学习的训练过程中,神经网络的类型和结构固然重要,但训练样本才是重中之重. 数据增强 当训练样本数量较少时,可以通过数据增强来增加样本的多样性. 数据增强就是通过对样本图像进行平移.旋转. ...

  7. 如何提高深度学习的泛化能力?

    数据增强 在样本有限的情况下,采用数据增强的方法对原有样本进行变换: 平移.旋转.镜像翻转 几何变换.对比度变换.颜色变换.添加随机噪声.图像模糊 弹性变换算法:双线性插值.双三次插值 预处理 均值减 ...

  8. 如何提高强化学习算法模型的泛化能力?

    深度强化学习实验室 官网:http://www.neurondance.com/ 来源:https://zhuanlan.zhihu.com/p/328287119 作者:网易伏羲实验室 编辑:Dee ...

  9. 【AI初识境】如何增加深度学习模型的泛化能力​​​​​​​

    文章首发于微信公众号<有三AI> [AI初识境]如何增加深度学习模型的泛化能力 这是专栏<AI初识境>的第9篇文章.所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法. ...

最新文章

  1. web前端怎么获取cookie?新手前端开发者需了解
  2. 简单文件系统的实现_300来行代码带你实现一个能跑的最小Linux文件系统
  3. 【C/C++高质量编程 笔记】
  4. MyBatis常用配置解析-mapper标签
  5. java实现简易聊天窗口先运行服务器还是客户端_一个简易聊天功能的服务器端和客户端源码...
  6. 安卓之实现一个简单的电话拨号功能
  7. QT保留小数点后位数
  8. c语言学习-猜数字游戏
  9. 重启windows资源管理器命令
  10. excel如何比对两列数据是否相同
  11. 简单实现网页登录框中的“记住我”
  12. 京东白条数据架构进化之路:要在数据的不确定性中探索架构的稳定性
  13. 经典再现,看到就是赚到。尚硅谷雷神 - SpringBoot 2.x 学习笔记 - 核心功能篇
  14. Optimized Cost per Click in Taobao Display Advertising - 淘宝 OCPC 阅读笔记
  15. eos区块链 java客户端_分享一个网友第一次开发EOS区块链总结的经验
  16. 详解FindBugs的各项检测器
  17. 实践一 网络攻防环境的搭建
  18. linux进程间信号量
  19. 利用鸿蒙开发新闻头条
  20. 【PM模块】预防性维护

热门文章

  1. 让传统的振弦传感器插上信息化的翅膀---VM系列读数模块
  2. C++字符类型总结区别wchar_t,char,WCHAR
  3. 基于Java+hadoop网络云盘上传下载系统设计与实现
  4. 初探uniapp,做了第一个项目,总结下经验(一)
  5. 苹果三星新“机皇”遇冷,国产手机该高兴吗?
  6. UE4中实现鼠标拖动游戏中的物体
  7. 探讨一下论文查重系统的设计方法
  8. 易开发是一款帮助开发人员快速开发的工具,功能包括界面分析,页面信息,加固脱壳,支持 Android9.0
  9. 海宁某软件公司用友MDF数据库中勒索病毒,数据恢复成功
  10. 解决云开会难题,英特尔联合腾讯会议打造“会开会”的会议室