斯坦福大学机器学习第十课“应用机器学习的建议(Advice for applying machine learning)”

斯坦福大学机器学习斯坦福大学机器学习第十课“应用机器学习的建议(Advice for applying machine learning)”学习笔记,本次课程主要包括7部分:

1) Deciding what to try next(决定下一步该如何做)

2) Evaluating a hypothesis(评估假设)

3) Model selection and training/validation/test sets(模型选择和训练/验证/测试集)

4) Diagnosing bias vs. variance(诊断偏差和方差)

5) Regularization and bias/variance(正则化和偏差/方差)

6) Learning curves(学习曲线)

7) Deciding what to try next (revisited)(再次决定下一步该做什么)

以下是每一部分的详细解读。

1) Deciding what to try next(决定下一步该如何做)

对学习算法进行调试:
假设你实现了一个正则化的线性回归算法来预测房价:

然而,当你用它来测试一批新的房屋数据时,发现预测出来的数据是很不准确的,那么,下一步你该干啥?以下提供一些选项,但是暂时不过多解释,当我们学完这一章时,就知道选择这些选项的依据了。

– 获取更多的训练样本

– 尝试使用更少的特征的集合

– 尝试获得其他特征

– 尝试添加多项组合特征

– 尝试减小 λ

– 尝试增加 λ

机器学习(算法)诊断(Diagnostic)是一种测试方法,使你能对一种学习算法进行深入的认识,知道什么能运行,什么不能运行,并且能指导你如何最大限度的提高学习算法的性能。

诊断测试虽然需要一些时间来实现,但是这样做可以更有效的利用你的时间。

2) Evaluating a hypothesis(评估假设)

在房价预测问题中,如果Hypotheis如下:

定义了如下的特征:

并且对训练数据做了非常好的拟合:

但是对不在训练集的新数据的预测的很差,失去通用性,那么,我们该如何评估这个假设?

首先,我们需要将数据集进行切分,一部分(例如70%)作为训练集,另一部分(例如30%)作为测试集:

对于线性回归来说:
– 通过最小化训练集的error J(θ)来学习参数θ;
– 再计算测试集的error:

对于逻辑回归来说,与线性回归相似:
-首先从训练集中学习参数θ;
-计算测试集的error:

-额外再加一个错误分类的error(或者称为0/1错误分类error);

3) Model selection and training/validation/test sets(模型选择和训练/验证/测试集)

首先让我们来回顾上面那个过拟合的例子:

一旦参数θ0,θ1,…,θ4对于某些数据集(训练集)适应(最终学习的参数),那么基于该数据及参数所计算的模型的error(训练误差J(θ)很可能比实践泛化的error要小。

所以我们需要考虑一下模型选择(Model Selection)的问题,首先来看一个选择多项式回归模型的例子,我们有1-10次方的多项式回归模型,或者hypothesis:

如何选择模型?

这里我们首先基于训练集学习参数,然后计算测试集的error, 最后选择测试集error最小的多项式回归模型,例如这里我们选择:

那么这个模型的泛化能力如何?测试集的error Jtest(θ(5))基本能代表它的泛化能力,但是这是否准确?
我们用测试集来选择参数,然后有用测试集来评估假设(hypothesis), 看起来这样的评估是基于测试集进行了优化的?
的确存在一点问题,所以,这里我们再引入第三个集合:交叉验证集,我们用它来选择参数,而仅仅在测试集上评估假设。
对于原始的数据集,一种比较典型的划分方式是60%的训练集,20%的交叉验证集以及20%的测试集:

有了这三个数据集合,我们也可以分别定义它们各自的error:

但是在实际使用时,我们通过训练集学习到参数, 再计算交叉验证集上的error, 再选择一个在验证集上error最小的模型,最后再在测试集上估计模型的泛化误差(error):

4) Diagnosing bias vs. variance(诊断偏差和方差)

首先看一下偏差和方差的例子,这些例子和正则化那一章的例子相同,不过同时被贴上了偏差或方差的标签:

a) 高偏差(欠拟合):

b) 高方差(过拟合):

c) 合适的拟合:

我们来计算这三个模型的train error和cross validation error:

我们会发现:

当多项式回归模型的次数d=1,也就是高偏差(欠拟合)时,训练集误差和验证集误差都比较大;

当d=4, 也就是高方差(过拟合)时,训练集误差会很小(拟合的非常好),但是验证集误差却很大;

当d=2,也就是拟合的刚刚好时,无论训练集误差还是验证集误差都刚刚好,介于上面两者之间。

如果用图形表示,就是下面这个样子:

有了上面的解释,我们就可以来诊断偏差还是方差的问题了。假设你的学习算法表现的不尽如人意,没有达到你的期望,如何来判定它是一个偏差的问题还是方差的问题?我们可以计算他们的训练集误差和交叉验证集误差,如果它们落入了上图的“头部”区域,可以判断是偏差(欠拟合)问题,如果落入了“尾部”区域,可以判断是方差(过拟合)问题,如下图所示:

最后,对于偏差还是方差的问题,可以做一个总结如下:

5) Regularization and bias/variance(正则化和偏差/方差)

对于过拟合问题,正则化是一个非常有效的解决方案,所以这一小节我们将考虑正则化和偏差/方差的关系。首先来看一个正则化的线性回归的例子:

如果正则化参数λ过大,一种极端的情况例如λ = 10000, 那么除去θ0,所学的其他参数都将近似为0,这就是欠拟合或高偏差的情况:

如果λ过小,极端的情况是λ = 0,等于没有对线性回归模型进行正则化,那么过拟合高方差的问题就很容易出现:

如果λ选取的比较合适,介于上述二者之间,那么我们将得到合适的拟合:

那么,如何选择正则化参数 λ ?

对于数据集,我们仍将它划为3份:训练集,验证集,测试集。对于给定的正则化模型,例如上面的例子,我们按 λ 从小到大的顺序依次取数,然后在训练集上学习模型参数,在交叉验证集上计算验证集误差,并选择误差最小的模型, 也就是选择 λ,最后再在测试集上评估假设:

偏差/方差可以作为正则化参数 λ 的函数,与上一小节相似,我们也可以画出这个函数图,这样我们就能评估 λ 合适的选择范围了:

6) Learning curves(学习曲线)

这一小节考虑Learning curves(学习曲线)的问题,主要针对的是训练样本数目来观察训练集误差和验证集误差之间的差异:

以下来考虑训练样本数目和模型的关系。以二次项多项式回归为例,如果仅有一个训练样本,那么模型很容易和样本点拟合,训练集误差近似为0,几乎可以忽略不计,而验证集误差可能会很大;如果有两个样本点,模型也很容易拟合样本点,训练集误差会略大一点,验证集误差可能会小一些;以此类推,当样本点比较多时,模型虽然不能拟合所有的样本点,但是泛化能力会更好一些,因此训练集误差会更大一点,而验证集误差会更小一些,如下图所示:

而误差和训练样本数目m的关系或者学习曲线如下:

以下通过学习曲线来考虑高偏差和高方差的问题。对于高偏差欠拟合问题:

即使增大了训练样本数目,模型拟合的依然不够,依然还是欠拟合问题。以下是高偏差欠拟合问题的学习曲线:

我们发现,如果一个学习算法是高偏差的,那么它的训练误差和验证集误差在一定的训练样本数目之后都很高,而且不会随着样本数目的增大而改变,所以对于高偏差欠拟合的问题,增加训练样本数目不是一个好的解决办法。

而对于高方差过拟合问题:

增大样本数目后,模型的泛化能力会好一些,一些是高方差过拟合问题的学习曲线:

我们发现,如果一个学习算法是高方差的,那么它的训练误差和验证集误差在一定的训练样本数目之后虽然有差异,但是会随着样本数目的增大而减小她们之间的gap,所以对于高方差过拟合的问题,增加训练样本数目是解决方法之一。
7) Deciding what to try next (revisited)(再次决定下一步该做什么)

好了,说完了这么多与偏差/方差有关的问题,我们再次回到本章的开头的问题,
假设你实现了一个正则化的线性回归算法来预测房价,然而当你用它来测试一批新的房屋数据时,发现预测出来的数据是很不准确的,那么,下一步你该干啥?以下这些选项,分别针对的是高方差或高偏差的问题,你可以尝试用上述小节的一些方法来诊断你的学习算法,不过对于下述选项,需要你考虑一下是针对高偏差还是方差的问题,可以先思考一分钟再看答案:

– 获取更多的训练样本

– 尝试使用更少的特征的集合

– 尝试获得其他特征

– 尝试添加多项组合特征

– 尝试减小 λ

– 尝试增加 λ

答案:

– 获取更多的训练样本 – 解决高方差

– 尝试使用更少的特征的集合 – 解决高方差

– 尝试获得其他特征 – 解决高偏差

– 尝试添加多项组合特征 – 解决高偏差

– 尝试减小 λ – 解决高偏差

– 尝试增加 λ -解决高方差

最后我们再来看一下神经网络和过拟合的问题:

以下是“小”的神经网络(参数比较少,很容易欠拟合):

它的计算代价较少。

以下是“大”的神经网络(参数比较多,很容易过拟合):

它的计算代价较大,对于神经网络过拟合的问题,可以通过正则化(λ)方法解决。

参考资料:

机器学习视频可以在Coursera机器学习课程上观看或下载: https://class.coursera.org/ml

第十课的课件资料下载链接:
PPT   PDF

Mitchell教授的经典书籍《机器学习》

李航博士《统计学习方法》

机器学习中的数学(2)-线性回归,偏差、方差权衡


如转载52opencourse上的任何原创文章,请注明出处,谢谢!

出处:http://www.52nlp.cn/%E6%96%AF%E5%9D%A6%E7%A6%8F%E5%A4%A7%E5%AD%A6%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E7%AC%AC%E5%8D%81%E8%AF%BE%E5%BA%94%E7%94%A8%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E7%9A%84%E5%BB%BA%E8%AE%AEa

斯坦福大学机器学习第十课“应用机器学习的建议(Advice for applying machine learning)”相关推荐

  1. 斯坦福机器学习视频笔记 Week6 关于机器学习的建议 Advice for Applying Machine Learning...

    我们将学习如何系统地提升机器学习算法,告诉你学习算法何时做得不好,并描述如何'调试'你的学习算法和提高其性能的"最佳实践".要优化机器学习算法,需要先了解可以在哪里做最大的改进. ...

  2. 斯坦福大学公开课机器学习:advice for applying machine learning | learning curves (改进学习算法:高偏差和高方差与学习曲线的关系)...

    绘制学习曲线非常有用,比如你想检查你的学习算法,运行是否正常.或者你希望改进算法的表现或效果.那么学习曲线就是一种很好的工具.学习曲线可以判断某一个学习算法,是偏差.方差问题,或是二者皆有. 为了绘制 ...

  3. Coursera机器学习-第六周-Advice for Applying Machine Learning

    Evaluating a Learning Algorithm Desciding What to Try Next 先来看一个有正则的线性回归例子: 当在预测时,有很大的误差,该如何处理? 1.得到 ...

  4. 课程 | 2021年斯坦福大学Jure Leskovec主讲CS224W 图机器学习

    图科学实验室Graph Science Lab 来源:斯坦福大学 SNAP 近年来,图神经网络(GNN)成为网络表示学习和分析的热点研究问题,其特点是将以神经网络为代表深度学习技术用于网络结构的建模与 ...

  5. 机器学习(十二)——机器学习中的矩阵方法(2)特征值和奇异值

    http://antkillerfarm.github.io/ QR分解(续) 令A=[a1,⋯,an]A=[\mathbf{a}_1, \cdots, \mathbf{a}_n],其中aia_i为列 ...

  6. Stanford机器学习---第十三讲.大规模机器学习

    之前一直在看Standford公开课machine learning中Andrew老师的视频讲解https://class.coursera.org/ml/class/index 同时配合csdn知名 ...

  7. 机器学习(十):机器学习训练速度的提升技巧

    这是一篇机器学习的介绍,本文不会涉及公式推导,主要是一些算法思想的随笔记录. 适用人群:机器学习初学者,转AI的开发人员. 编程语言:Python 操作系统:Windows 机器学习中最耗时也是最核心 ...

  8. 吴恩达机器学习(十六)机器学习流水线、上限分析

    目录 0. 前言 1. 流水线 2. 上限分析(Ceiling analysis) 学习完吴恩达老师机器学习课程的照片OCR,简单的做个笔记.文中部分描述属于个人消化后的理解,仅供参考. 如果这篇文章 ...

  9. 吴恩达机器学习(十二)—— 机器学习系统的设计

    吴恩达机器学习系列内容的学习目录→\rightarrow→吴恩达机器学习系列内容汇总. 1. 优先处理的工作:垃圾邮件分类例子 2. 误差分析 3. 偏斜类的误差度量 4. 查准率和查全率之间的权衡 ...

最新文章

  1. java导出多个excel并打成zip包
  2. Codevs 1005 生日礼物
  3. bp神经网络matlab实例蚊子,bp神经网络matlab实例
  4. OpenCV初探 —— VS2019配置环境
  5. SpringMVC深入信息提示(四)
  6. C语言函数未声明错误,switch 调用函数 错误未定义???
  7. Android开发高级进阶之Android开发艺术探索笔记重要知识点
  8. 蓝筹股票会退市吗?什么是白马蓝筹股票?
  9. 携程校招编程题 bit count
  10. 华为月薪11万招前端工程师,看到要求我傻眼了!
  11. 卷死我了,终于毕业了!!
  12. Ae 效果快速参考:杂色和颗粒
  13. element遮罩_element-ui遮罩层el-dialog的使用
  14. python学习三-基础语法
  15. 2021年起重机械指挥考试题及起重机械指挥模拟考试
  16. 麦克斯韦方程组及本构关系
  17. ajax中英文切换,vue-i18n中英切换插件使用
  18. Oracle 解析cron定时表达式
  19. vectorvn1610报价_VECTOR硬件通讯盒VN1640
  20. mac(苹果电脑系统)安装vs code编译运行c/c++

热门文章

  1. Java实现HashTable的基本操作
  2. c语言规定对使用的变量必须,C语言为什么要规定对所用到的变量要“先定义,后使用”...
  3. netbeans卸载 linux,NetBeans_6.1自己使用。(linux-ubuntu下)
  4. abaqus最大应力准则怎么用_ANSYS与ABAQUS对比,你选择那个?
  5. uml 时序图_UML学习-14种UML图
  6. 延长计算机屏幕显示时间,非充电状态下延长计算机使用时间的小诀窍!
  7. php json 转 xml格式,PHP中如何将JSON文件转XML格式
  8. 认清js中var a=b=1和var a=1,b=1的区别
  9. __name__=='__main__'的理解和使用
  10. centos离线安装mysql8_CentOS7离线安装Mysql8.0