Deep Learning Specialization on Coursera
NLPJob

标签热度

机器学习 coursera 斯坦福大学 公开课 斯坦福 深度学习 自然语言处理 python 数据科学 andrew ng 数学 nlp 数据分析 数据挖掘 神经网络 大数据 计算机科学 英语 deep learning 统计学 算法 课件 数据可视化 机器学习公开课 机器学习笔记 google 机器学习视频 计算机 推荐系统 数据结构 商业 r语言 java 密码学 udacity 金融 免费电子书 电子书 公开课笔记 计算机视觉 商务英语 学术英语 python数据可视化 机器学习课程 机器人 ted 文本挖掘 r 视频 java编程 回归模型 excel 深度学习课程 mysql cousera公开课 统计 大数据公开课 ted公开课 ted演讲 线性回归 mit 概率图模型 领导力 金融市场 tensorflow 学习英语 物联网 大数据专项课程 python入门 大数据课程 英语写作 英语学习 算法课程 强化学习 高级机器学习 kaggle 文本分析 机器学习资料 函数式编程 scala 游戏设计 cousera 机器学习系统 机器人公开课 开源代码 人工智能 普林斯顿大学 machine learning 线性代数 代价函数 软件工程 javascript 伯克利 市场营销 财务会计 沃顿商学院 网页开发 网站开发 web开发 网络安全 python数据科学 商业分析 非对称密码学 对称密码学 应用密码学 大规模数据科学 英语听说 概率 机器学习基石 python机器学习 算法公开课 源代码 数学思维 社交网络分析 微积分公开课 杜克大学 机器学习公开课视频 公开课视频 coursera公开课视频 coursera公开课 贝叶斯 信息论 离散数学 宾夕法尼亚大学 neural networks 伯克利大学 密歇根大学 成本函数 梯度下降 云计算 编译器 自动机 cs101 daphne koller spark 软件 管理 会计 英语交流 商业策略 风险管理 资产管理 地理信息系统 gis 卷积神经网络 面向对象编程 序列模型 移动应用开发 数据库 计算机通信 敏捷开发 高级商务分析 商务分析 商务英语课程 c语言 数据管理 投资 计算原理 计算基础 推荐系统导论 学术英语写作 android应用开发 android开发 android 机器人课程 机器人学 数据科学竞赛 yandex 深度学习公开课 深度学习书籍 数据集 机器学习资源 分布式 微积分 大规模机器学习系统 统计推断 数据科学公开课 游戏 数学思维公开课 机器学习课件 数学公开课 微积分公开课视频 微积分公开课下载 mit微积分 mit公开课 龙星计划 神经网络公开课 coursera视频 斯坦福公开课 windows ios udacity公开课 无人驾驶汽车 人机交互公开课 人机交互 正则化 过拟合 逻辑回归 模型思维 网易公开课 acl net 逻辑 cmu 情感分析 我爱公开课 引言 普林斯顿 经济 saas 52opencourse 逻辑导引 图模型 chirs manning dan jurafsky ppt 时间序列 go语言课程 go语言 工程师 语法 区块链基础 区块链 软件开发 商务基础 运营管理 商务 机器学习实战 数据系统 投资管理 swift 计算机安全与系统管理 系统管理 计算机安全 seo策略 seo工具 seo 组织领导力 css3 html5 会计基础 c sharp 英语沟通 并发 并行 全栈开发 数据仓库 商业智能 投资策略 金融基础 数据工程 python零基础 安全系统 现代密码学 硬件安全 软件安全 网络安全基础 递归神经网络 信息检索 云计算网络 云计算应用 云计算基础 云计算概念 分组交换网络 局域网 创意写作 写作 数学基础 台湾大学 基因序列 生物信息学 斯坦福算法课程 软件架构 软件设计 java程序设计 r语言基础 图论 组合数学 python数据表示 python基础 深度学习专项课程 游戏设计与开发 游戏开发 游戏设计概念 游戏设计艺术 angular 恐龙古生物学 恐龙 古生物学 推荐系统评价 jquery 英语语法 c# 高级算法 算法专项 iot python专项课程 python入门课程 商务英语交流技巧 商务英语交流 python社交网络分析 python文本挖掘 机器学习专项 金融价值 金融决策 金融公开课 数据结构与算法 大数据机器学习 大数据分析 商业与金融建模 金融建模 c++ 学术英语听说 数据分析工具 编程入门 编程 编程基础 算法思维 计算机基础 秘钥管理 hdfs 数据工程师 hive 3d交互设计 3d建模 虚拟现实 vr 洛桑联邦理工学院 函数式编程入门 数据科学课程 数据科学专项课程 学术英语课程 学术英语写作课程 斯坦福算法专项课程 斯坦福算法 python数据分析 英文简历 英文面试 英文写作 贝叶斯方法 商业分析技术 大数据建模 数据获取 数据清洗 文本挖掘课程 聚类分析 python公开课 python课程 主成分分析 深度学习资料 词意消歧 词义消歧 推荐系统入门 python书籍 机器学习算法 数据结构课程 图像处理 贝叶斯方法实战 深度学习源代码 sibyl p2p 机器学习书籍 数据结构资料 凸优化 推荐系统入门资料 数据科学导论 可视化 机器学习开源工具包 jane mcgonigal 公开课社区 挖课 courseminer 文本情感分析 多变量微积分 社会计算 数学分析公开课 概率图模型公开课 百度 吴恩达 香港科技大学 函数式语言 scala公开课 class2go coursera无法连接 coursera打不开 keith devlin 数学思维简介 社交网络 余凯 张潼 机器人视频 robert sedgewick 算法上 多伦多大学 莱斯大学 华盛顿大学 佐治亚理工学院 神经网络视频 矩阵 coursera在线视频

Text Summarization

Keyword Extraction

Text Processing

Word Similarity

Best Coursera Course

Best Coursera Courses

Elastic Patent

+10 投票

斯坦福大学机器学习斯坦福大学机器学习第十课“应用机器学习的建议(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(决定下一步该如何做)

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

正则化线性回归模型-我爱公开课-52opencourse.com

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

- 获取更多的训练样本

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

- 尝试获得其他特征

- 尝试添加多项组合特征

- 尝试减小 \(\lambda\)

- 尝试增加 \(\lambda\)

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

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

 

2) Evaluating a hypothesis(评估假设)

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

评估假设hypothesis-我爱公开课-52opencourse.com

定义了如下的特征:

房价预测问题特征定义模版-我爱公开课-52opencourse.com

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

房价预测拟合图-我爱公开课-52opencourse.com

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

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

假设评估中的数据集-我爱公开课-52opencourse.com

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

线性回归测试集error-我爱公开课-52opencourse.com

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

逻辑回归测试集error公式-我爱公开课-52opencourse.com

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

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

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

机器学习模型选择过拟合例子-我爱公开课-52opencourse.com

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

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

模型选择多项式回归问题-我爱公开课-52opencourse.com

如何选择模型?

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

5次方多项式回归模型-我爱公开课-52opencourse.com

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

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

训练集误差-验证集误差-测试集误差-我爱公开课-52opencourse.com

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

实践的模型选择过程-我爱公开课-52opencourse.com

 

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

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

a) 高偏差(欠拟合):

高偏差-欠拟合-我爱公开课-52opencourse.com

b) 高方差(过拟合):
高方程-过拟合-我爱公开课-52opencourse.com

c) 合适的拟合:
合适的拟合-我爱公开课-52opencourse.com

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

训练集及交叉验证集的误差-我爱公开课-52opencourse.com

我们会发现:

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

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

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

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

训练集误差和验证集误差画图表示-我爱公开课-52opencourse.com

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

偏差问题还是方差问题-我爱公开课-52opencourse.com

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

偏差方差问题总结-欠拟合过拟合-我爱公开课-52opencourse.com

 

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

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

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

正则化参数过大欠拟合高偏差-我爱公开课-52opencourse.com

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

正则化参数过小过拟合高方差-我爱公开课-52opencourse.com

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

正则化参数合适拟合也合适-我爱公开课-52opencourse.com

那么,如何选择正则化参数 \(\lambda\) ?

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

选择正则话参数的过程-我爱公开课-52opencourse.com

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

作为正则化参数函数的方差和偏差-我爱公开课-52opencourse.com

 

6) Learning curves(学习曲线)

这一小节考虑Learning curves(学习曲线)的问题,主要针对的是训练样本数目来观察训练集误差和验证集误差之间的差异:
训练集误差交叉验证集误差-我爱公开课-52opencourse.com

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

二次项多项式回归-我爱公开课-52opencoruse.com

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

训练误差和验证集误差与训练样本大小的关系-我爱公开课-52opencourse.com

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

高偏差欠拟合问题举例-我爱公开课-52opencourse.com

即使增大了训练样本数目,模型拟合的依然不够,依然还是欠拟合问题。以下是高偏差欠拟合问题的学习曲线:
高偏差欠拟合问题学习曲线-我爱公开课-52opencourse.com

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

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

高方差过拟合问题-我爱公开课-52opencourse.com

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

高方差过拟合学习曲线-我爱公开课-52opencourse.com

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


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

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

- 获取更多的训练样本

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

- 尝试获得其他特征

- 尝试添加多项组合特征

- 尝试减小 \(\lambda\)

- 尝试增加 \(\lambda\)

答案:

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

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

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

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

- 尝试减小 \(\lambda\) - 解决高偏差

- 尝试增加 \(\lambda\) -解决高方差

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

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

简单的神经网络-我爱公开课-52opencourse.com

它的计算代价较少。

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

复杂的神经网络-我爱公开课-52opencourse.com

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

 

参考资料:

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

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

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

李航博士《统计学习方法

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


如转载52opencourse上的任何原创文章,请注明出处,谢谢!
分类:机器学习 | 用户: (3.2k 分)
修改于 用户:

为什么还要有一个交叉验证集呢,有了测试集不就可以算出错误率最小,然后就可以选择模型,加上交叉验证集有什么用呢?

加上交叉验证集使模型泛化能力更好一些。

本来测试集是用来选择参数,现在是使用交叉验证集选择参数,只不过现在是在测试集做了一个评估假设,那这个和本来只用测试集来选择参数用什么区别呢,测试集的评估作用对参数的选择有什么影响呢

 

如果仅仅是用测试集,仅代表这个结果在测试集上是有效的,泛化能力不能得到保证。

这篇文章中写到“我们通过训练集学习到参数, 再计算交叉验证集上的error, 再选择一个在验证集上error最小的模型,最后再在测试集上估计模型的泛化误差(error)”,如果验证集上error最小的模型,但这个模型在测试集上的泛化误差(error)却很大,那怎么选择模型呢,我还是不是很明白即使有交叉验证集,怎么能保证泛化能力

Sorry,你的一些疑惑还是有道理的,我查了一些资料,有些情况下,测试集和验证集是不区分的,这里提供的只是一种泛化的方法。交叉验证还有很多方法,但是主要目的,还是泛化,可以参考一些这篇文章:

http://www.zhizhihu.com/html/y2010/2245.html

交叉验证(Cross validation),有时亦称循环估计, 是一种统计学上将数据样本切割成较小子集的实用方法。于是可以先在一个子集上做分析, 而其它子集则用来做后续对此分析的确认及验证。 一开始的子集被称为训练集。而其它的子集则被称为验证集或测试集。交叉验证是一种评估统计分析、机器学习算法对独立于训练数据的数据集的泛化能力(generalize)
非常感谢

1个回答

+1 投票
从NG在课程中提到的训练、验证、测试集的作用的例子,我的理解是:

训练集 -- 用于学习参数,比如可以训练10个不同阶的线性模型

验证集 -- 用来选择模型,主要考虑的准则是在新的数据上的泛化能力,比如根据各个模型在验证集上的Error值,选择了3阶的模型

测试集 -- 测试模型,测试这个被选中的3阶模型的表现。

倒是没有注意到他的视频中提到n-fold交叉验证的概念。
用户: (160 分)
thanks a lot!
正解
我的理解是,测试集用来评估模型的泛化能力,对泛化能力的要求是最终目的,也就是给一个评价。
...