机器学习(十五) - Bias vs. Variance

Diagnosing Bias vs. Variance

讲完模型选择,我们接下来讲讲如何去诊断我们算法出现的问题到底是一个high bias(underfitting)的问题还是一个high variance(overfitting)的问题又或者同时两个问题同时存在,因为几乎所有的导致test error不理想的原因都来自于这三种情况中的一种。
我们还是从我们最熟悉的一张图引入(线性拟合):
机器学习(十五) - Bias vs. Variance_第1张图片
左图欠拟合,右图过拟合,中间刚刚好。
那么现在我们换一张图来看看这三种情况的呈现形式
机器学习(十五) - Bias vs. Variance_第2张图片
其实线性回归中,次方代表的就是参数个数,次方低表示参数少,次方高代表参数多。那么上图就是参数个数-error曲线图。

  • 欠拟合
    J t r a i n ( Θ ) ≈ J c v ( Θ ) J_{train}(\Theta)\approx J_{cv}(\Theta) Jtrain(Θ)Jcv(Θ),并且它们都很大,即验证集和训练集的error都很高(这里cv代表的是验证集)
  • 过拟合
    J t r a i n ( Θ ) J_{train}(\Theta) Jtrain(Θ) 很小,同时 J c v ( Θ ) J_{cv}(\Theta) Jcv(Θ) 很大。

Regularization and Bias/Variance

我们知道加入正则项是可以处理过拟合问题的,但是同时也引入了一个新的问题,正则系数的选取,如果正则系数太大,确实解决了过拟合的问题,但是却导致欠拟合,如下图左,如果取的太小,没办法解决过拟合的问题,如下图右,只有取得恰当,才能达到下图中间的效果。
机器学习(十五) - Bias vs. Variance_第3张图片
那么如何选择恰当的 λ \lambda λ 呢?这个可以参考上一篇的模型选择部分。

  1. 建立一个 λ \lambda λ 的列表。
    (比如 λ ∈ 0 , 0.01 , 0.02 , 0.04 , 0.08 , 0.16 , 0.32 , 0.64 , 1.28 , 2.56 , 5.12 , 10.24 \lambda \in {0, 0.01, 0.02, 0.04, 0.08, 0.16, 0.32, 0.64, 1.28, 2.56, 5.12, 10.24} λ0,0.01,0.02,0.04,0.08,0.16,0.32,0.64,1.28,2.56,5.12,10.24
  2. 然后再建立一系列的模型(对于线性回归来说,就是不同的次方)。
  3. 对于不同的模型,我们依次代入不同的 λ \lambda λ 进行参数训练。
  4. 然后对于不同的模型(这里相当于有 λ × d \lambda \times d λ×d 个模型),我们分别计算 J c v ( Θ ) J_{cv}(\Theta) Jcv(Θ).
  5. 从得到的所有 J c v ( Θ ) J_{cv}(\Theta) Jcv(Θ) 中选取最低的一组作为我最终选定的模型以及 λ \lambda λ
  6. 最后计算 J t e s t ( Θ ) J_{test}(\Theta) Jtest(Θ)

Learning Curve

学习曲线是一种非常有效检测机器学习算法问题所在的手段(到底是一个high bias还是一个high variance又或者两者兼有的情况)

  • Experiencing high bias
    机器学习(十五) - Bias vs. Variance_第4张图片
    训练集小 J t r a i n ( Θ ) J_{train}(\Theta) Jtrain(Θ)小, J c v ( Θ ) 大 J_{cv}(\Theta)大 Jcv(Θ)
    训练集大 J t r a i n ( Θ ) ≈ J c v ( Θ ) J_{train}(\Theta) \approx J_{cv}(\Theta) Jtrain(Θ)Jcv(Θ),都大。并且随着数据集增大,error很快趋于平稳。
    说明high bias的情况增大训练集意义不大。

  • Experiencing high variance
    机器学习(十五) - Bias vs. Variance_第5张图片
    训练集小 J t r a i n ( Θ ) J_{train}(\Theta) Jtrain(Θ)小, J c v ( Θ ) 大 J_{cv}(\Theta)大 Jcv(Θ)
    训练集大 J t r a i n ( Θ ) J_{train}(\Theta) Jtrain(Θ)随数据集增大而增大, J c v ( Θ ) J_{cv}(\Theta) Jcv(Θ)随着训练集增大而减小,但是并未趋于平稳,两者存在比较明显的gap。
    high variance的情况增大训练集是可行的。

Deciding What to Do Next Revisited

那么现在我们反观上一篇的Deciding What to Do Next部分,我们给出对应方法所解决的问题:

  • 获取更多的训练集 - 解决 high variance
  • 减少特征数量 - 解决 high variance
  • 选择更多的特征 - 解决
  • 增加高次项的特征
  • 减少 λ \lambda λ
  • 增加 λ \lambda λ
    | 方法 | 解决的问题 |
    | --------- |----------|
    | 获取更多的训练集 | high variance |
    | 减少特征数量 | high variance |
    | 选择更多的特征 | high bias |
    | 增加高次项的特征 | high bias |
    | 减少 λ \lambda λ | high bias |
    | 增加 λ \lambda λ | high variance |

Diagnosing Neural Networks

机器学习(十五) - Bias vs. Variance_第6张图片
单一隐藏层的神经网络一般是一个不错的默认选择。如果要使用多个隐藏层的神经网络,我们可以通过验证集去验证选取一个效果最好的层数。


你可能感兴趣的:(机器学习(十五) - Bias vs. Variance)