机器学习的误差从何而来?“偏差-方差分解 ” |李宏毅机器学习【3】

 对于机器学习算法,可以通过实验估计其泛化性能,但是为什么不同算法在不同训练集上有不同的错误率?欠拟合和过拟合的深层原因到底是什么?“偏差-方差分解”(Bias-Variance decomposition)是解释算法泛化性能的一种常用工具。

顾名思义,偏差-方差分解就是试图把学习算法的期望泛化错误率分解为偏差和方差。偏差指的是期望预测和真实结果之间的偏离程度,而方差指的是因相同数量的训练集的变化而引起的学习性能的变化。

简单的模型拟合能力弱,预测的偏差大,同时受数据扰动小,方差也比较小;复杂的模型拟合能力强,偏差比较小,但是对数据扰动更加敏感,所以方差就比较大。

下面来看具体的例子:

 

 从上面的例子可以看出,模型简单(阶数低)时,拟合的曲线比较接近,但是离“靶心”比较远;模型复杂(阶数高)时,拟合的曲线比较“杂乱”,但是其均值离“靶心”很接近。因此可以直观的看出随着模型复杂度的增加,相同数量下不同训练集的差异(数据扰动)对学习性能的影响越来越大,也即方差Variance越来越大。

 下面来看偏差Bias,需要注意的是,偏差指的是学习算法的期望预测真实结果之间的差异。

 

 下图中黑色曲线是true function,红色曲线代表5000个训练集上的预测,蓝色曲线代表5000个预测的平均。

 

 

 

 随着模型越来越复杂,其拟合能力也越来越强。尽管表面上每次预测的结果看更加杂乱了,但所有预测的平均却在逐渐接近真实的曲线,也即偏差Bias在逐渐减小。

综上,当模型简单、训练程度不深时,学习算法的泛化错误率由偏差主导,这种情况称为欠拟合(underfitting);当模型复杂、训练程度加深时,学习算法的泛化错误率由偏差主导,这种情况称为过拟合(overfitting)。

如何判断学习算法是underfitting还是overfitting?可以根据学习算法在训练集和测试集上的表现来判断。

 当模型太简单,不足以对训练集进行有效拟合时,就是偏差过大的情况,这时可以考虑:

  1. 增加/构造更多有效的特征
  2. 一个更复杂,更强大的学习算法

 当模型太复杂,学习到了训练集特有的数据扰动,就是方差过大的情况,这时可以考虑:

  1. 更多的数据(feature + label)
  2. 加入正则项(regularization)

 选择模型阶段,常用的方法是交叉验证法。

Warning! Test Dataset只用来体现结果,不能用测试集来调整和选择模型,模型的构建和选择必须在Training Dataset内完成。

 

 文章主要内容来自台大李宏毅教授的深度学习课程,同时借鉴了周志华老师的西瓜书。