机器学习入门:偏差和方差

偏差(bias):偏差衡量了模型的预测值与实际值之间的偏离关系。

方差(variance):方差描述的是训练数据在不同迭代阶段的训练模型中,预测值的变化波动情况(或称之为离散情况)

我们这里以线性回归为例进行介绍





线性回归是一种机器学习算法,它主要用来预测定量目标。该算法根据线性方式建模的自变量来拟合包含预测数据点的直线或平面(或超平面)。首先,让我们把这看作是最佳拟合线(为了更好地理解)。通常情况下,训练集中的数据点并不是全部都在最佳拟合线上,这是非常有意义的,因为任何数据都不是完美的。这也就是为什么我们首先要做预测,而不是随便画一条线的原因。

理解偏差




利用线性回归算法得到的线不能为了包含所有的训练集数据点就过于弯曲,因此有时无法捕捉到准确的关系。这叫做偏差。在数学上,在线性回归方程中得到的截距是偏差。

我为什么这么说?

让我解释一下:这是一个随机线性回归方程:

y = Intercept + Slope1*x1 + Slope2*x2

目标(y)在数据集中会有一些值,利用上面的公式可以计算出目标(y)的预测值。如果“截距”本身非常高并且很接近预测的y值,那么这就意味着方程另外两部分——自变量(x1和x2)的变化导致y的变化会很小。这意味着x1和x2所产生的方差值会很小,最终这将会导致建立一个欠拟合模型。欠拟合模型具有较低的R-squared(由自变量引起的目标方差量)。

欠拟合也可以通过首先考虑如何捕捉最佳拟合线/平面来理解。最佳拟合直线/平面捕捉目标和自变量之间的关系。如果这种关系被捕捉到一个非常高的范围,它会导致低偏差,反之亦然。

既然我们了解了什么是偏差,以及高偏差是如何导致欠拟合模型的,那么对于一个健壮的模型,我们需要消除这种欠拟合。

在这样一个场景中,我们创建了一条通过所有数据点的曲线,并且可以显示自变量和因变量之间的现有关系,那么模型中就不会存在偏差。

理解方差




对训练数据过度拟合的模型将导致一种新的现象,称为“方差”。现在来考虑几个模型:

模型1:高偏差(无法正确捕捉关系)

模型2:低偏差(在很大程度上捕捉关系)

验证模型时的误差测量:

Error = Actual Values — Predicted Values

在计算训练数据(图中还没有测试数据)的误差时,我们观察到:

模型1:在训练数据上对模型进行验证,结果表明误差较大

模型2:在训练数据上对模型进行验证,结果表明误差较小

现在,让我们引入训练数据,来理解方差。

如果模型在训练数据是过拟合的,那么该模型“理解”和“认识”训练数据的程度就会非常高,以至于它可能不利于对测试数据进行测试。因此当将测试数据用作该模型的输入时,它将无法捕捉到一种关系。从更广泛的角度来看,这意味着训练数据和测试数据之间的拟合有很大的差异(因为在训练数据上展示了完美的验证,而在测试数据却无法捕捉关系)。这种拟合差异被称为“方差”,这种现象产生的原因是模型只能理解训练数据,它对任何新的输入数据不能很好地进行预测。

在测试数据上验证上述模型时,我们注意到:

模型1:这里也没有正确地捕捉到关系,但是在训练数据和测试数据之间没有巨大的理解差距,所以方差很低

模型2:训练数据和试验数据之间存在巨大的理解差距,因此方差很大

偏差和方差之间的权衡




现在我们知道偏差和方差都会给我们的预测模型带来问题。那么我们该如何着手解决这个问题呢?

在我们继续之前,有几个术语需要理解:

过度拟合:低偏差和高可变性-模型非常适合训练数据,但是不适合测试数据,因为它只能很好地理解训练数据

欠拟合:高偏差和低可变性-模型在使用训练数据时无法捕捉关系,但由于它无论如何都没有捕捉到关系,因此训练数据和测试数据之间的理解差距不大,因此方差较小

回到解决方案,我们可以做以下工作,尝试在偏差和方差之间建立一种平衡:


1. 交叉验证




通常,一个模型是建立在训练数据上,并在相同的数据上进行测试。但还有一件事是人们更喜欢去做的,那就是在训练数据的一部分数据上测试模型,这部分数据称为验证数据。

那么,什么是交叉验证?

如前所述,模型验证是对部分训练数据进行的。因此,如果我们每次迭代都从训练数据中选择一组新的数据点来进行验证,并对从这些数据集获得的结果求平均值,那么我们就是在进行交叉验证。这是一种优化方法,主要用来了解模型在训练数据上的行为,同时它也是一种了解是否存在过拟合的方法。

交叉验证的类型:

K- fold CV:这里的K表示我们需要将我们的训练数据集分解成的集合的个数,然后用这K个集合进行模型验证,对这K个集合得到的结果取平均值,从而得到一个最终的结果,这可能会避免过拟合。

Leave-One-Out CV:Leave-One-Out CV的工作原理类似于K-Fold CV,但它将流程提升到了一个新的高度,因为它使用训练数据中的每一个数据点来计算交叉验证结果。这显然很耗时,但绝对有助于避免过度拟合。

前向链接:在处理时间序列数据时,K-Fold-CV和Leave-One-Out-CV会产生问题,因为某些年份的数据很可能会有其他年份没有的模式,因此使用随机数据集进行交叉验证是没有意义的。事实上,现有的趋势有可能被忽视,这并不是我们想要的。因此,在这种情况下,通常使用前向链接方法,其中我们形成的每个折叠(用于交叉验证)包含一个训练集组,通过将连续一年的数据与上一个训练集组相加并在测试集上进行验证(该测试集只包含训练组中使用的连续年份到最近一年的数据)。

2. 正则化




正则化是一种技术,它通过附加在模型自变量上的β惩罚系数来减少偏差和方差。

总结

没有完美的模型。必须用积极的方式利用模型不完美的地方,才能使它变得完美。一旦你能够识别出你的模型中存在的偏差或可变性,你就可以做很多事情来改变它。您也可以尝试特征选择和特征转换。您可以尝试删除一些过拟合变量。基于当时的可能性,可以做出决定,如果有可能的话,这个模型肯定会得到改进。


感谢您的阅读!学习快乐!

支持我的写作

作者:Shaurya Lalwani

deephub翻译组:钱三一

发布于 2020-08-17 08:41