吴恩达-机器学习公开课 学习笔记 Week6-1 Advice for Applying Machine Learning
6-1 Advice for Applying Machine Learning 课程内容
此文为Week6 中Advice for Applying Machine Learning的部分。
6-1-1 Evaluating a Learning Algorithm
Deciding What to Try Next
仍然使用预测房价的学习例子。假如你已经完成了正则化线性回归,也就是最小化代价函数J的值。假如,在你得到你的学习参数以后,如果你要将你的假设函数放到一组新的房屋样本上进行测试。假如说你发现在预测房价时 产生了巨大的误差。要想改进这个算法,接下来应该怎么办?
- 获取更多训练样本(实际上,有时候收集更多样本于事无补)
- 尝试选用更少的特征集(防止过拟合)
- 用更多的特征
- 增加多项式特征的方法(x12,x22 ,x1x2 …)
- 增加正则化参数λ
- 减小正则化参数λ
机器学习诊断法: 这是一种测试法。你通过执行这种测试能够深入了解某种算法到底是否有用。这通常也能够告诉你要想改进一种算法的效果,什么样的尝试才是有意义的。
Evaluating a Hypothesis
如下给出了一种评估假设函数的标准方法***:
假设我们有这样一组数据组,在这里我只展示出10组训练样本。为了确保我们可以评估我们的假设函数,我们要做的是,将这些数据分成两部分:第一部分将成为我们的训练集*,而第二部分将成为我们的测试集。
***其中一种典型的分割方法是按照7:3的比例,将70%的数据作为训练集,30%的数据作为测试集。***但如果这组数据有某种规律或顺序的话,那么最好是***随机***选择70%作为训练集,剩下的30%作为测试集。当然如果你的数据已经随机分布了,那你可以选择前70%和后30%。
接下来,这里展示了一种典型的方法。你可以按照这些步骤训练和测试你的学习算法。
线性回归算法:
- 对训练集进行学习得到参数θ,具体来讲就是最小化训练误差J(θ)
- 计算测试误差,这实际上是测试集平方误差的平均值
分类问题,使用逻辑回归算法: - 对训练集进行学习得到参数θ
- 计算测试误差
这里的误差其实叫误分类率,也被称为0/1错分率,0/1表示了你预测到的正确或错误样本的情况。
Model Selection and Train/Validation/Test Sets
假如你想要确定对于某组数据最合适的多项式次数是几次?怎样选用正确的特征来构造学习算法,或者假如你需要正确选择学习算法中的正则化参数λ 你应该怎样做呢?这些问题我们称之为模型选择问题。
d表示的就是你应该选择的多项式次数。看看这些模型中哪一个对应的测试集误差最小。
这并不能较为公平地预测出假设函数的在遇到***新样本***时的表现。为了解决这一问,在模型选择中,如果我们想要评价某个假设,我们通常采用以下的方法:
给定某个数据集,和刚才将数据分为训练和测试集。不同的是,我们要将其分为三段:第一部分还是叫训练集,第二部分我把它叫做交叉验证集(cross validation set),最后一部分依然和以前一样是测试集。
一种典型的分割比例是将60%的数据分给训练集,大约20%的数据给交叉验证集,最后20%给测试集。
我们现在要使用***交叉验证集***来选择模型。
- 我们用第一个假设函数,也就是第一个模型。
- 求代价函数的最小值,然后我们会得到这个线性模型对应的参数向量θ。
- 这样可以得到θ(2) 然后是θ(3) 等等以此类推
- 在交叉验证集中测试这些假设的表现Jcv,选择的是交叉验证集误差最小的那个假设
这样我们就回避了测试集的嫌疑,我们可以光明正大地使用测试集来估计所选模型的泛化误差了。
6-1-2 Bias vs. Variance
Diagnosing Bias vs. Variance
当你运行一个学习算法时,如果这个算法的表现不理想,那么多半是出现两种情况。要么是偏差比较大,要么是方差比较大。换句话说,出现的情况要么是欠拟合,要么是过拟合问题。
我们沿用之前所使用的训练集误差和验证集误差的定义,也就是平方误差即对训练集数据进行预测或对验证集数据进行预测所产生的平均平方误差。
高偏差(对应欠拟合):交叉验证误差和训练误差都会很大。
高方差(对应过拟合):训练误差很小,交叉验证误差远远大于训练误差。
Regularization and Bias/Variance
------【图中代价函数J(θ)正则化式子应为∑j=1n】------
------【图中代价函数J(θ)正则化式子应为∑j=1n】------
应该怎样自动地选择出一个最合适的正则化参数 λ 呢?
我们对于训练误差Jtrain Jcv Jtest的定义都是平均误差平方和 或者准确地说是训练集、验证集和测试集进行预测,在不使用正则化项时,平均误差平方和的一半。
------【图中代价函数J(θ)正则化式子应为∑j=1n】------
------【图中代价函数J(θ)正则化式子应为∑j=1n】------
自动选取正则化参数 λ 的方法:
- 选取一系列想要尝试的 λ 值
- 选用第一个模型,最小化我们的代价函数 J(θ) 这样我们就得到了某个参数向量 θ
- 以此类推,获得θ1、θ2、θ3…
- 用交叉验证集来评价这些假设和参数,选取这12个模型中交叉验证集误差最小的那个模型作为最终选择
- 经过学习得到的模型来测出它对测试集的预测效果如何
------【图中代价函数J(θ)正则化式子应为∑j=1n】------
------【图中代价函数J(θ)正则化式子应为∑j=1n】------
如果正则化项参数 λ 的值很小,有很大可能处于过拟合,处于高方差问题。
如果 λ 值取的很大的时候,有可能处于高偏差,处于欠拟合问题。
------【图中代价函数J(θ)正则化式子应为∑j=1n】------
------【图中代价函数J(θ)正则化式子应为∑j=1n】------
Learning Curves
学习曲线:判断某一个学习算法是否处于偏差、方差问题,或是二者皆有。
随着训练集容量m的增大,我们不难发现我们的平均训练误差 Jtrain是逐渐增大的。
验证集误差J cv 会随着训练集样本容量m的增加而减小。 因为你使用的数据越多,你越能获得更好地泛化表现,或者说对新样本的适应能力更强。因此,数据越多越能拟合出合适的假设。
假如你的假设处于高偏差问题:训练集误差逐渐增大,一直趋于接近交叉验证集误差。
如果一个学习算法有很大的偏差,那么当我们选用更多的训练样本时,随着我们增大样本容量m,我们发现交叉验证集误差的值不会表现出明显的下降,实际上是变为水平了。所以如果学习算法正处于高偏差的情形,那么选用更多的训练集数据对于改善算法表现无益。
假如你的假设处于高方差问题:在训练集误差和交叉验证集误差之间有一段很大的差距。
如果继续增大训练样本的数量,曲线向右延伸,交叉验证集误差将会逐渐下降。所以,在高方差的情形中,使用更多的训练集数据对改进算法的表现,事实上是有效果的。
这两个学习曲线都是相当理想化的曲线。
Deciding What to Do Next Revisited
之前我们总结了改进新样本出现误差算法的方法:
- 【高方差问题适用】 获取更多训练样本
- 【高方差问题适用】 尝试选用更少的特征集
- 【高偏差问题适用】 用更多的特征
- 【高偏差问题适用】 增加多项式特征的方法
- 【高方差问题适用】 增加正则化参数λ
- 【高偏差问题适用】 减小正则化参数λ
评价一个模型的性能只能用测试集,CV集是用来调整模型degree的,也就是特征的次数。
相对比较简单的神经网络模型:
- 隐藏单元/层比较少
- 容易出现欠拟合
- 计算量较小
相对较大型的神经网络结构: - 隐藏层/单元比较多
- 参数一般较多,也更容易出现过拟合 (利用正则化修正,增加λ:比小型网络效果更好,计算量大)
- 计算量较大
测验 Advice for Applying Machine Learning
课程链接
https://www.coursera.org/learn/machine-learning/home/week/6