一文读懂 Bias(偏差)、Error(误差)、Variance(方差)
偏差
偏差度量了学习算法的期望预期与真实结果的偏离程度 ,即刻画了学习算法本身的拟合能力。偏差太高,就会出现欠拟合,即与真实结果偏离很大。但如果偏差太高,可能会出现过拟合,结合一下前面的图片,因为我们的数据集并不是整体的数据集,可能数据集本身就不准确,所以如果你仅仅在当当前数据集做到很好,可能对于新的数据就会表现很差。
如何降低偏差
- 增加算法的复杂度,比如神经网络中的神经元个数或者层数,增加决策树中的分支和层数等。不过增加模型复杂度可能会导致方差(variance)的增加,如果有必要,需要添加正则化项来惩罚模型的复杂度(降低方差);
- 优化输入的特征,检查特征工程中是否遗漏掉具有预测意义的特征。增加更多的特征也许能同时改善方差(variance)和偏差(bias),不过理论上来说,特征越多方差(variance)也就越大(可能又需要正则化);
- 削弱或者去除已有的正则化约束(L1 正则化,L2 正则化,dropout 等),不过有增加方差的风险;
- 调整模型结构,比如神经网络的结构;
方差
方差反映了算法在不同样本下模型预测的稳定性 ,通过在多个同样大小的训练集上不断学习可以得到方差。如果模型在多个样本下的训练误差(经验损失)“抖动”比较厉害,则有可能是样本有问题。
如何降低方差
- 扩大训练样本,样本太小(代表性不够)是方差大的首要原因,增加样本是减少方差最简单有效的方式;
- 增加正则化约束(比如 L1 正则化,L2 正则化,dropout 等),正则化降低方差的同时也可能增大偏差;
- 筛选输入的特征(feature selection),这样输入的特征变少后,方差也会减小;
- 降低算法模型复杂度,比如对决策树的剪枝、减少神经网络的层数等;
优化模型的结构有时候也会有用
噪声
噪声是一种不可控的错误,很难避免,被称为不可约偏差(irreducible error) ,即噪声无法通过模型来消除。噪声通常是出现在“数据采集”的过程中的,且具有随机性和不可控性,比如采集用户数据的时候仪器产生的随机性偏差、人工标注时的错误或者在实验中受到其他不可控因素的干扰等。
如何降低噪音
这个没办法,你要从别处找原因
误差
偏差分为训练偏差 、测试偏差 和泛化偏差 。其中要重点理解泛化误差。
训练误差(training error)是指,模型在训练数据集 上计算得到的误差,测试误差是在测试集上 得到的误差。泛化误差(generalization error)是指,如果所有的数据来自一个整体,模型在这个整体上的误差 ,是一种期望的理想情况,往往会与测试误差有些偏差。
泛化误差
泛化是指算法模型能够在从未学习过的数据上实现较低的损失,衡量一个算法模型是否优秀的指标就是其泛化能力 ,即根据从样本数据中学习到的规则能够应用到新数据的能力,泛化能力由泛化误差 来体现。
由于条件的限制和知识的限制,我们往往无法获取所有的数据,通常说来,测试误差的平均值或期望 就是泛化误差。
泛化误差与偏差、方差的关系
泛化误差=偏差 + 方差 + 噪声。通常情况下,噪声无法人为控制,准确的说无法通过模型来消除,所以通常我们认为泛化误差受偏差和方差影响。减小泛化误差就要从偏差和方差两方面均衡考虑。
![](/qrcode.jpg)
如何降低误差
降低了方差和偏差,误差自然就下来了。
偏差、方差、误差的总结
先看这张图:
如果把训练模型比喻为用枪打靶,那我们的目标肯定是枪枪正中靶心,又稳又准。偏差决定了打的准不准,方差决定了打的稳不稳。准就是说我们能不能打中靶心,稳就是说我们要一梭子下来能不能集中在一个小区域内(玩过枪战游戏的同学一定可以理解)。噪音可以理解为你靶本身出问题了。
我们的目标虽然是又稳又准,但也不要走极端,因为真正的数据是未知的。如果偏差太小,每枪都精准命中一个点,就太极端了,真实数据的靶心可能并不在这里。如果方差太高,稳定性很差,就成了散弹枪。
总结一下:
low bias and low variance:又准又稳
low bias and high variance: 准但不稳
high bias and low variance:不准但稳
high bias and high variance:不准又不稳
算法的偏差与方差的特性
线性或者参数化的算法一般具有高偏差(bias)低方差(variance)的特点,比如线性回归,线性判别分析(Linear Discriminant Analysis),Logistic 回归等线性模型。
非线性或者非参数化的算法则常表现出低偏差(bias)高方差(variance),比如决策树,KNN,SVM。
模型与偏差、方差、误差的关系
一般来说,模型越复杂,偏差越小,但这时也就出现了过拟合;但方差却会越大,因为模型只对个别样本拟合到了机制,对其他样本数据稳定性很差。我们要做的就是在二者直接找到一个平衡,从而获得最优的泛化误差。
参考文章
机器学习中的 Bias(偏差)、Error(误差)、Variance(方差)有什么区别和联系