吴恩达机器学习笔记(九)——机器学习系统的建议

本文介绍了如何改进和诊断机器学习模型的性能。通过训练集和测试集的划分评估模型,解决欠拟合和过拟合问题,以及如何通过正则化选择最佳的模型复杂度。此外,学习曲线和交叉验证集的使用也是关键,帮助我们判断模型的偏差和方差,指导我们是增加训练数据、减少特征、增加多项式特征,还是调整正则化参数λ。
摘要由CSDN通过智能技术生成

1.决定下一步做什么

假设我们已经实现了一个机器学习系统,但是他的预测表现并不是太好。那么我们就需要想办法去改进我们的机器学习系统,下面是我们通常会想到的一些办法:

  1. 获取更多的训练集
  2. 减少特征的数量(防止过拟合)
  3. 增加特征的数量
  4. 增加更多高阶多项式特征(x12,x22,x1x2等等)
  5. 尝试增大lamda
  6. 尝试减小lamda

但是大部分人对于上面方法的选择都是靠感觉来选择的,因此很可能一开始选择努力的方向就是错误的
在接下来的小节中,我们会讨论机器学习模型的诊断方法

2.评估假设

对于两个维度的数据,我们通常可以绘图查看他的拟合效果。
在这里插入图片描述
如上图中,我们很明显看到它是过拟合的。
但是如果特征数很多的话,可视化的方法是不太方便的。

下面介绍一个评估假设的标准方法:将数据集划分成训练集和测试集。通常我们会使用70%的数据集作为训练集,30%的数据集作为测试集。当然,我们不一定要按照顺序选择训练集和测试集,随机选取70%的数据作为训练集和30%的数据作为测试集显然是一个更好的办法。如下图所示:
在这里插入图片描述
通过完成训练集和测试集的划分之后,我们就需要去评价我们模型的效果。

线性回归为例,评估的步骤主要如下图所示:

  1. 通过训练集学习模型的参数(最小化训练集的代价函数J(θ))
  2. 计算测试集的代价函数
    在这里插入图片描述

对于逻辑回归而言,其实原理也是一样的,主要步骤如下:

  1. 通过训练集学习模型的参数(最小化训练集的代价函数J(θ))
  2. 计算测试集的代价函数
    在这里插入图片描述

另外一种评价测试集错误的方法就是计算测试集中的错误率,具体定义如下
在这里插入图片描述

3.模型选择问题

对于一些模型而言,有时候即使在训练集中表现良好,但是对于训练集之外的数据也并不一定具有很好的泛化能力。
那么,我们如何最好地去拟合数据的多项式次数,具体步骤如下图所示:
在这里插入图片描述
步骤总结具体如下

  1. 定义不同的多项式函数(d=1、d=2、…、d=10)
  2. 通过训练集最小化每个模型的代价函数,得到θ(i)
  3. 分别选取每一种假设和它相应的参数θ(i),然后计算出它在测试集上的性能(计算Jtest(i)))
  4. 选择拥有最小的Jtest(θ)的模型

从上面的步骤中,我们通过测试集选出了最优的模型。但是我们不能又使用测试集去验证模型的泛化能力,因此这里必须引入交叉验证集的概念。

对此,**我们需要将数据集划分成三个部分:训练集(60%)、交叉验证集(20%)、测试集(20%)。**具体如下图所示:
在这里插入图片描述
紧接着,我们可以对训练集、交叉验证集、测试集分别定义误差,如下图所示:
在这里插入图片描述
最后,我们尝试用训练集得到各个模型的最优参数集、使用交叉验证集选取模型,最后用测试集计算误差,如下图所示:
在这里插入图片描述
步骤总结具体如下

  1. 定义不同的多项式函数(d=1、d=2、…、d=10)
  2. 通过训练集最小化每个模型的代价函数,得到θ(i)
  3. 分别选取每一种假设和它相应的参数θ(i),然后计算出它在交叉验证集上的性能(计算Jcv(i)))
  4. 选择拥有最小的Jcv(θ)的模型
  5. 将选择的模型应用在测试集中测试模型的泛化能力

4.诊断偏差和方差

当模型不理想的时候,通常也就是分为两种情况:偏差问题(欠拟合问题)和方差问题(过拟合问题)。如下图所示:
在这里插入图片描述
图一就是高偏差,图二拟合较好,图三则是高方差问题。

下面通过几幅图进一步了解偏差和方差的概念。
在这里插入图片描述
对于上图,我们需要注意以下几个点:

  1. 首先看粉色的线,代表训练集的误差。随着多项式d的增大,拟合效果会越来越好,因此Jtrain(θ)会不断减小。
  2. 再看橙色的线,代表交叉验证集的误差。刚开始的时候,由于多项式d较小,模型拟合效果较差,因此Jcv(θ)也比较大。但是随着多项式d的不断增大,Jcv(θ)会不断减小。但是当多项式d继续增大,会出现训练集的过拟合现象,从而造成Jcv(θ)重新变大。

那么,我们如何区分我们的模型是高偏差还是高方差呢,如下图所示:
在这里插入图片描述
在上图中我们需要注意以下两点方面:

  1. 高偏差的模型(欠拟合),通常会表现为Jtrain(θ)比较高,且Jcv(θ)≈Jtrain(θ)。
  2. 高方差的模型(过拟合),通常会表现为Jtrain(θ)比较低,且且Jcv(θ) >> Jtrain(θ)。

5.正则化和偏差、方差

本节要讨论的是正则化项是如何影响偏差和方差的。

正则化项对于模型的影响主要如下图所示:
在这里插入图片描述
对于上图,我们需要注意以下几点:

  1. 对于第一张图,λ特别大,导致各个参数被惩罚地很严重,hθ(x)相当于一条直线,这时就是一个高偏差的现象。
  2. 对于第二张图,选择了合适的lamda,因此模型拟合程度较好
  3. 对于第三张图,λ特别小,对各个参数几乎没有惩罚,出现了过拟合现象,也就是一个高方差的现象。

那么如何选择一个比较适合的lamda呢?
首先要分别定义好训练集、交叉验证集和测试集的代价函数,如下图所示:
在这里插入图片描述
需要注意的是,对于训练集,我们为了获得更好的假设函数,所以在代价函数中需要加入正则化项。但是对于交叉验证集和测试集的代价函数,则不需要加入正则化项。

对于lamda具体如何选择,如下图所示:
在这里插入图片描述
具体步骤如下:

  1. 根据不同的lamda分别计算Jtrain(θ),得到最优的θ(i)
  2. 根据交叉验证集,计算每一种模型的Jcv(θ),选出表现最好的模型
  3. 对于第二步选择的模型,利用测试集测试模型的泛化能力。

接下来我们通过可视化的方法来看下λ对于高偏差和高方差的影响。如下图所示:
在这里插入图片描述
从上图中,我们需要注意以下几个方面:

  1. 蓝色曲线代表训练集的误差,当lamda比较小的时候会出现过拟合现象,因此error也比较小。当lamda逐渐增大后,会出现欠拟合现象,因此error也会逐渐上升。
  2. 粉红色曲线代表交叉验证集的误差。当lamda比较小,出现过拟合的时候,error比较大。当lamda比较大,出现欠拟合的时候,error同样会比较大。

6.学习曲线

我们通常会利用学习曲线去判断一个算法是否处于偏差、方差问题,或者是二者皆有。

对于学习曲线,我们会采用训练样本逐渐增多的方法来进行可视化,如下图所示:
在这里插入图片描述
对于上图,我们需要注意以下几个方面:

  1. 蓝色曲线代表训练集误差Jtrain(θ),我们会发现当样本比较少的时候,拟合效果也比较好,误差也比较小。但是随着样本增多,拟合效果就没有那么好了,误差也就会逐渐增大。
  2. 粉红色曲线代表交叉验证集误差Jcv(θ),我们会发现,当数据量比较小的时候,模型的假设不是很好,因此验证集误差比较大。但是随着数据量增大,模型的假设会变得更好,因此验证集误差会逐渐减小。

对于高偏差的模型,它的学习曲线通常会如下图所示:
在这里插入图片描述
对于上图,我们需要注意以下几个方面:

  1. 首先对于右边的两幅小图,我们可以看到假设的是一元函数,随着数据量的增大,其实还是一个一元函数,拟合效果并不是很好
  2. 对于左边的图,粉红色曲线代表训练集误差,可以看到随着样本数量的增大,训练集误差也会逐渐增大
  3. 对于左边的图,蓝色曲线代表交叉验证集误差,可以看到随着样本数量的增大,交叉验证集的误差会逐渐下降,但是很快就会趋于平缓
  4. 我们从上图中,可以观察到,当模型出现高偏差的时候,随着样本数量的增大,训练集误差会逐渐增大,交叉验证集误差会逐渐下降。但是最后两者会比较接近。
  5. 通过上图,我们可以知道当模型出现高偏差的时候,增大数据量对于模型的改进意义不大,因为误差是比较大的。

对于高方差的模型,它的学习曲线通常会如下图所示:
在这里插入图片描述

对于上图,我们需要注意以下几个方面:

  1. 首先对于右边的两幅小图,我们可以看到假设的是一个十分复杂的多项式函数,容易出现过拟合现象
  2. 对于左边的图,蓝色曲线代表训练集误差,可以看到随着样本数量的增大,训练集误差也会逐渐增大,但是仍然处于一个比较低的水平
  3. 对于左边的图,粉红色曲线代表交叉验证集误差,可以看到随着样本数量的增大,交叉验证集的误差会逐渐下降
  4. 我们从上图中,可以观察到,当模型出现高方差的时候,随着样本数量的增大,训练集误差会逐渐增大,但是并不会太大。交叉验证集误差会逐渐下降。
  5. 通过上图,我们可以知道当模型出现高方差的时候,增大数据量是存在一定的意义的,可以在这方面尝试努力

特别注意上面的绘图中,训练集的误差是0~size的误差,而交叉验证集的误差是整个的误差,而不是 0~size的交叉验证集误差。

7.决定接下来做什么

对于第一小节提到的模型改进方法,分别进行总结不同适用的情况。

  1. 尝试更多的训练集——适用于模型处于高方差的状态
  2. 尝试减少特征的数量——适用于模型处于高方差的状态。但是如果发现模型是处于高偏差的状态,切记不要浪费时间在试图从已有的特征中挑出一小部分来使用,因为你已经有高偏差的问题了,使用更少特征也无济于事。反过来,如果你发现模型处于高方差的状态,从中挑选出一部分合适的特征则是正确的选择。
  3. 尝试增加特征的数量——适用于模型处于高偏差的状态。
  4. 尝试增加多项式特征——适用于模型处于高偏差的状态。
  5. 尝试减小λ——适用于模型处于高偏差的状态。
  6. 尝试增大λ——适用于模型处于高方差的状态。

最后介绍一下神经网络模型的修正方法,如下图所示:
在这里插入图片描述
对于上图,我们需要注意以下几点:

  1. 小型神经网络计算量比较小,但是容易出现欠拟合现象
  2. 大型神经网络拟合效果会比较好,但是计算量比较大,容易出现过拟合现象
  3. 通常会选择较大型的神经网络,因为即使出现过拟合现象,也可以使用正则化的方式进行修正。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值