吴恩达机器学习笔记—机器学习的建议

       我们很多时候需要对已有的机器学习系统进行改进。改进的方法有很多(如下图),但是我们怎么才能选择一个有效的方法?这章会介绍“机器学习诊断法”,一个测试系统的存在问题的方法,告诉你系统所存在的问题,你怎么去改进才有意义。

07b47a7200e4f4d82e2e879038faf86025d.jpg

1、假设评价

      怎么评价你的算法,学习得到假设。我们之前的学习过拟合知道,训练误差最小的假设并不一定是好假设,有可能会是一个过拟合假设。当特征数量较多时,我们无法再像一个特征一样画假设函数图h(x)来观察假设函数的好坏。之前的课程我们有学习到,通俗地讲过拟合就是无法对新的样本泛化,所以据以这点我们可以用一种较通用的“外部检验”的方法来评价假设。

①随机选取70%的样本数据作为训练模型的训练数据train样本,剩下30%的样本数据作为检验模型的test数据。

②利用训练数据train样本,学习得到参数组。

③将train得到的参数组代入test数据,得到假设函数的预测误差(分类误差)。

2、模型选择和训练、验证、测试集

       对于一个数据集最合适的多项式次数,怎样选择正确的特征来构造学习算法,或者你需要选择学习算法中的正则化参数lambda,你该怎么做?这类问题被叫作模型选择问题。

      在学习“过拟合”的时候我们发现,训练样本的误差不能评价该假设对新样本的拟合好坏。具体来说,就是你用这些训练数据求解得到的参数组代入假设中,得到的假设不一定对新的样本具有多好的泛化能力。

为了解决这个问题我们首先把数据集分成三部分:训练集、验证集、测试集。经典比例为60%、20%、20%(比例可以调整)。具体过程:1)用训练集用于求解多项式假设参数组,2)用验证集交叉验证确定多项式的次数,得到假设模型,3)测试集用于评价假设,得到模型的泛化能力。

0137c6a070a313af3b9f363397d1b24b084.jpg

计算训练误差、交叉验证的训练误差、测试误差的公式:

c2a9177f84a961ea563d1f86adb20e4bb01.jpg

3、诊断偏差与方差

      在学习如何区分偏差问题还是方差问题时,我们先来回顾一下之前学习的欠拟合和过拟合的区别。下图左边为选择的多项式次数过低,得到的假设函数无法很好地拟合样本,称为“欠拟合”。同理,下图右边为选择的多项式次数过低,得到的假设函数非常好地拟合样本,但是缺乏泛化能力,称为“过拟合”。

2a2718426923276d200a828cef65f2ec4c4.jpg

在前面我们知道了训练误差和交叉验证误差。我们可以画出训练误差和交叉验证误差随多项式次数变化地趋势图,如下

44744af9c61128f8b503847132fb36dabc0.jpg

我们希望得到的算法,训练误差和交叉验证误差都尽量小。下图,当训练误差和交叉验证误差都很大时,对于的就是高偏差问题(欠拟合);当训练误差很小,但交叉验证误差却很大时,对于的就是高方差问题(过拟合)。

934873a31831e60bcc1baf96da8289f0223.jpg

4、正则化和偏差、方差

已经知道算法正则化可以有效地防止过拟合,但是正则化和偏差、方差又有什么关系呢?

1)正则化和偏差、方差的关系:如下图,这是一个带正则化项的线性回归模型,左边当正则参数396413ba7dd0baa47a80ca4c9858e79672c.jpg过大时,成为欠拟合问题即偏差问题;当正则参数396413ba7dd0baa47a80ca4c9858e79672c.jpg过小时,成为过拟合问题即方差问题。

d0694fc79eb5dc0081554682ce5573c907b.jpg

2)如何自动选择一个合适的正则参数396413ba7dd0baa47a80ca4c9858e79672c.jpg的值?

前面我们学习了训练误差、验证误差、测试误差的计算公式如下图,我么可以知道训练误差、验证误差、测试误差是不带正则项的误差。

a1f6bbd5b3d64c527dbce0cf36699839a84.jpg

选取一系列正则参数396413ba7dd0baa47a80ca4c9858e79672c.jpg的值进行尝试,每个396413ba7dd0baa47a80ca4c9858e79672c.jpg值代入一个模型,计算得到交叉验证误差,选取交叉验证误差最小的正则参数396413ba7dd0baa47a80ca4c9858e79672c.jpg值。最后利用交叉验证集来拟合参数,这就是验证数据的作用。

1baea581132c7300d7c9810e0276688fb40.jpg

3)下图是偏差、方差与396413ba7dd0baa47a80ca4c9858e79672c.jpg的关系图:当396413ba7dd0baa47a80ca4c9858e79672c.jpg过小时,正则项几乎为零,过拟合现象,即高方差;当396413ba7dd0baa47a80ca4c9858e79672c.jpg过大时,高次项参数为零,呈一条直线,欠拟合现象,即高偏差。减小396413ba7dd0baa47a80ca4c9858e79672c.jpg可以修正高偏差,增大396413ba7dd0baa47a80ca4c9858e79672c.jpg可以修正高方差。

0d76b56a9d89736674d1e5803e376a9b7a8.jpg

5、学习曲线

学习曲线是一种用于判断某一个算法是否处于偏差、方差问题特别好的工具。

一般拟合效果较好的算法如下图,以二项式为例当训练样本量足够小时,模型能很容易拟合样本数据,训练误差会很小。当训练样本数量越大,训练误差会增大。而当训练样本量足够小时,训练模型泛化能力差,交叉验证误差会很大;随训练样本数量越大,交叉验证误差会减小。我们能可以通过这样的学习曲线较好地判断偏差很方差问题。

3222b2543248c8fce0ce1278a129408d1e0.jpg

1)如下图当算法出现高偏差情况时,当训练样本数量大于某个值时,交叉验证误差和测试误差几乎呈直线变化趋势,并差距很小。增加样本数量无法使得交叉验证误差和测试误差有很好的改善,即大量增加样本数量,交叉验证误差和测试误差变化不大,可以判断算法出现高偏差问题。不需要把时间浪费在收集更多训练数据上。

bae35520c6a40a4fb11d2f08cafeffd1f6f.jpg

2)如下图当算法出现高方差情况时,交叉验证误差和测试误差差距很大。增加样本数量使得交叉验证误差和测试误差的差距变小,即大量增加样本数量,交叉验证误差和测试误差变化较大,并不断靠近,可以判断算法出现高方差问题。需要把时间发在收集更多训练数据上。

c4c7ef7897378bc6fcdc6827e9bf7564a32.jpg

6、总结

当诊断出算法为高偏差还是高方差问题之后,你可从下面几个方向入手解决。

高偏差问题:

1)增加特征:选择地训练特征过少

2)增加多项式特征:类似1,增加多项式地次数

3)减小396413ba7dd0baa47a80ca4c9858e79672c.jpg

高方差问题:

1)增加训练样本

2)减少已选特征

3)增大396413ba7dd0baa47a80ca4c9858e79672c.jpg

c1bb18b0fbf2488f3a0716e2e8cbb77f9b6.jpg

以神经网络为例,如何选择神经网络的结构和连接方式。下图三个神经网络模型,左边的神经网络模型隐藏层简单,隐藏单元少,特征参数少,计算容易,但容易出现“欠拟合”;第二、三个为比较大型神经网络模型,隐藏层单元数多或隐藏层数量多,计算量大,拟合效果好,但容易出现“过拟合"。这时我们需要加入正则化,解决过拟合问题。

c635eb5899e0461665a84f26875db1088b1.jpg

转载于:https://my.oschina.net/u/3767735/blog/1862280

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值