吴恩达《机器学习》学习笔记十一——应用机器学习的建议

  • 一、训练完模型后下一步要做什么
  • 二、评估算法与模型选择
    • 1.训练集与测试集
    • 2.训练/测试步骤
    • 3.模型选择
    • 4.数据集新的划分——验证集的加入
  • 三、偏差与方差
    • 1.偏差与方差的理解
    • 2.正则化和偏差方差的关系
    • 3.学习曲线
  • 四、决定接下来要做什么

经过前十次笔记的学习,已经掌握了线性回归、逻辑回归和神经网络三种经典的机器学习算法,并学会了使用正则化来防止过拟合。下面将跳出具体的算法,学习对机器学习模型的评估以及应用过程中优化的一些建议。

一、训练完模型后下一步要做什么

在设计机器学习的系统时,能够明白如何选择一条最合适、最高效的道路是一切的源头,如果没有合适的技巧,可能会在不断地尝试过程中浪费很多时间,比如选择什么模型、是否要特征映射、选择哪些特征、是否要花时间多采集数据等等。这些事情可能既花费很多时间,但最后还可能对系统性能的提升没有帮助

所以下面会给出一些建议和指导,帮助开发者明白怎样进行选择是有益于模型性能提升的。具体来说,假如你在开发一个机器学习系统或想试着改进一个机器学习系统的性能,你应该如何决定,接下来该选什么操作。

为了更形象地说明,用房价预测的模型来作为例子:

假设我们已经完成了带有正则化的线性回归模型来预测房价,代价函数如上图所示,但是当将训练好的模型用于一组新的数据来进行预测时,发现有很大的误差,那么接下来我们该怎么做来进一步改善这个模型?

下面是可能进行的一些尝试:

比如可能会想是数据样本不够要去获取更多的训练样本;
可能是特征太多过拟合了所以要减少一些特征的数量;
也可能是特征数量太少要增加一些;
也可能是线性模型太简单要加入一些多项式特征来增加模型复杂度;
还可能想到调节λ等的一些超参数。

这些尝试可能会非常耗费时间,而且最关键的是,如何选择很可能是凭人们的感觉,这样就有太大的主观性。

但是有一系列简单的方法,能让你事半功倍,快速地排除一些对模型的优化没有效果的可能选项,大大地节省尝试的时间

下面将介绍怎样评估机器学习算法的性能,然后将介绍这种能够事半功倍的方法——机器学习诊断法,这是一种测试,通过测试,你可以知道算法在哪里出现了问题,这也就是说,想要改进算法性能,应该进行什么样的尝试才是有意义的

二、评估算法与模型选择

在这之前,评估假设函数好坏与否是通过代价函数值来判断的。但是在训练集上代价函数小并不能说假设函数一定好,也可能在新的测试集上表现很差,也就是过拟合现象的存在。

过拟合现象我们还可以通过画出假设函数查看与数据样本的拟合曲线来判断,但是当你的特征很多的时候,如下图所示,假设函数h(x)也是无法可视化的。因此我们需要另一种评估假设函数的方法

1.训练集与测试集

一般来说,对于一个数据集,我们在训练之前需要将其进行划分为两部分:

要分为训练集和测试集两部分,一般的原则是,70%的数据当做训练集,30%的数据当做测试集,当然,在划分之前要打乱数据,保证划分的随机性

2.训练/测试步骤

使用训练集对参数进行优化,最小化代价函数J(θ);然后用训练好的参数去计算测试集上的代价函数值,测试模型的泛化能力

线性回归:

逻辑回归:

3.模型选择

如果你不知道你的模型应该用哪些多项式特征,或者不知道正则化系数应该设置成多少是最合适的,这类问题被称为模型选择问题

下面看一个模型选择的例子:

选择具体用多少次幂的特征组合来拟合数据比较好,我们需要对每个模型训练出它们各自的参数,并计算出各自对应的测试集上的误差,选择一个较小的作为最终的模型但是这样也不能说明它的泛化性能一定好,因为测试集已经用于选择模型了,没有额外的数据来衡量它的泛化性能,只是一个乐观的估计。

4.数据集新的划分——验证集的加入

相比于之前将数据集划分为训练集和测试集两种,现在我们将数据集划分为三部分:训练集、验证集和测试集,训练集用于训练模型,验证集用于模型选择,测试集用于测试模型的泛化能力。

它们相应的代价函数:

这边不同的是,之前选择模型的时候是通过测试集误差来选择的,现在通过验证集误差来选择:

那么测试集就可以来衡量它的泛化能力了。

三、偏差与方差

当运行一个学习算法时,如果这个算法的表现不理想,那么多半是出现两种情况,要么是偏差较大,要么是方差较大;换句话说,要么是欠拟合问题,要么是过拟合问题,在这种情况下,搞清楚是偏差问题还是方差问题或两者都有关系是非常重要的,因为这样能很快找到有效的解决方法和途径来改进算法。

1.偏差与方差的理解

回顾一下线性回归的欠拟合和过拟合的情况:

前面介绍了训练集和验证集的概念,这里我们来看一下它们随着假设函数的次数变高,它们的变化:

图中横坐标表示多项式的次数d,纵坐标表示误差即代价函数的值。那么,当d很小时,假设函数很简单,是欠拟合的情况;当d很大时,假设函数过于复杂,是过拟合的情况。对于训练集误差,欠拟合时误差很大,随着假设函数变复杂,误差会越来越小,过拟合时会非常小,如图中紫红色的曲线所示;而对于验证集误差,欠拟合和过拟合时的误差都会很大,即泛化能力很差,只有合理拟合的情况才会相对比较小,如图中大红色曲线所示

从这张图中我们可以来区分偏差和方差区域:

左边的部分是偏差高的情况,它对应着欠拟合,特点是训练集和验证集的误差都很高;右边的部分是方差高的情况,它对应着过拟合,特点是训练集误差很小,但是验证集误差很大

2.正则化和偏差方差的关系

正则化可以很好的防止过拟合,那么正则化和偏差方差又有什么关系呢?先来看一个例子:

这是带有正则化的线性回归,正则化系数的选择会对结果产生很大影响:当λ很大时,参数都会变得接近于0,假设函数近似等于一个常数;当λ很小时,起不到太大防止过拟合的作用,假设函数又会过于复杂,所以选择这个系数非常重要。

这边我们先给出一些表达式:假设函数、带正则化的代价函数、以及三个数据集上不带正则化的代价函数表达式,如下所示:

然后我们看一下对正则化系数λ进行模型选择的过程:

和前面选择多项式次数的情况非常相似,求出每种λ对应模型的参数,然后选择其中在验证集上误差最小的作为最终的模型,测试集误差来衡量其泛化能力。

那么改变正则化系数λ对训练集和验证集的误差会有什么影响呢?

图中横坐标为正则化系数λ,纵坐标为代价函数的值。当λ很小时,对应着过拟合的情况,所以训练误差小,验证误差大;当λ很大时,对应着欠拟合的情况,所以训练误差和验证误差都大。图中蓝色的曲线是训练集误差,紫红色曲线是验证集误差;左边对应高方差情况,右边对应高偏差情况。

3.学习曲线

如果你想检查你的学习算法运行是否一切正常,或者希望改进算法的表现,那么绘制学习曲线是非常有用的,这是一个很好的工具。可以用学习算法来判断一个学习算法是否处于偏差、方差问题,或者是两者都有。

先从一个例子来理解一些学习曲线:

注意图中横坐标是训练集样本的个数,纵坐标是误差,那么一个确定的假设函数的形式,在训练集上,当训练样本很少的时候很容易拟合,而且误差会很小,随着样本数越来越多,平均误差的值也将越来越大,所以训练集上的代价函数的变化如蓝色曲线所示;但是对于验证误差来说,训练样本少使得模型的泛化能力较弱,所以验证集上的误差较大,而随着训练样本增多,模型学习的越来越好,泛化能力逐渐变强,所以验证集上的代价函数的变化如紫红色曲线所示

上面介绍的是一般情况,下面我们看一下特例,首先是高偏差的学习曲线:

高偏差的情况就是欠拟合的情况,从上面右边的图可以看出来,增大数据样本到一定程度,训练误差和验证误差的变化就都不会太大了,所以变化曲线是左边图中所示,它们都趋向于一个较大的值然后平稳发展。所以遇到高偏差的情况,增大数据样本改善不大

然后是高方差的情况:

高方差的情况就是过拟合的情况,随着训练数据的增多,过拟合还是会过拟合,但是平均误差也会慢慢地上升,而验证误差则会慢慢的下降,特点是验证误差与训练误差之间有比较大的间隔。但是随着数据样本的增多,可以看到对学习算法还是有所改善的

四、决定接下来要做什么

有了上面的知识,知道如何评估算法、什么是模型选择、偏差与方差以及学习曲线的概念,我们就可以根据评估算法的结果来进行相应的尝试,使得模型性能得以优化,一些明显无意义的操作可以直接不用管。让我们再回到开头的问题:

这时就可以理解这些操作能够各自应对什么问题:

增加训练数据是应对高方差的;
减少特征数量是应对高方差;
增加额外的特征与增加多项式特征是应对高偏差;
减小正则化系数λ是应对高偏差;
增大正则化系数是应对高方差。

最后,我们将以上的知识结合到神经网络模型中,因为神经网络是目前比较流行的模型:

简单的神经网络会欠拟合,复杂的神经网络容易过拟合,具体怎么选择神经网络的层数以及每个隐藏的神经元个数,可以用到上面模型选择的方法,划分数据集,用验证集选出最合适的模型

吴恩达《机器学习》学习笔记十一——应用机器学习的建议相关推荐

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

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

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

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

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

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

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

    目录 0. 前言 1. 最大池化(max pooling) 2. 平移不变形 3. 其他池化函数 4. 卷积和池化作为一种无限强的先验 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常 ...

  5. 吴恩达深度学习 | (15) 结构化机器学习项目专项课程第二周学习笔记

    课程视频 第二周PPT汇总 吴恩达深度学习专项课程共分为五个部分,本篇博客将介绍第三部分结构化机器学习项目专项的第二周课程:机器学习(ML)策略(2) . 目录 1. 进行误差分析 2. 清除标注错误 ...

  6. 799页!吴恩达深度学习笔记.PDF

    吴恩达深度学习课程,是公认的最优秀的深度学习课程之一,目前没有教材,只有视频,本文提供完整笔记下载,这本笔记非常适合和深度学习入门. 0.导语 黄海广博士和同学将吴恩达老师深度学习视频课程做了完整的笔 ...

  7. 吴恩达深度学习笔记——卷积神经网络(Convolutional Neural Networks)

    深度学习笔记导航 前言 传送门 卷积神经网络(Convolutional Neural Networks) 卷积神经网络基础(Foundations of Convolutional Neural N ...

  8. 吴恩达深度学习笔记——神经网络与深度学习(Neural Networks and Deep Learning)

    文章目录 前言 传送门 神经网络与深度学习(Neural Networks and Deep Learning) 绪论 梯度下降法与二分逻辑回归(Gradient Descend and Logist ...

  9. 【深度学习】吴恩达深度学习-Course3结构化机器学习项目-第一周机器学习(ML)策略(1)作业

    题目仅含中文!! 视频链接:[中英字幕]吴恩达深度学习课程第三课 - 结构化机器学习项目 参考链接: [中英][吴恩达课后测验]Course 3 - 结构化机器学习项目 - 第一周测验 吴恩达< ...

  10. 吴恩达深度学习笔记1-Course1-Week1【深度学习概论】

    2018.5.7 吴恩达深度学习视频教程网址 网易云课堂:https://mooc.study.163.com/smartSpec/detail/1001319001.htm Coursera:htt ...

最新文章

  1. c# mysql fill_C#里sqlDataAdapter.fill(DataSet,String)的用法
  2. shodan 渗透测试 漏洞挖掘 一些用法
  3. 这些年遇到的坑爹问题汇总
  4. Android 基于注解IOC组件化/模块化的架构实践
  5. 新书速递 | 《知识图谱:方法、实践与应用》
  6. 英雄无敌3高清 Android,安卓TOP10:《英雄无敌3》高清重制版上架
  7. 两个数组中对应的下标的值合成一个新的数组_剑指 offer 面试题精选图解 03 . 数组中重复的数字
  8. 大数据面试-03-大数据工程师面试题
  9. hdu 1255 覆盖的面积 线段树扫描线求重叠面积
  10. CF468A 24 Game
  11. 计算机知识中h表达什么意思,计算机地基础知识hzh.ppt
  12. 数字化场景——数字化营销
  13. 咖说 | 隐私何在?区块链是隐私保护的安全阀门
  14. linux u盘 引导修复工具下载,win7+ubuntu双系统引导修复工具boot repair disk 32+64位ISO版...
  15. 五. python 字符串方法函数
  16. 【字节跳动】 https://job.bytedance.com/campus 内推码:MZ9BJHD 电话:13855119574 邮箱:yinxiang.stephen@bytedance.com
  17. 小巫的Android视频教学出来啦,欢迎大家关注和指正!!!
  18. inet aton在java_地址转换函数:inet_aton inet_ntoa inet_addr和inet_pton inet_ntop
  19. 公共信息模型(CIM)
  20. 全部资源,都在这里了

热门文章

  1. iOS 覆盖率检测原理与增量代码测试覆盖率工具实现
  2. 手把手教你求职进入BAT
  3. 开源开放 | 熵简科技 AI Lab 开源金融领域中文预训练语言模型 FinBERT
  4. [中文事件抽取]DCFEE: A Document-level Chinese Financial Event Extraction System based on Automatically Lab
  5. urllib.request.urlopen(req).read().decode解析http报文报“‘utf-8‘ codec can‘t decode”错处理
  6. 风控模型师面试准备--技术篇(逻辑回归、决策树、集成学习)
  7. Android官方开发文档Training系列课程中文版:后台加载数据之处理CursorLoader的查询结果
  8. 企业战略咨询方法:学习SWOT分析
  9. 【LeetCode】3月19日打卡-Day4
  10. java运行字符串代码