Blog

懒癌晚期


Project maintained by VirusPC Hosted on GitHub Pages — Theme by mattgraham

Back Home

偏差(Bias)与方差(Variance)


当你运行一个学习算法时,如果这个算法的表现不理想,那么多半时出现两种情况:要么是偏差比较大,要么是方差比较大。换句话说,出现的情况要么是欠拟合,要么是过拟合。这两种情况哪个和偏差有关,哪个和方差有关,或者是不是和两个都有关,搞清楚这点非常重要。判断出是那种情况对我们改进算法很有帮助。

概念

泛化误差=偏差+方差+噪声

一般来说,偏差与方差是有冲突的,这成为偏差-方差窘境(bias-variance dilemma)。给定学习任务,假定我们能控制学习算法的训练程度,则在训练不足时,学习器的拟合能力不够强,训练数据的扰动不足以使学习器产生显著变化,此时偏差主导了泛化错误率; 随着训练程度的加深,学习器的拟合能力逐渐增强,训练数据发生的扰动渐渐能被学习器学到,方差逐渐主导了泛化错误率; 在训练程度充足后,学习器的拟合能力已非常强,训练数据发生的轻微扰动都会导致学习器发生显著变化,若训练数据自身的、非全局的特性被学习器学到了,则发生过拟合。

假设红色的靶心区域是学习算法完美的正确预测值, 蓝色点为每个数据集所训练出的模型对样本的预测值, 当我们从靶心逐渐向外移动时, 预测效果逐渐变差.

bias and variance

特征多项式维度与偏差/方差

训练集与交叉验证集 的 特征多项式维度与损失的关系:
polynominal degree - error 图中偏左,即 \(J_{train}(\theta)\) 很高且 \(J_{cv}(\theta) \approx J_{train}(\theta)\) 时,会产生高偏差(欠拟合)问题;
偏右,即 \(J_{train}(\theta)\) 很低且 \(J_{cv}(\theta) \gg J_{train}(\theta)\) 时,会产生高方差(过拟合)问题。

正则化与偏差/方差

正则化只是在优化过程中使用,在计算 \(J_{train}(\theta)\)、\(J_{cv}(\theta)\) 和 \(J_{test}(\theta)\) 时并不会用到。
当较小时,我们的假设函数会倾向于欠拟合;当lambda较大时,我们的假设函数会倾向于欠拟合。为了选择模型和正则项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}
  2. 创建一个不同维度或任何其它不同变量的模型
  3. 遍历lambda列表,对每个lambda,检查所有的模型来学习参数。
  4. 使用习得的参数计算交叉验证误差\(J_{cv}(\theta)\),注意\(J_{cv}(\theta)\)不包括正则化项或令lambda为0
  5. 使用交叉验证误差最小的的参数和lambda,计算\(J_{test}(\theta)\),观察其是否具有良好的泛化能力。

lambda与损失的关系: lambda - error

学习曲线

使用很少的样本来训练模型,由于很容易找得到完全经过这些点的曲线,所以很容易得到0误差。由此:

在模型具有高偏差的情况下(由于特征过少而导致的高偏差):

如果一个学习算法具有高偏差,获取更多的训练数据可能不会提供显著的帮助。

high bias

在模型具有高方差的情况下(由于特征过多而导致的高方差):

如果一个学习算法具有高方差,由于两个曲线理应趋向于同一水平线,故额外增加训练数据会有帮助。

high variance

如何提升算法性能

回顾之前我们的选项:

神经网络


课程链接:


其它参考资料: