吴恩达《机器学习》学习笔记十二——机器学习系统

  • 一、设计机器学习系统的思想
    • 1.快速实现+绘制学习曲线——寻找重点优化的方向
    • 2.误差分析
    • 3.数值估计
  • 二、偏斜类问题(类别不均衡)
  • 三、查准率P与召回率R——代替准确率的评估指标
  • 四、查准率与召回率的权衡——F1-Score

上次笔记主要介绍评估机器学习模型的方法,从偏差、方差来分析模型可能拥有的问题,从而应该采取什么相应的措施。介绍了偏差、方差与欠拟合、过拟合之间的关系,以及正则化对偏差、方差的影响,还介绍了一些曲线图帮助分析,这些都是实践中很重要的建议,相比毫无目的地随便选择优化方法,通过评估分析之后可以排除一些无意义的选项,节省了大量宝贵的时间。

上次笔记链接:https://blog.csdn.net/qq_40467656/article/details/107525426

这次笔记继续介绍一些机器学习系统实际使用时会遇到的一些问题,以及相应的解决方案。

一、设计机器学习系统的思想

1.快速实现+绘制学习曲线——寻找重点优化的方向

当要开始做一个机器学习的系统时,一般来说最好的办法,不是一开始就建立一个很复杂的有许多复杂特征的系统,而是通过一个简单的算法来快速地实现它,即使这个简单的东西不是很完美;然后通过交叉验证集来测试数据。

做完上述的之后,就可以画出相应的学习曲线,通过学习曲线以及检验误差来找出你的算法是否存在高偏差或高方差或其他一些的问题,在作出这些分析之后,再来决定是否使用更多的数据或者特征等等。这种方法在你刚刚开始解决一个机器学习的问题的时候能起到很好的作用,因为你并不能预知,你是需要更多的特征还是更多的数据或者是别的东西,在缺乏各种证据的情况下,很难提前知道这些信息,因为你没有画出学习曲线所以很难决定把时间花在哪里。

所以很多时候,一开始应当先进行一次简单快速地实现,然后画出学习曲线来帮助你进行之后的判断。可以把它想成是在你编程的时候,你要避免出现过早优化的问题,这种思想告诉我们,应该用实际的证据来指导我们的决策,来决定把时间花在哪里,而不是仅凭直觉。上述思想如下图所示:

2.误差分析

当实现比如一个垃圾邮件分类器的时候,会经常观察交叉验证集的情况,然后看一看那些被错误分类的文件。通过查看这些被错误分类的垃圾邮件和非垃圾邮件,有什么共同的特征和规律,这样做多了以后,这个过程就会启发你应该设计怎样的新特征或是告诉你现在的系统有什么优点和缺点,然后指导你想出办法来改进它。

举一个具体的例子:假如在做一个垃圾邮件分类器,然后在你的交叉验证集中有500个样本,假如在这个例子中错误率较高,它错误分类了100个交叉验证样本,如下图所示:

那么现在要做的就是手动核查着100个错误,然后手工为它们分类,同时要考虑这些邮件是什么类型的邮件,有什么线索或者特征能帮助算法正确的进行分类。比如经过手动核查后发现错误分类的邮件是以下的情况:

对于错误比较多的类别,就应该多关注一下,多找一些特征来区别它们,进而进行改进。

因此,这样的误差分析,是一种手动地去检查算法所出现的失误的过程,它能引导你走向最有成效的道路。这也是为什么要先通过一种比较简单的算法先实现的原因,我们要做的是找到一些最难以分类的类别,而对于不同的学习算法来说,对它们造成困难的样本总是相似的,通过一个简单粗暴的算法实现,你可以很快的找到算法的不足所在和难以处理的样本的类型,然后把精力集中在它们身上。

3.数值估计

在改进学习算法时,另一个技巧是保证自己对学习算法有一种数值估计的方法。当改进学习算法时,如果你的算法能够返回一个数值评价指标来估计算法执行的效果,将会很有帮助。
可能算法是准确的,也可能是错误的,但这个数字能告诉你你的学习算法效果有多好,先看一个例子:

当遇到是否应该把discount、discounts、discounted和discounting这几个单词当作有相同的含义时,可能会考虑是否使用stemming软件(一种词干提取软件),那么我们就可以通过比较使用前后系统的错误率的变化来判断是否应该使用。图中所示,不使用的错误率是5%,使用后的错误率是3%,显然有了这样的数值比较,抉择起来会很容易。

当你改进学习算法时,你总是要去尝试很多新主意和新版本的算法,如果你每次试用新方法都手动地去检测这些例子看看表现的好不好,会让你很难去决定到底应不应该这么做。但是通过一个单一规则的数值评价指标,你可以观察误差率是变大了还是变小了,你可以通过它更快地实践你的新想法,它能直接告诉你你的想法能提高还是降低学习算法的表现,这会大大加速你的进程。

二、偏斜类问题(类别不均衡)

从一个例子来理解偏斜类问题:

训练一个逻辑回归模型来判断患者是否患有癌症,假设我们训练的这个模型在测试集上的错误率只有1%。但是如果只有0.5%的患者是有癌症的,这时即使不用任何算法,直接将所有患者都预测为无癌症,错误率也只有0.5%,比使用了机器学习算法后获得的错误率还要低

这种情况经常发生在正例和负例的比率非常接近于一个极端情况的时候。在本例中,正样本的数量与负样本的数量相比非常非常少,把这种情况叫做偏斜类。一个类的数据与另一个类相比多很多,此时使用分类误差或分类精确度来作为评估度量可能会产生如下问题:有时候只看准确率无法衡量一个算法的好坏,无法确定真的提升了算法的质量

三、查准率P与召回率R——代替准确率的评估指标

所以在遇到偏斜类问题时,我们希望有一个不同的误差度量值或评估度量值。下面介绍两种评估度量值:查准率与召回率

首先要定义一些概念:

当真实类别与预测的类别都为1时的数据,我们称之为真阳性(True Positive),真实类别为1,预测类别为0的,称之为假阳性(False Positive),真实类别为0,预测类别为1的,称之为假阴性(False Negative),真实类别与预测类别都为0的,称之为真阴性(True Negative),如上图所示。

然后再来看查准率与召回率的定义:

查准率(Precision)是指,在所有预测为真的数据中真实标签为真的数据的比例,公式如下图所示,可以看出,查准率越高越好。

召回率(Recall)是指,在所有真实标签为真的数据中,被预测正确(即也为真)的比例,公式如下图所示,自然也是越高越好。

通过计算查准率与召回率,我们就可以更好地知道分类模型到底好不好,针对上述提及的癌症分类的偏斜类问题,如果我们将所有的数据全都预测为无癌症(0/假),那么召回率就变成0,由此得知这不是一个好的算法。

拥有高查准率和高召回率的模型是一个好的分类模型,这给予了我们一个更好的评估值,给予了一种更直接的方法来评估模型的好坏。

四、查准率与召回率的权衡——F1-Score

在很多应用中,我们希望能够保证查准率与召回率的相对平衡。先来看一下查准率与召回率有什么联系:

  1. 还是在这个癌症分类的逻辑回归模型上,如果我们的目标是尽可能的减少患者的心理负担,即只有很确定时才宣布患有癌症(y=1),不然不判定为癌症(y=0)。

    当我们将分类的阈值从0.5改为0.7或者是0.9时,这就意味着在概率达到90%时才判定为有癌症,这样的话判断有癌症的数据中真的有癌症的比例就会变大,即查准率会变大;而与此同时,所有真实有癌症的数据中被预测为有癌症的可能性就有所下降(毕竟概率要求变高,原本一些低概率的现在被预测为无癌症了),即召回率会变小

  2. 考虑另外一种情况,假设我们希望避免遗漏掉患有癌症的患者,即希望避免假阴性。换句话说,如果一个患者确实患有癌症,但是我们没有告诉他患有癌症,那这可能造成严重的后果。

    这时的分类阈值将会设置的小一些,比如0.3,因为希望更多的患者被预测为有癌症,从而进一步接受治疗。那么与上一个情况相反,这将拥有高召回率,低查准率

所以对于大多数的回归模型,你得权衡查准率与召回率,通过改变“阈值”来得到想要的高查准率或是高召回率,它们之间的关系如下图所示,一个高一个就低

那么现在又有一个问题,当你有几个算法时,或者同一个算法但是“阈值”不同时,得到的查准率与召回率都是不一样的,我们怎样决定哪一个是最好的呢?当只有一个评价度量时可以直接比较,但是现在有两个,该怎么综合考虑呢?

有一种结合查准率和召回率的的方式,叫做F值(F-Score),公式如下图所示,分值越高则说明该模型最好

吴恩达《机器学习》学习笔记十二——机器学习系统相关推荐

  1. 花书+吴恩达深度学习(十二)卷积神经网络 CNN 之全连接层

    目录 0. 前言 1. 全连接层(fully connected layer) 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩达深度学习(十)卷积神经网络 CNN ...

  2. 吴恩达深度学习笔记——结构化机器学习项目(Structuring Machine Learning Projects)

    深度学习笔记导航 前言 传送门 结构化机器学习项目(Machine Learning Strategy) 机器学习策略概述 正交化(orthogonalization) 评价指标 数字评估指标的单一性 ...

  3. 吴恩达深度学习笔记(二)——浅层神经网络

    一.选择激活函数的经验法则 课后题:tanh激活函数通常比隐藏层单元的sigmoid激活函数效果更好,因为其输出的平均值更接近于零,因此它将数据集中在下一层是更好的选择,使得下一层的学习变得更加简单. ...

  4. 花书+吴恩达深度学习(十)卷积神经网络 CNN 之卷积层

    目录 0. 前言 1. 2D 图像卷积 2. 3D 图像卷积 3. 过滤器(核函数) 4. 过滤器应用于边缘检测 5. padding 填充 6. stride 步长 7. 使用卷积的动机 8. 1乘 ...

  5. 花书+吴恩达深度学习(十四)卷积神经网络 CNN 之经典案例(LetNet-5, AlexNet, VGG-16, ResNet, Inception Network)

    目录 0. 前言 1. LeNet-5 2. AlexNet 3. VGG-16 4. ResNet 残差网络 5. Inception Network 如果这篇文章对你有一点小小的帮助,请给个关注, ...

  6. 吴恩达深度学习笔记(四)

    吴恩达深度学习笔记(四) 卷积神经网络CNN-第二版 卷积神经网络 深度卷积网络:实例探究 目标检测 特殊应用:人脸识别和神经风格转换 卷积神经网络编程作业 卷积神经网络CNN-第二版 卷积神经网络 ...

  7. 花书+吴恩达深度学习(十九)构建模型策略(训练模型顺序、偏差方差、数据集划分、数据不匹配)

    目录 0. 前言 1. 调试模型顺序 2. 偏差方差的解决方法 3. 数据集的选取划分 4. 数据不匹配问题 5. 评估指标的选取 6. 贝叶斯最佳误差 如果这篇文章对你有一点小小的帮助,请给个关注, ...

  8. 花书+吴恩达深度学习(十八)迁移学习和多任务学习

    目录 0. 前言 1. 迁移学习 2. 多任务学习 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩达深度学习(十八)迁移学习和多任务学习 花书+吴恩达深度学习(十 ...

  9. Machine Learning(吴恩达) 学习笔记(一)

    Machine Learning(吴恩达) 学习笔记(一) 1.什么是机器学习? 2.监督学习 3.无监督学习 4.单变量线性回归 4.1代价函数 4.2 梯度下降 5.代码回顾 最近在听吴恩达老师的 ...

最新文章

  1. 使用ajax实现多个查询条件功能以及下拉分页
  2. dtree和jquery构建树型结构
  3. 新视野计算机等级考试官网,计算机二级C语言
  4. 干掉Postman?测试接口直接生成API文档,这工具强烈推荐!
  5. iOS- UITableView could not hold the selected row after reload
  6. 什么是视频编码(Codec)?
  7. Windows下Eclipse提交MR程序到HadoopCluster
  8. [js] 说说你对js沙箱的理解,它有什么应用场景?
  9. Python 线程队列 LifoQueue – LIFO - Python零基础入门教程
  10. 数字摄像头测试软件,图像测量软件(Camera Measure)
  11. IDEA 2020年最后一个版本更新了,机器学习都整上了
  12. 58技术主席:还原万亿级三高业务场景的设计与实践
  13. DOS 批量修改文件名
  14. c语言 获取可用内存大小,C语言实现获取内存信息并输出的实例
  15. 模糊控制算法基础知识
  16. java计算机毕业设计ssm宠物店管理系统element vue前后端分离
  17. QuickCHM 2.6中“不支持此接口”错误的“彻底”解决(补丁)
  18. 乒乓球拍行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  19. 如何制作高大上的PPT--图片
  20. 基于无线信号的手势识别研究现状调查

热门文章

  1. delphi64位 char数组转换string中文乱码_使用位运算、值交换等方式反转java字符串-共四种方法...
  2. html怎么修改锚点的属性,在HTML中设置自定义锚点
  3. 我对DevOps的理解
  4. 领域应用 | 知识图谱在小米的应用与探索
  5. 论文浅尝 | 面向单关系事实问题的中文问答模型
  6. Dockerfile构建docker镜像注意事项
  7. 前端如何做极致的首屏渲染速度优化
  8. Android官方开发文档Training系列课程中文版:高效显示位图之加载大位图
  9. 国科大高级人工智能5-RNN/LSTM/GRU/集束搜索/attention
  10. git入门(廖雪峰老师)