吴恩达机器学习(十一)—— 应用机器学习的建议

吴恩达机器学习系列内容的学习目录 → \rightarrow 吴恩达机器学习系列内容汇总

1. 决定下一步做什么

  假设我们正在开发一个机器学习系统,或者想试着改进一个机器学习系统的性能,那么我们该如何去决定接下来要选择哪条道路呢?
  看一个例子,假设我们已经实现了预测房价的正则化线性回归,也就是最小化代价函数的值,但是当我们运用训练好了的模型来预测未知数据的时候发现存在较大的误差,我们下一步需要做什么?

  • 使用更多的训练样本:通过电话调查或上门调查来获取更多不同的房屋出售数据,但有时候获得更多的训练数据实际上并没有作用,所以我们需要尝试其他的方法;
  • 尝试选用更少的特征:如果我们有一系列特征例如 x 1 x_{1} x1 x 2 x_{2} x2 x 3 x_{3} x3等等很多特征,也许我们可以花一点时间从这些特征中仔细挑选一小部分来防止过拟合;
  • 尝试获取更多的特征:从获取更多特征的角度来收集更多的数据,我们可以把问题扩展为一个很大的项目,比如使用电话调查来得到更多的房屋案例,或者再进行土地测量来获得更多有关土地的信息等等,因此这会是一个复杂的问题;
  • 尝试增加多项式特征:例如增加 x 1 2 x_{1}^{2} x12 x 2 2 x_{2}^{2} x22 x 1 x 2 x_{1}x_{2} x1x2项等等;
  • 尝试减少正则化参数 λ \lambda λ
  • 尝试增加正则化参数 λ \lambda λ

  我们不应该随机选择上面的某种方法来改进我们的算法,而是运用一些机器学习诊断法来帮助我们知道上面哪些方法对我们的算法是有效的。“诊断法”的意思是:这是一种测试法,我们通过执行这种测试,能够了解算法到底是哪出了问题,这通常也能够告诉我们要想改进一种算法的效果,什么样的尝试才是有意义的。这些诊断法的执行和实现是需要花些时间的,有时候确实需要花很多时间来理解和实现,但这样做的确是把时间用在了刀刃上,因为这些方法会让我们在开发机器学习算法时提早发现哪些方法是无效的,从而节省几个月的时间。

2. 评估假设函数

  怎样用我们学过的算法来评估假设函数?
在这里插入图片描述

图1 预测房价过拟合

  当我们确定学习算法的参数时,考虑的是选择参数来使训练误差最小化。有人认为得到一个非常小的训练误差一定是一件好事,但我们已经知道,仅仅因为这个假设函数具有很小的训练误差并不能说明它一定是一个好的假设函数。而且我们也学习了过拟合假设函数的例子,如图1所示,过拟合假设函数推广到新的训练集上是不适用的,所以不能仅靠具有很小的训练误差就说一个假设函数是好的假设函数。 那么,我们该如何判断一个假设函数是否过拟合?
  对于预测房价这个简单的例子,我们可以对假设函数进行绘图,然后观察图形趋势;但对于有很多特征变量的情况,想要通过画出假设函数的图形来进行观察,就会变得很难甚至不可能实现。 因此,我们需要另一种方法来评估我们的假设函数是否过拟。
  为了检验算法是否过拟合,我们将数据分成训练集和测试集,通常用70%的数据作为训练集,用剩下30%的数据作为测试集。很重要的一点是训练集和测试集均要含有各种类型的数据,通常我们要对数据进行“洗牌”,然后再分成训练集和测试集。所以说如果这组数据有某种规律或顺序的话,那么最好是随机选择70%的数据作为训练集,30%的数据作为测试集。
  测试集评估在通过训练集让我们的模型学习得出其参数后,对测试集运用该模型,我们有两种方式计算误差:

  • 线性回归
      -对训练集进行学习得到参数 θ \theta θ(即最小化训练误差 J ( θ ) J(\theta) J(θ));
      -计算测试误差 J t e s t ( θ ) = 1 2 m t e s t ∑ i = 1 m t e s t ( h θ ( x t e s t ( i ) ) − y t e s t ( i ) ) 2 J_{test}(\theta)=\frac{1}{2m_{test}}\sum_{i=1}^{m_{test}} (h _{\theta}(x_{test}^{(i)})-y_{test}^{(i)})^{2} Jtest(θ)=2mtest1i=1mtest(hθ(xtest(i))ytest(i))2
  • Logistic回归
      -对训练集进行学习得到参数 θ \theta θ
      -计算测试误差 J t e s t ( θ ) = − 1 m t e s t ∑ i = 1 m t e s t [ y t e s t ( i ) l o g ( h θ ( x t e s t ( i ) ) ) + ( 1 − y t e s t ( i ) ) l o g ( 1 − h θ ( x t e s t ( i ) ) ) ] J_{test}(\theta)=-\frac{1}{m_{test}}\sum_{i=1}^{m_{test}} [ y_{test}^{(i)} log(h_{\theta}(x_{test}^{(i)})) + (1-y_{test}^{(i)}) log(1-h_{\theta}(x_{test}^{(i)})) ] Jtest(θ)=mtest1i=1mtest[ytest(i)log(hθ(xtest(i)))+(1ytest(i))log(1hθ(xtest(i)))]
      -错误分类误差 e r r ( h θ ( x ) , y ) = { 1     i f     h θ ( x ) ⩾ 0.5     a n d     y = 0 ,     i f     h θ ( x ) ⩽ 0.5     a n d     y = 1 0     o t h e r w i s e                                                                                                                                         T e s t     e r r o r = 1 m t e s t ∑ i = 1 m t e s t e r r ( h θ ( x t e s t ( i ) ) , y t e s t ( i ) )                                                                                                     \begin{matrix}err(h_{\theta }(x),y)=\left\{\begin{matrix} 1\ _{} \ _{}if\ _{} \ _{}h_{\theta }(x)\geqslant 0.5\ _{} \ _{}and\ _{} \ _{}y=0,\ _{} \ _{}if\ _{} \ _{}h_{\theta }(x)\leqslant 0.5\ _{} \ _{}and\ _{} \ _{}y=1 \\ 0 \ _{} \ _{}otherwise\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{} \end{matrix}\right. \\ Test \ _{} \ _{} error=\frac{1}{m_{test}}\sum_{i=1}^{m_{test}} err(h_{\theta }(x_{test}^{(i)}),y_{test}^{(i)})\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{} \end{matrix} err(hθ(x),y)={1  if  hθ(x)0.5  and  y=0  if  hθ(x)0.5  and  y=10  otherwise                                                                    Test  error=mtest1i=1mtesterr(hθ(xtest(i)),ytest(i))                                                  

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

  模型选择问题:假设我们想要确定对于一个数据集最合适的多项式次数,怎样选用正确的特征来构造学习算法,或者假设我们需要选择学习算法中的正则化参数 λ \lambda λ,应该怎么做呢?我们要讨论的问题就是如何将数据分为训练集、验证集和测试集三个部分?
  对于图1的房价预测例子,一旦参数 θ 1 \theta_{1} θ1 θ 2 \theta_{2} θ2,…与训练集数据拟合,在该数据上测得的参数误差(训练误差 J ( θ ) J(\theta) J(θ))可能小于实际的泛化误差。这样就不能很好的估计出实际的泛化误差,即不能很好的估计出该假设函数对样本的泛化能力。
   假设我们现在要在10个不同次数的多项式模型之间选择能最好拟合数据的多项式次数: h θ ( x ) = θ 0 + θ 1 x                                                           h θ ( x ) = θ 0 + θ 1 x + θ 2 x 2                                             h θ ( x ) = θ 0 + θ 1 x + θ 2 x 2 + θ 3 x 3                   ⋮                                                                                             h θ ( x ) = θ 0 + θ 1 x + θ 2 x 2 + . . . + θ 10 x 10 \begin{matrix} h_{\theta}(x)=\theta_{0}+\theta_{1}x\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{}\ _{}\ _{}\\ h_{\theta}(x)=\theta_{0}+\theta_{1}x+\theta_{2}x^{2\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{}\ _{}\\ h_{\theta}(x)=\theta_{0}+\theta_{1}x+\theta_{2}x^{2}+\theta_{3}x^{3}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{}\\ \vdots\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{} \\ h_{\theta}(x)=\theta_{0}+\theta_{1}x+\theta_{2}x^{2}+...+\theta_{10}x^{10} \end{matrix} hθ(x)=θ0+θ1x                             hθ(x)=θ0+θ1x+θ2x2                      hθ(x)=θ0+θ1x+θ2x2+θ3x3                                                       hθ(x)=θ0+θ1x+θ2x2+...+θ10x10

   想要选择一个模型,就是选择一个多项式次数去拟合这个模型并估计这个拟合好的假设函数对新样本的泛化能力。
   首先选择第一个模型在测试集上最小化训练误差得到一个参数向量 θ ( 1 ) \theta^{(1)} θ(1),再选择第二个模型拟合我们的测试集得到另一个参数向量 θ ( 2 ) \theta^{(2)} θ(2),依次求得 θ ( 3 ) \theta^{(3)} θ(3) θ ( 10 ) \theta^{(10)} θ(10)。接下来对所有的这些模型求出其测试集误差 J t e s t ( θ ( d ) ) J_{test}(\theta^{(d)}) Jtest(θ(d)) d d d为模型的多项式次数,计算出它在测试集上的性能。为了从这些模型中选出最好的一个,看哪个模型具有最小的测试误差。

h θ ( x ) → min ⁡ θ J ( θ ) → θ ( d ) → J t e s t ( θ ( d ) ) h_{\theta}(x)\rightarrow \min_{\theta}J(\theta)\rightarrow\theta^{(d)}\rightarrow J_{test}(\theta^{(d)}) hθ(x)θminJ(θ)θ(d)Jtest(θ(d))

   假设对于房价预测的例子,我们最终选择了五次多项式模型。怎么样去评价这个模型的泛化能力呢?我们可以观察这个五次多项式模型的假设函数对测试集的拟合情况,但问题是这样做仍然不能公平的估计出这个假设函数的泛化能力。原因是我们拟合了一个额外的参数 d d d(即多项式的次数),我们用测试集拟合了参数 d d d,从而去选择一个能够最好拟合测试集的参数 d d d的值,因此我们的参数向量 θ ( 5 ) \theta^{(5)} θ(5)在测试集上的性能很可能是对泛化误差过于乐观的估计。因为用测试集选择了多项式的次数,所以假设函数很可能对于测试集的表现好过其他没有见过的新样本。鉴于此问题,我们需要在数据集的划分中增加交叉验证集(或验证集),使用交叉验证集来帮助选择模型。
   我们可以使用60%的数据作为训练集,使用 20%的数据作为交叉验证集,使用20%的数据作为测试集。

  • 训练误差: J t r a i n ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J_{train}(\theta)=\frac{1}{2m}\sum_{i=1}^{m} (h _{\theta}(x^{(i)})-y^{(i)})^{2} Jtrain(θ)=2m1i=1m(hθ(x(i))y(i))2
  • 交叉验证误差: J c v ( θ ) = 1 2 m c v ∑ i = 1 m c v ( h θ ( x c v ( i ) ) − y c v ( i ) ) 2 J_{cv}(\theta)=\frac{1}{2m_{cv}}\sum_{i=1}^{m_{cv}} (h _{\theta}(x_{cv}^{(i)})-y_{cv}^{(i)})^{2} Jcv(θ)=2mcv1i=1mcv(hθ(xcv(i))ycv(i))2
  • 测试误差: J t e s t ( θ ) = 1 2 m t e s t ∑ i = 1 m t e s t ( h θ ( x t e s t ( i ) ) − y t e s t ( i ) ) 2 J_{test}(\theta)=\frac{1}{2m_{test}}\sum_{i=1}^{m_{test}} (h _{\theta}(x_{test}^{(i)})-y_{test}^{(i)})^{2} Jtest(θ)=2mtest1i=1mtest(hθ(xtest(i))ytest(i))2

   现在当我们选择模型时,我们要用交叉验证集来选择模型。具体来讲,我们首先要选取第一个模型去最小化训练误差得到对应的参数向量 θ ( 1 ) \theta^{(1)} θ(1),再选择第二个模型得到另一个参数向量 θ ( 2 ) \theta^{(2)} θ(2),依次求得 θ ( 3 ) \theta^{(3)} θ(3) θ ( 10 ) \theta^{(10)} θ(10)。接下来用交叉验证集进行测试,计算出每个模型的 J c v ( θ ( d ) ) J_{cv}(\theta^{(d)}) Jcv(θ(d))来观察这些假设函数在交叉验证集上的效果如何,选择交叉验证误差最小的假设函数作为我们的模型。最后用测试集来衡量或估计所选模型的泛化误差。

h θ ( x ) → min ⁡ θ J ( θ ) → θ ( d ) → J c v ( θ ( d ) ) h_{\theta}(x)\rightarrow \min_{\theta}J(\theta)\rightarrow\theta^{(d)}\rightarrow J_{cv}(\theta^{(d)}) hθ(x)θminJ(θ)θ(d)Jcv(θ(d))

   总结一下模型选择的步骤:
      step1: 使用训练集训练出10个模型;
      step2: 用10个模型分别对交叉验证集计算得出交叉验证误差;
      step3: 选取交叉验证误差最小的模型;
      step4: 用步骤3中选出的模型在测试集上计算得出推广误差。

4. 诊断偏差和方差

  当运行一个学习算法时,如果这个学习算法的表现不理想,那么多半是出现了这种情况:要么是偏差比较大,要么是方差比较大。换句话说,要么是欠拟合的情况,要么是过拟合的情况。那么对于这两种情况,哪个和偏差有关,哪个和方差有关,或者是不是和两个都有关?搞清楚这一点是非常重要的,因为它能判断出现的情况是这两种情况中的哪一种。其实这是一个很有效的指示器,可以指引着我们去找到改进算法最有效的方法和途径。
  我们通常会通过将训练集和交叉验证集的代价函数与多项式的次数绘制在同一张图表上来帮助分析,如图2所示。

在这里插入图片描述

图2 训练集和交叉验证集的代价函数与多项式的次数

  对于训练集,当 d d d较小时,模型拟合程度更低,误差较大;随着 d d d的增长,拟合程度提高,误差减小。 对于交叉验证集,当 d d d较小时,模型拟合程度低,误差较大;但是随着 d d d的增长,误差呈现先减小后增大的趋势,转折点是我们的模型开始过拟合训练数据集的时候。
  如果我们的交叉验证集误差较大,我们如何判断是方差问题还是偏差问题呢?当训练集误差很大,训练集误差和交叉验证集误差近似时为偏差/欠拟合情况;当训练集误差很小,交叉验证集误差远大于训练集误差时为方差/过拟合情况。

5. 正则化和偏差/方差

  在我们训练模型的过程中,一般会使用一些正则化方法来防止过拟合。但是我们可能会使正则化的程度太高或太低了,即我们在选择 λ λ λ的值时也需要思考与刚才选择多项式模型次数类似的问题。
   假设我们现在要在12个不同的 λ λ λ值的模型之间选择能最好拟合数据的模型: T r y     λ = 0                                                                                 T r y     λ = 0.01                                                                         T r y     λ = 0.02                                                                         T r y     λ = 0.04                                                                         ⋮                                                                                             T r y     λ = 10.24                                                                       \begin{matrix} Try\ _{} \ _{}\lambda=0\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{}\ _{} \ _{} \ _{} \\ Try\ _{} \ _{}\lambda=0.01\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{} \\ Try\ _{} \ _{}\lambda=0.02\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{} \\ Try\ _{} \ _{}\lambda=0.04\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{} \\ \vdots\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{} \\ Try\ _{} \ _{}\lambda=10.24\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \ _{}\ _{} \end{matrix} Try  λ=0                                        Try  λ=0.01                                    Try  λ=0.02                                    Try  λ=0.04                                                                                  Try  λ=10.24                                   

  首先我们选择一系列想要测试的 λ λ λ值,通常是 0-10之间的呈现2倍关系的值,如0、0.01、0.02、0.04、0.08、0.15、0.32、0.64、1.28、2.56、5.12、10.24,得到12个备选模型。 接下来选用第一个模型也就是 λ = 0 λ=0 λ=0,最小化我们的代价函数 J ( θ ) J(\theta) J(θ)得到参数向量 θ ( 1 ) \theta^{(1)} θ(1),再选择第二个模型 λ = 0.01 λ=0.01 λ=0.01,最小化 J ( θ ) J(\theta) J(θ)得到另一个参数向量 θ ( 2 ) \theta^{(2)} θ(2),依次求得 θ ( 3 ) \theta^{(3)} θ(3) θ ( 12 ) \theta^{(12)} θ(12)。然后所有的假设函数和参数就可以用交叉验证集评价它们,即把第一个模型、第二个模型用不同正则化参数进行拟合,再用交叉验证集评价,测出每一个参数在交叉验证集上的平均误差平方和,选取交叉验证误差最小的那个模型最为最终选择。最后使用测试集来更加准确地估计出我们的参数向量 θ \theta θ对新样本的泛化能力。
T r y     λ → min ⁡ θ J ( θ ) → θ ( d ) → J c v ( θ ( d ) ) Try\ _{} \ _{}\lambda\rightarrow \min_{\theta}J(\theta)\rightarrow\theta^{(d)}\rightarrow J_{cv}(\theta^{(d)}) Try  λθminJ(θ)θ(d)Jcv(θ(d))

   总结一下选择 λ λ λ值的步骤:
      step1:使用训练集训练出12个不同程度正则化的模型;
      step2:用12个模型分别对交叉验证集计算出交叉验证误差;
      step3: 选择得出交叉验证误差最小的模型;
      step4: 运用步骤3中选出的模型对测试集计算得出推广误差,同时也可将训练集和交叉验证集模型的代价函数误差与 λ λ λ的值绘制在一张图上,如图3所示。

在这里插入图片描述

图3 训练集和交叉验证集模型的代价函数误差与λ的值

   当 λ λ λ较小时,训练集误差较小(过拟合),而交叉验证集误差较大 ;随着 λ λ λ的增加,训练集误差不断增加(欠拟合),而交叉验证集误差则是先减小后增加。

6. 学习曲线

   学习曲线是一个很好的工具,是学习算法中一个很好的合理检验(sanity check),使用学习曲线可以判断某一个学习算法是否处于偏差、方差问题。学习曲线就是将训练集误差和交叉验证集误差作为训练集样本数量 m m m的函数绘制的图表,如图4所示。
在这里插入图片描述

图4 学习曲线

   图5绘制出了不同训练集样本数量对应的学习曲线。
在这里插入图片描述

图5 不同训练集样本数量对应的学习曲线

   当训练较少数据的时候,训练的模型将能够非常完美地适应较少的训练数据,但是训练出来的模型却不能很好地适应交叉验证集数据或测试集数据。
  如何利用学习曲线识别高偏差/欠拟合?我们尝试用一条直线 h θ ( x ) = θ 0 + θ 1 x h_{\theta}(x)=\theta_{0}+\theta_{1}x hθ(x)=θ0+θ1x来适应训练集数据,从图6可以看出无论训练集有多么大,误差都不会有太大改观。

在这里插入图片描述

图6 高偏差情况

  结论:在高偏差/欠拟合的情况下,增加数据到训练集不一定能有帮助。
  如何利用学习曲线识别高方差/过拟合?我们使用一个非常高次的多项式模型 h θ ( x ) = θ 0 + θ 1 x + . . . + θ 100 x 100 h_{\theta}(x)=\theta_{0}+\theta_{1}x+...+\theta_{100}x^{100} hθ(x)=θ0+θ1x+...+θ100x100,并且正则化非常小,从图7可以看出当交叉验证集误差远大于训练集误差时,往训练集增加更多数据可以提高模型的效果。
在这里插入图片描述

图7 高方差情况

  结论:在高方差/过拟合的情况下,增加更多数据到训练集可能可以提高算法效果。

7. 决定下一步做什么

  假设我们已经使用正则化线性回归实现了房价的预测,但是当我们在一系列新的数据集上测试我们的假设函数时发现存在着很大的误差,下一步我们该怎么办呢?

  • 获得更多的训练样本——解决高方差;
  • 尝试减少特征的数量——解决高方差;
  • 尝试获得更多的特征——解决高偏差;
  • 尝试增加多项式特征——解决高偏差;
  • 尝试减少正则化程度 λ λ λ——解决高偏差;
  • 尝试增加正则化程度 λ λ λ——解决高方差。

   下面再看一下它们和神经网络的联系,如图8所示。
在这里插入图片描述

图8 神经网络

  使用较小的神经网络,类似于参数较少的情况,容易导致高偏差和欠拟合,但计算代价较小;使用较大的神经网络,类似于参数较多的情况,容易导致高方差和过拟合,虽然计算代价比较大,但是可以通过正则化手段来调整而更加适应数据。 所以使用一个较大的神经网络并采用正则化来修正过拟合问题通常比使用较小的神经网络效果要好。
  选择需要的隐藏层层数:使用一个隐藏层是比较合理的默认选项,但如果想选择一个最合适的隐藏层层数,可以试试把数据集分为训练集、交叉验证集和测试集,然后训练一个隐藏层的神经网络,再试试两个、三个隐藏层等,看看哪个神经网络在交叉验证集上表现得最理想。也就是说分别训练具有不同隐藏层层数的神经网络,计算每个模型的交叉验证误差 J c v ( θ ) J_{cv}(\theta) Jcv(θ),然后选择交叉验证误差最小的神经网络。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值