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

  • 1. 决定下一步做什么
  • 2. 评估假设函数
  • 3. 模型选择和训练、验证、测试集
  • 4. 诊断偏差和方差
  • 5. 正则化和偏差/方差
  • 6. 学习曲线
  • 7. 决定下一步做什么

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} x1​x2​项等等;
  • 尝试减少正则化参数 λ \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​(θ)=2mtest​1​∑i=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​(θ)=−mtest​1​∑i=1mtest​​[ytest(i)​log(hθ​(xtest(i)​))+(1−ytest(i)​)log(1−hθ​(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=mtest​1​∑i=1mtest​​err(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​+θ1​x ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​hθ​(x)=θ0​+θ1​x+θ2​x2 ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​hθ​(x)=θ0​+θ1​x+θ2​x2+θ3​x3 ​ ​ ​ ​ ​ ​ ​ ​ ​⋮ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​hθ​(x)=θ0​+θ1​x+θ2​x2+...+θ10​x10​

   想要选择一个模型,就是选择一个多项式次数去拟合这个模型并估计这个拟合好的假设函数对新样本的泛化能力。
   首先选择第一个模型在测试集上最小化训练误差得到一个参数向量 θ ( 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)→θmin​J(θ)→θ(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​(θ)=2m1​∑i=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​(θ)=2mcv​1​∑i=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​(θ)=2mtest​1​∑i=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)→θmin​J(θ)→θ(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 ​ ​λ→θmin​J(θ)→θ(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​+θ1​x来适应训练集数据,从图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​+θ1​x+...+θ100​x100,并且正则化非常小,从图7可以看出当交叉验证集误差远大于训练集误差时,往训练集增加更多数据可以提高模型的效果。

图7 高方差情况

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

7. 决定下一步做什么

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

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

   下面再看一下它们和神经网络的联系,如图8所示。

图8 神经网络

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

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

  1. 机器学习学习吴恩达逻辑回归_机器学习基础:逻辑回归

    机器学习学习吴恩达逻辑回归 In the previous stories, I had given an explanation of the program for implementation ...

  2. 机器学习-吴恩达-笔记-13-大规模机器学习

    目录 大型数据集的学习 批量梯度下降 随机梯度下降 小批量梯度下降 随机梯度下降收敛 在线学习 映射化简和数据并行 [此为本人学习吴恩达的机器学习课程的笔记记录,有错误请指出!] 大型数据集的学习 如 ...

  3. 机器学习-吴恩达-笔记-6-应用机器学习的建议

    目录 评估一个假设(假设函数) 模型选择和交叉验证集 诊断偏差和方差 正则化和偏差/方差 学习曲线 决定下一步做什么 [此为本人学习吴恩达的机器学习课程的笔记记录,有错误请指出!] 当我们运用训练好了 ...

  4. (吴恩达)6.应用机器学习的建议、机器学习系统的设计

    文章目录 十.应用机器学习的建议(Advice for Applying Machine Learning) 10.1 决定下一步做什么 10.2 评估假设 10.3 模型选择和训练.验证.测试集 1 ...

  5. 推荐一个比吴恩达还优质的机器学习课程

    我们都知道AI的核心驱动力是机器学习,所以只要掌握了常见的机器学习算法以及工具,完全可以做出非常酷的AI产品.最近几年AI的发展突飞猛进,产生了大量成熟的工具,这也使得学习AI的门槛也变得越来越低.现 ...

  6. 吴恩达DeepLearningCourse3-结构化机器学习项目

    文章目录 第一周:机器学习策略1 正交化 单一数字评估指标 满足和优化指标 训练/开发/测试集 机器学习和人的表现 第二周:机器学习策略2 进行误差分析 修正标注错误的数据 使用来自不同分布的数据进行 ...

  7. 完课率最高 | 带学吴恩达《机器学习》课程和作业,带打Kaggle全球顶级大赛!...

    机器学习算法入门哪家好?吴恩达! 你说我为什么知道?这个要从前两个月说起. 我参加了一场500人的话题讨论会,主题是「推荐适合入门机器学习的公开课」. 结果活动一开始,就被一群学算法的工程师和研究生刷 ...

  8. 【AI】吴恩达斯坦福机器学习中文笔记汇总

    1.吴恩达机器学习和深度学习课程的字幕翻译以及笔记整理参见: 以黄海广博士为首的一群机器学习爱好者发起的公益性质项目(http://www.ai-start.com). 2.黄海广博士公益项目介绍 h ...

  9. 吴恩达《机器学习训练秘籍》:7 条关于项目实践的实用建议

    翻译 | shawn 出品 | 人工智能头条(公众号ID:AI_Thinker) <机器学习训练秘籍>(Machine Learning Yearning)是吴恩达的新作,主要讲的是如何应 ...

  10. 从六大概念总结吴恩达机器学习书籍:如何做好工程项目实践?

    选自towardsdatascience 作者:Niklas Donges 机器之心编译 在 ML 工程实践中,很多时候都会走一些弯路,可能是模型选错了,也可能是某个超参数一直不正确.那么我们该如何根 ...

最新文章

  1. Manifest merger failed with multiple errors, see logs
  2. php amqp扩展安装,php扩展AMQP,安装报错解决
  3. Spring Cloud应用开发(二:实现服务间的调用)
  4. .prop()与.attr()
  5. firebird——Spring hibernate 集成连接配置
  6. c++ 实例精通(1)
  7. 将服务端移植到Linux和MAC OS
  8. linux实例大全学习笔记1
  9. spring boot----简单入门
  10. 51nod 1631 小鲨鱼在51nod小学
  11. 动态规划——小A点菜(洛谷 P1164)
  12. 渗透学习笔记--基础篇--sql注入(数字型)
  13. java两个web项目之间如何传值,两个项目之间传递参数有关问题 - 大神进
  14. 自己动手写Docker系列 -- 5.7实现通过容器制作镜像
  15. G盘文件系统损坏要如何恢复数据
  16. Android滑动页面返回(自定义控件)
  17. 夺命雷公狗---微信开发54----微信js-sdk接口开发(1)之快速入门
  18. 【电力负荷预测】基于matlab遗传算法优化BP神经网络电力负荷预测【含Matlab源码 1524期】
  19. 【无机纳米材料科研制图——OriginLab 0202】Origin制图优化与格式复制
  20. 蛋白质分子量检测服务

热门文章

  1. 迷宫(二) 计蒜客--1596
  2. 可可英语奇文老师 中高级词汇记忆方法(免费下载)
  3. 使用EasyPOI导出Excel模板数据(含图片)
  4. 软件测试面试刁难人?花重金购买的资料1套全给你解决
  5. 手游开发神器 cocos2d-x editor 教程聚合和代码下载(持续更新中)
  6. 一,银行软件测试工作总结
  7. Armstrong 一个n位数等于各个位数n次方之和
  8. 当你试图将【圣杯布局】无限套娃__
  9. 百闻牌服务器维护,阴阳师百闻牌一直进不去 无法进入游戏解决方法
  10. excel如何选中从当前单元格第一行跳到内容最后一行或者从选的最后一行跳到第一行