我们利用机器学习模型对测试数据或生产数据做预测,误差(也就是泛化误差)是无法避免的,而偏差和方差就是分析误差的一种有效的工具,另外,理解它们对于模型调参也起着指导性的作用。
在介绍机器学习模型的偏差和方差之前,我们首先要明确统计学上方差的意义。在统计学中,设有随机变量,方差定义为:
也即衡量了随机变量偏离其期望的程度。
偏差与方差分解
为了方便分析,我们把线性回归的误差分解为偏差与方差形式。按照线性回归的假设有Y = f(X) + ε,X为样本特征向量,Y观测值且对于ε我们有E(ε) = 0和。从训练数据中我们可以获取预测模型
。则对于
,预测的平方误差可以表达为:
从这里我们可以看出,测试误差 = 不可降误差 + 偏差平方 + 方差,其中不可降误差是无法消除的,偏差描述了模型预测均值与实际值差距有多大,而方差描述了模型预测值自身的稳定性。为了便于直观理解,我们利用打靶来类比偏差和方差不可降误差(这里我们暂不考虑不可降误差):
假设打靶者就是预测模型,百发百中的神枪手就是我们的真实模型,而点数是预测结果;神枪手枪枪都可以打得到红心,无一例外,所以红心是实际值,其它打靶者的点数就是模型预测值。偏差描述了模型预测均值与实际值差距有多大,可以理解为打靶者点数的质心与红点的距离,所以我们看到偏差低的时候,点数的质心总是在红心附近,反之则离红心较远;方差描述了模型预测值自身的稳定性,可以理解为打靶者点数与其自身质心的偏离程度,也就是点数是否发散。明显地,方差小的时候,点数非常集中,反之则发散。
分析
(1)什么会引起偏差或者方差较高
1. 模型复杂度
对于比较复杂的预测模型,其对输入变量x是很敏感的(参考多项式函数,高次模型实际上对于x的变化非常敏感),按照方差的解释(模型预测值自身的稳定性),这时方差会比较大。当然这不是一定的,如果复杂模型恰巧在的分布密集的区域对输入不是那么敏感,方差一样会很低(这里纯属个人见解)。对于增加模型复杂度,模型偏差会降低,这一点直觉上还不是很理解,以后查到相关资料的时候会补上。
2. 数据量的大小
学过数值分析的同学应该还记得,拟合函数的次数越高,我们需要的数据越多;或者换个说法,如果数据比较多,即使是复杂的预测模型,我们也可以得到一个比较确定的结果,且遇到类似的数据时,预测结果误差会比较小。反之,数据量比较小且模型比较复杂时,偏差和方差都可能很大。
(2)高偏差和高方差在现实中的表现形式
首先,无论偏差较高或者偏差较高,测试误差都会很大。
如果方差较高,模型对于测试数据比较敏感。当我们更换不同的测试数据时,误差的变化抖动应该是很大的,也就是时好时坏。偏差较高时,更换不同测试数据,误差一直都会很高。当然,如果方差较高,往往模型的复杂度较高,所以模型对于训练数据可能也是很敏感的,相同的测试数据,不同的训练数据,测试表现可能表现差异很大。
另外,当方差比较大时,模型对于不同数据的测试结果差距较大,因此训练数据误差和测试数据误差往往有比较大的差距。这种情况下,如果训练误差比较小,我们称其为过拟合
参考文献:
[1] The Elements of Statistical Learning 2nd Edition
[2] Understanding the Bias-Variance Tradeoff