Stanford机器学习-应用机器学习的建议

1. Deciding what to try next

在这里插入图片描述
前面我们以及学习了线性回归、Logistic回归和神经网络等不同的机器学习算法,那么在实际应用中,如果我们需要设计一个机器学习系统或是想要改进现存的某个系统的性能时,选择一条合适的道路,也就是选择一些适合与实际问题的方法,将达到事半功倍的效果。
在这里插入图片描述
那么我们以前面学习的预测房价的例子来看如何选择。假设我们已经完成了正则化的线性回归,对应的代价函数J(θ)如图所示,我们需要做的就是最小化代价函数,得到学习的参数θ。

接下来将学习到的模型应用到测试集上,看误差的大小。如果在训练集上拟合的很好,而到了测试集上,误差却很大,那么我们如何来改进算法,使其在测试集上仍然取得很好的拟合效果呢?

我们可能会有如下的想法:
• 获得更多的数据
• 尝试更小的特征集
• 尝试得到额外的特征
• 尝试增加特征多项式的特征次项
• 增大或是减小惩罚系数 λ

但是很多人在选择办法的时候都是凭自己的感觉的,总是随便从一些方法中选择一个去做,可能做了很长时间的工作才发现走的是一条不通的路,这样浪费人力物力和时间。实际上,我们可以选择一些方法来排除不好的办法,留下那些可行的,从而最终达到我们想要的目的。
在这里插入图片描述

这就是所说的“机器学习诊断法”,它可以诊断我们的学习算法,并给出一些提升性能的意见,它在实际的应用中将会花很多时间,但是相比走弯路浪费的时间还是值得的。

2. Evaluating a hypothesis

在这里插入图片描述
这节课学习如何来衡量我们针对某一具体问题所提出的假设是否是一个好的假设,从而避免训练过程的欠拟合和过拟合问题。在学习过程中,我们可能会得到一个很小的训练误差,那么这是否就是好的?其实并不一定,可能是发生了过拟合问题,这样的话模型的泛化能力就很差了。
在这里插入图片描述
我们还是来以房价预测的例子来看。假设我们根据得到的数据还有如图所示的多个特征,如果选择的特征足够少时,我们可以通过描点划线的方式直观上看是否发生过拟合,但是如果所选的特征很多时,这样的方法就显得不可操作了,所以我们需要找到一种可以很好的评估假设函数是否会发生过拟合。

在这里插入图片描述
我们进行我们的检测,我们通常将数据集分为训练集和测试集两部分,比例通常为7:3,如果我们的数据本身就是无序的,我们可以直接按段取,但如果本身是有序的,我们就需要随机取,保证数据之间的相关性小,我们使用上图右边的标记来表示数据。

测试集评估在通过训练集让我们的模型学习得出参数后,在测试集上应用该模型,来计算误差。
在这里插入图片描述
对于线性回归来说,我们计算测试数据上的代价函数Jtest(θ)

在这里插入图片描述
对于Logistic回归模型来说,我们除了计算上图所示的代价函数Jtest(θ)外,我们还可以计算分类的错误率,对于每一个测试数据来说,计算如下:

在这里插入图片描述
然后求平均计算结果。

3. Model selection and training/validation/test sets

在这里插入图片描述
在这里插入图片描述
在前面我们的例子中,假设我们的hθ(x)函数多项式最高次是4次,在训练集上我们可以得到一个很小的误差,但是在测试集上,也许结果就不如我们愿了。
在这里插入图片描述
我们知道多项式的次数越高,对于数据的拟合效果就越好,但是由于会发生过拟合现象,所以它的泛化能力对应就会下降。假设我们针对如上图所示的10个模型进行选择,我们可以对每一个假设函数计算一个代价函数值,通过比较,我们选择d=5(d表示多项式的次数)的函数。但是在测试集上是否也能如此的好呢?为此我们需要计算测试集上的代价。
在这里插入图片描述
为了是我们的模型更能适应一般的情况,我们这里使用交叉验证,如上图所示,我们将数据集分为训练集、交叉验证集和测试集,比例通常为6:2:2。计算的公式如下,也就是分别计算之上三个数据集上的代价函数的值。
在这里插入图片描述
在这里插入图片描述
对应的模型的选择方法为:
1. 使用训练集训练出10个模型
2. 用10个模型分别对交叉验证级计算交叉验证误差
3. 选择代价函数最小的模型
4. 用步骤3的选择的模型在测试集上计算泛化误差

4. Diagnosing bias vs. variance

在这里插入图片描述

当我们的算法在数据集上表现的不好时,要么就是偏差比较大,要么就是方差比较大,或是二者皆有,换种说法就是要么发生欠拟合要么发生过拟合。判断实际的情况到底是哪一种,对于我们之后的改进工作至关重要。
在这里插入图片描述
在上面的数据集上,当我们选择不同的假设函数时,拟合的效果就会不同,第一个时欠拟合,也就是偏差较高;第二个拟合效果很好;第三个是发生了过拟合,也就是方差比较大。

在这里插入图片描述
我们的代价函数如上图所示,用来计算误差值,如果将得到的不同的d的误差值描点划线的话,可以得到如图所示的曲线图。

在这里插入图片描述
假设我们的学习算法并不如我们想象中那样好,那么到底是哪一种原因呢,通过分析我们得到的曲线我们可以得到,当d较小时,就会发生欠拟合现象,这时我们在训练集上的代价函数值会很高,交叉验证误差和和训练误差差不多相等,这时的偏差较大;当我们的d过大时,在训练集上的拟合效果就会很好,但是由于泛化能力下降,在交叉验证集上的误差就会很大,这时的方差就会偏大。

5. Regularization and bias/variance

在这里插入图片描述
在前面的算法中,我们使用正则化来避免过拟合现象的发生,但是当我们选择不同的 λ时,对于归一化的效果影响很大。
在这里插入图片描述
当我们的 λ取的很大时,Θ1往后的参数约等于0,此时只有θ0 ,那么拟合的线就是一条平行与x轴的直线,此时发生欠拟合,偏差较大;当我们的λ合适时,拟合的效果就会很好;当我们的λ过小时,发生过拟合现象,此时方差较大。
在这里插入图片描述
那么如何知道哪一个 λ是比较合适的呢?我们通常按照一定的步长来尝试一系列的 λ,根据选择的函数,计算不同的代价函数值,具体的方法为:
1. 使用训练集训练出12个不同程度归一化模型
2. 用12个模型分别对交叉验证级计算误差值
3. 选择的出交叉误差最小的模型
4. 根据上面得到的模型计算泛化误差,同时将训练集和交叉验证集的代价函数误差和λ画在一张图上。
在这里插入图片描述

在画出的图上,我们就可以看出在取不同的λ时我们模型的偏差值和方差值的情况:
• 当λ较小时,我们的训练误差较小,但是交叉验证的误差很大
• 随着λ的增大,训练误差逐渐变大,交叉验证误差是先减后增。

6. Learning curves

在这里插入图片描述
那么有没有一种工具可以在做我们上面想做的事呢?那就是学习曲线,它可以用来判断我们的学习算法是否存在偏差或是方差问题。
在这里插入图片描述
学习曲线是将训练集误差和交叉验证集误差作为m的函数绘制的图,我们不断的增大m来看训练误差和交叉验证误差的情况。。

在这里插入图片描述
那么如何利用学习曲线来识别高偏差呢?假设我们的模型如图右所示,我们试图通过一条直线来拟合数据,当我们的数据较少时,我们可以看出效果似乎还不错,但是数据较多时,效果就不是很好了。

通过学习曲线我们可以看出,如果我们的学习算法偏差很高时,即使增加训练数据的量,对于效果的提升并不好。
在这里插入图片描述
同样我们如何识别高方差呢?假设我们的模型的多项式的次数很高时,而且归一化程度非常小,当交叉验证误差远大于训练集误差时,增加训练数据的量,可以有效的提高模型的效果。

7. Deciding what to try next

在这里插入图片描述
前面我们学习了如何评价一个学习算法,如何选择合适的模型,如何看偏差和方差问题。那么不同的方法是怎么样来改进模型效果的呢?
在这里插入图片描述
在最开始的例子,我们看一下具体情况具体使用哪一种方法:
• 获得更多的训练实例–解决高方差
• 尝试减少特征的数量–解决高方差
• 尝试获取更多的特征–解决高偏差
• 尝试增加多项式特征–解决高偏差
• 尝试减小归一化程度–解决高偏差
• 尝试增加归一化程序–解决高方差

在这里插入图片描述
那么在神经网络中,如果我们使用较小的神经网络时,容易导致高偏差和欠拟合;但是使用比较大的神经网络时,除了计算量很大外,很容易发生高方差和过拟合。

根据经验,通常选择较大的神经网络并采用归一化处理会比采用较小的的神经网络效果更好。对于神经网络中隐藏层的层数的选择,通常从一层开始逐渐增加层数,为了更好的选择,我们同样可以将数据分为训练集、交叉验证集和测试集,针对不同的层数训练模型,然后选择交叉验证集最小的神经网络。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值