十、应用机器学习的建议

10.1 决定下一步做什么

最终达到改进机器学习系统性能的目的假设我们需要用一个线性回归模型来预测房价,当我们运用训练好了的模型来预测未知数据的时候发现有较大的误差,我们下一步可以做什么?

  1. 获得更多的训练样本——通常是有效的,但代价较大,下面的方法也可能有效,可考虑先采用下面的几种方法。
  2. 尝试减少特征的数量
  3. 尝试获得更多的特征
  4. 尝试增加多项式特征
  5. 尝试减少正则化程度λ\lambda
  6. 尝试增加正则化程度λ\lambda

我们不应该随机选择上面的某种方法来改进我们的算法,而是运用一些机器学习诊断法来帮助我们知道上面哪些方法对我们的算法是有效的。

10.2 评估一个假设

评估一个数据集拟合的是否可取,不能只看是否有误差最小化,还要看是否过拟合

判断过拟合有以下两种方法:

  • 对假设函数h(x)h(x)进行画图,然后观察图形趋势

  • 将数据分成训练集和测试集,通常用70%的数据作为训练集,用剩下30%的数据作为测试集。

    很重要的一点是训练集和测试集均要含有各种类型的数据,通常我们要对数据进行“洗牌”,然后再分成训练集和测试集。

    测试集评估在通过训练集让我们的模型学习得出其参数后,对测试集运用该模型,我们有两种方式计算误差:

    1. 对于线性回归模型,我们利用测试集数据计算代价函数JJ

    2. 对于逻辑回归模型,我们除了可以利用测试数据集来计算代价函数外:

      KaTeX parse error: Expected group after '_' at position 47: …{m}_{test}}\sum_̲\limits{i=1}^{m…

    误分类的比率,对于每一个测试集样本,计算:
    吴恩达学习笔记—— 十、应用机器学习的建议
    然后对计算结果求平均。

10.3 模型选择和交叉验证集

假设我们要在10个不同次数的二项式模型之间进行选择:
吴恩达学习笔记—— 十、应用机器学习的建议
显然越高次数的多项式模型越能够适应我们的训练数据集,但是适应训练数据集并不代表着能推广至一般情况,我们应该选择一个更能适应一般情况的模型。我们需要使用交叉验证集来帮助选择模型。

即:使用60%的数据作为训练集,使用 20%的数据作为交叉验证集,使用20%的数据作为测试集

模型选择的方法为:

  1. 使用训练集训练出10个模型

  2. 用10个模型分别对交叉验证集计算得出交叉验证误差(代价函数的值)

  3. 选取代价函数值最小的模型

  4. 用步骤3中选出的模型对测试集计算得出推广误差(代价函数的值)

    Train/validation/test error

    Training error:

    Jtrain(θ)=12mi=1m(hθ(x(i))y(i))2J_{train}(\theta) = \frac{1}{2m}\sum\limits_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2

    Cross Validation error:

    Jcv(θ)=12mcvi=1m(hθ(xcv(i))ycv(i))2J_{cv}(\theta) = \frac{1}{2m_{cv}}\sum\limits_{i=1}^{m}(h_{\theta}(x^{(i)}_{cv})-y^{(i)}_{cv})^2

    Test error:

    Jtest(θ)=12mtesti=1mtest(hθ(xcv(i))ycv(i))2J_{test}(\theta)=\frac{1}{2m_{test}}\sum\limits_{i=1}^{m_{test}}(h_{\theta}(x^{(i)}_{cv})-y^{(i)}_{cv})^2

10.4 诊断偏差和方差

当你运行一个学习算法时,如果这个算法的表现不理想,那么多半是出现两种情况:要么是偏差比较大,要么是方差比较大。换句话说,出现的情况要么是欠拟合,要么是过拟合问题。那么这两种情况,哪个和偏差有关,哪个和方差有关,或者是不是和两个都有关?

我们通常会通过将训练集和交叉验证集的代价函数误差与多项式的次数绘制在同一张图表上来帮助分析:吴恩达学习笔记—— 十、应用机器学习的建议
Bias/variance

Training error: Jtrain(θ)=12mi=1m(hθ(x(i))y(i))2J_{train}(\theta) = \frac{1}{2m}\sum\limits_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2

Cross Validation error: Jcv(θ)=12mcvi=1m(hθ(xcv(i))ycv(i))2J_{cv}(\theta) = \frac{1}{2m_{cv}}\sum\limits_{i=1}^{m}(h_{\theta}(x^{(i)}_{cv})-y^{(i)}_{cv})^2

对于训练集,当 dd (选择的次数)较小时,模型拟合程度更低,误差较大;随着 dd 的增长,拟合程度提高,误差减小。

对于交叉验证集,当 dd 较小时,模型拟合程度低,误差较大;但是随着 dd 的增长,误差呈现先减小后增大的趋势,转折点是我们的模型开始过拟合训练数据集的时候。

训练集误差和交叉验证集误差近似时:偏差/欠拟合

交叉验证集误差远大于训练集误差时:方差/过拟合

10.5 正则化和偏差/方差

在我们在训练模型的过程中,一般会使用一些正则化方法来防止过拟合。但是我们可能会正则化的程度太高或太小了,即我们在选择λ的值时也需要思考与刚才选择多项式模型次数类似的问题。

我们选择一系列的想要测试的 λ\lambda 值,通常是 0-10之间的呈现2倍关系的值(如:0,0.01,0.02,0.04,0.08,0.15,0.32,0.64,1.28,2.56,5.12,100,0.01,0.02,0.04,0.08,0.15,0.32,0.64,1.28,2.56,5.12,10共12个)。 我们同样把数据分为训练集、交叉验证集和测试集。
吴恩达学习笔记—— 十、应用机器学习的建议

选择λ\lambda的方法为:

  1. 使用训练集训练出12个不同程度正则化的模型
  2. 用12个模型分别对交叉验证集计算的出交叉验证误差
  3. 选择得出交叉验证误差最小的模型
  4. 运用步骤3中选出模型对测试集计算得出推广误差,我们也可以同时将训练集和交叉验证集模型的代价函数误差与λ的值绘制在一张图表上:
    吴恩达学习笔记—— 十、应用机器学习的建议
    • 当 λ\lambda 较小时,训练集误差较小(过拟合)而交叉验证集误差较大

• 随着 λ\lambda 的增加,训练集误差不断增加(欠拟合),而交叉验证集误差则是先减小后增加

10.6 学习曲线

学习曲线就是一种很好的工具,我经常使用学习曲线来判断某一个学习算法是否处于偏差、方差问题。学习曲线是学习算法的一个很好的合理检验sanity check)。学习曲线是将训练集误差和交叉验证集误差作为训练集样本数量(mm)的函数绘制的图表。

相关文章: