这章的内容对于设计分析假设性能有很大的帮助,如果运用的好,将会节省实验者大量时间。

Machine Learning System Design
6.1 Evaluating a Learning Algorithm
6.1.1 Deciding What to Try Next
机器学习诊断法:一种测试法,通过执行这种测试,能够深入了解某种算法是否有用。诊断法也会告诉你,要想改进一种算法的效果需要什么样的尝试。能够判断一种学习算法能不能work,并且改善该算法性能的一个测试。

诊断法的执行和实现是需要时间的,有时候需要大量的时间,但这样做可以更有效地利用时间。


下面的内容将会讨论如何评价学习算法,再介绍一些诊断法,从而选择更有意义的方法实现达到改进机器学习系统性能的目的。

6.1.2 Evaluating a Hypothesis
怎样用学过的算法来评估假设函数,并以此来讨论如何避免过拟合和欠拟合问题。
如何判断一个假设函数是过拟合的。下面给出了评估假设函数的标准方法。

将数据分为2部分:训练集和测试集。一种典型的分法是7:3。如果数据有某种规律或者顺序的话,最好随机抽取70%作为训练集,剩下的30%作为测试集。

按照以下步骤训练和测试学习方法。分别以线性回归和逻辑回归为例。

线性回归:

1.由训练集得到Θ,前提是最小会训练误差J(Θ)。

2.利用测试集计算测试误差。

逻辑回归:

1.由训练集得到Θ,前提是最小会训练误差J(Θ)。

2.利用测试集计算测试误差。

这里“利用测试集计算测试误差”有2种方法(计算公式见图):

1)直接由公式计算Jtest(Θ)。

2)先计算单个测试示例的误分类率(0/1错分率),用误分类率来定义测试误差。

6.1.3 Model Selection and Train/Validation/Test Sets
讨论模型选择问题以及如何将数据分为3组:训练集、验证集和测试集。
训练集误差是不能正确预测出假设是否能很好地拟合新样本。

一般的模型选择问题步骤:
1.对所有模型分别求训练误差的最小值,从而得到多个对应不同模型的参数向量Θ。
2.针对每个模型分别求测试误差的最小值Jtest(Θ),确定多项式次数d。
3.选择测试误差最小的模型作为最后的模型。

但是,如果将上述得到的模型再作用于训练集上,是不能预测出这个假设推广到新样本上的效果。因为这些参数能够很好地拟合训练集,但对于其他新样本而言就不一定那么好。因此,用测试集来拟合参数不能公平地预测出假设函数在遇到新样本时的表现。

通常将数据集分为3个部分:训练集、交叉验证集(验证集、CV)和测试集。

训练误差、交叉验证误差、测试误差。

下面用训练误差、交叉验证误差、测试误差来求出适合的模型。

1.对所有模型分别求训练误差的最小值,从而得到多个对应不同模型的参数向量Θ。
2.针对每个模型分别求交叉验证误差的最小值Jcv(Θ),确定多项式次数d。
3.选择交叉验证误差Jcv(Θ)最小的模型作为最后的模型。

4.利用测试集评价模型的表现。

一句话,训练集求出特定的模型参数、交叉验证集求出最优的模型、测试误差衡量模型的泛化效果。

6.2 Bias vs. Variance
6.2.1 Diagnosing Bias vs. Variance
讨论有关偏差(欠拟合)和方差(过拟合)的问题,并弄清楚怎样评价一个学习算法,弄清一个问题是和偏差有关还是和方差有关,从而改进学习算法的效果。

对于一个具体的问题,对于这个问题,假设是整式多项式。下图画着训练误差和交叉验证误差大小随假设的次数变化的规律:

训练误差随着拟合公式的次数的增大不断增大而减小。交叉验证误差随着拟合公式的次数的增大先减小后增大,中间有个极值。

偏差对应图中最左侧,训练误差(Jtrain(Θ))将会较大,交叉验证误差(Jcv(Θ))≈Jtrain(Θ)。

方差对应图中最右侧,训练误差(Jtrain(Θ))将会较小,交叉验证误差(Jcv(Θ))»Jtrain(Θ)。

做道题:

6.2.2 Regularization and Bias/Variance

深入探讨偏差和方差问题,探讨正则化如何影响偏差和方差。

如何选择合适的λ。

先看对J(Θ)、Jtrain(Θ)、Jcv(Θ)和Jtest(Θ)的定义:

对于特定J(Θ)(除了λ,其他都不变),选择合适的λ:

1.设置λ为一系列值(可以以等步长增加),比如0、0.01、0.02...10.24。

2.对于每个特定的λ,利用训练集分别计算minΘ(i)J(Θ(i))对应的Θ(i)值。

3.利用交叉测试集计算不同λ下推出的Θ对应的Jcv(Θ),挑选最小的Jcv(Θ)对应的Θ和λ。图中是Jcv(5))。

4.利用测试集对挑选出的Θ的性能进行评估。

做道题:

答案:D

偏差与方差和λ的关系(训练误差Jtrain(Θ)和交叉验证误差Jcv(Θ)随λ变化情况):

λ由小到大变化,Jtrain(Θ)不断增大(开始是十分拟合训练集,慢慢变得不太拟合,最后完全走样)。Jcv(Θ)先减小后增大(开始不太拟合验证集,正则化合适的时候,泛化能力变强,开始拟合验证集,但随着λ增大,又开始走样)。其实,图中坐标系右边对应的是偏差情况,左边对应的是方差情况,中间有个合适值,这个合适的λ就是所求。这里的图像是理想化的,实际会有一些噪音的存在。

6.2.3 Learning Curves
可以绘制学习曲线来检查学习算法,从而改进算法的表现或效果。
样本数量少,训练误差小,但交叉误差大。样本越多,适应新数据的能力越强(泛化能力增强),但训练样本越难完美拟合。总体来说,交叉验证误差和训练误差随训练集m的变化情况如图所示:

下面来看一下当算法处于高偏差或者高方差的时候,学习曲线的样子。
处于高偏差,训练误差随着训练样本的增加而增大,后期平缓;交叉验证误差会减小,经过一个值后开始平缓,但还是较大。训练误差和交叉验证误差最终会较大,并且相互接近。增大训练样本数量对改变高偏差没有作用。

处于高方差,训练误差随着样本的增加而增大,但总体还是很小;交叉验证误差会减小。前期,交叉验证误差和训练误差之间的差距(gap)较大,但随着训练样本的明显增多,训练误差和交叉验证误差还是会相互靠近,之间的差距不断减小。增加样本数量对改变高方差有明显作用。

做道题:

答案:处于高方差的情况。

6.2.4 Deciding What to Do Next Revisited
前面已经学习了如何评价一个算法,模型选择问题,偏差和方差的问题。讨论这些诊断法是如何帮助判断哪些方法可能有助于改进学习算法的效果。
回到前面的问题,用线性回归模型分析房价。

1.适合于处于高方差的情况。交叉验证误差应该比训练误差大得多。
2.适合于处于高方差的情况。
3.适合于处于高偏差的情况。
4.类似于增加特征,适合于处于高偏差的情况。
5.适合于处于高偏差的情况。
6.适合于处于高方差的情况。

下面总结前面的内容,并看看它们与神经网络的联系。介绍一些为神经网络选择结构或者连接形式的技巧和经验。
小的神经网络隐藏层数量较少或者隐藏单元数量较少,缺点是容易欠拟合,优点是计算量较少。
大的神经网络隐藏层数量较多,隐藏单元较多,缺点是容易过拟合,计算量较大,但性能要好。使用一个经过正则化的大型神经网络的效果要比一个小的神经网络更加好。可以使用正则化手段来解决过拟合。关于隐藏层数量的选择和隐藏单元的选择,可以用同一交叉验证集进行验证,选择误差最小的情况。

以上学习了偏差、方差以及学习曲线为代表的诊断法如何帮助高效地使用学习算法。

做道题:

答案:增加隐藏层或者隐藏单位类似于增加假设的参数Θ次数。具体参考"7.2.1 Diagnosing Bias vs. Variance"的内容。

习题:

high bias

CD

BD

CD

BCD

Coursera 机器学习 第6章(上) Advice for Applying Machine Learning 学习笔记的更多相关文章

  1. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 10—Advice for applying machine learning 机器学习应用建议

    Lecture 10—Advice for applying machine learning 10.1 如何调试一个机器学习算法? 有多种方案: 1.获得更多训练数据:2.尝试更少特征:3.尝试更多 ...

  2. 斯坦福大学公开课机器学习:advice for applying machine learning | diagnosing bias vs. variance(机器学习:诊断偏差和方差问题)

    当我们运行一个学习算法时,如果这个算法的表现不理想,那么有两种原因导致:要么偏差比较大.要么方差比较大.换句话说,要么是欠拟合.要么是过拟合.那么这两种情况,哪个和偏差有关.哪个和方差有关,或者是不是 ...

  3. Machine Learning - 第6周(Advice for Applying Machine Learning、Machine Learning System Design)

    In Week 6, you will be learning about systematically improving your learning algorithm. The videos f ...

  4. (原创)Stanford Machine Learning (by Andrew NG) --- (week 6) Advice for Applying Machine Learning & Machine Learning System Design

    (1) Advice for applying machine learning Deciding what to try next 现在我们已学习了线性回归.逻辑回归.神经网络等机器学习算法,接下来 ...

  5. Advice for applying Machine Learning

    https://jmetzen.github.io/2015-01-29/ml_advice.html Advice for applying Machine Learning This post i ...

  6. [Python & Machine Learning] 学习笔记之scikit-learn机器学习库

    1. scikit-learn介绍 scikit-learn是Python的一个开源机器学习模块,它建立在NumPy,SciPy和matplotlib模块之上.值得一提的是,scikit-learn最 ...

  7. 【原】Coursera—Andrew Ng机器学习—Week 6 习题—Advice for applying machine learning

    [1] 诊断的作用 [2]过拟合 [3] [4] 高偏差bias,欠拟合underfitting 高方差variance,过拟合overfitting [5]参数λ Answer:  λ太大,则参数都 ...

  8. 斯坦福第十课:应用机器学习的建议(Advice for Applying Machine Learning)

    10.1  决定下一步做什么 10.2  评估一个假设 10.3  模型选择和交叉验证集 10.4  诊断偏差和方差 10.5  归一化和偏差/方差 10.6  学习曲线 10.7  决定下一步做什么 ...

  9. 斯坦福大学公开课机器学习:advice for applying machine learning | model selection and training/validation/test sets(模型选择以及训练集、交叉验证集和测试集的概念)

    怎样选用正确的特征构造学习算法或者如何选择学习算法中的正则化参数lambda?这些问题我们称之为模型选择问题. 在对于这一问题的讨论中,我们不仅将数据分为:训练集和测试集,而是将数据分为三个数据组:也 ...

随机推荐

  1. 干掉MessageBox,自定义弹出框JMessbox (WindowsPhone)

    先上效果图                                               QQ退出效果                                           ...

  2. svn下载安装

    TortoiseSVN 下载地址:http://subversion.apache.org/packages.html#windows VisualSVN Server 下载地址:https://ww ...

  3. 【EfF】 贪婪加载和延迟加载 (virtual去掉关闭延迟加载)

    EntityFramework(EF)贪婪加载和延迟加载的选择和使用 贪婪加载:顾名思议就是把所有要加载的东西一 次性读取 1 using (var context = new MyDbContext ...

  4. ping包,支持ip录入

    @echo off ::等待用户输入需要监控IP set /p ip=Input the IP required to monitor: echo executing...... :start ech ...

  5. angular 工厂模式依赖注入

    import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; ...

  6. 【连载】redis库存操作,分布式锁的四种实现方式[一]--基于zookeeper实现分布式锁

    一.背景 在电商系统中,库存的概念一定是有的,例如配一些商品的库存,做商品秒杀活动等,而由于库存操作频繁且要求原子性操作,所以绝大多数电商系统都用Redis来实现库存的加减,最近公司项目做架构升级,以 ...

  7. Day 3 Python 基础数据类型二

    1. INT 型 #1. 数字int #bit_length() 当十进制用二进制表示时,最少使用的位数. v =11 data = v.bit_length() print(data) 2. 布尔值 ...

  8. C# 抽象(3)

    接上章: 抽象类中有抽象方法,那么可不可以有非抽象方法呢? 答案是可以的. abstract class Human { public abstract void Think(); public ab ...

  9. 洛谷P4011 孤岛营救问题(状压+BFS)

    传送门 和网络流有半毛钱关系么…… 可以发现$n,m,p$都特别小,那么考虑状压,每一个状态表示位置以及钥匙的拥有情况,然后每次因为只能走一步,所以可以用bfs求出最优解 然后是某大佬说的注意点:每个 ...

  10. rsync入门

    rsync是Linux/unix下一个用于远程文件(目录)同步的一个精巧的小工具程序,有很多文章讨论了其功能和实现原理,本文主要就不赘述了. 主要介绍下实践时使用的一些方法和细枝末节留作工作笔记以便日 ...