过拟合问题

前言

一开始,我在用自己学到的各种模型对数据做预测时,有时候自己的模型与训练数据拟合的非常好,但在测试样例中却表现的很糟糕。

是模型不够好?数据有问题?

于是我就换用更复杂的模型,在神经网络中也尝试不断地增加层数,结果模型与训练数据拟合的越来越好,但在测试样例中表现的越来越糟糕。

这是我曾经踏入的一个误区,总以为模型和算法是机器学习的核心,不知不觉就陷入了所谓的过拟合(Overfitting)陷阱,如果在机器学习中真的有一个不得不谈的话题,那必定是过拟合。

事实上,在整个机器学习中,哪怕不懂决策树,不懂贝叶斯模型,不懂支持向量机,仍然可以用tensorflow搭建神经网络来“炼丹”。但如果对“过拟合”的理解不够深入,那么对于机器学习来说,炼再多的丹也只是个烧锅炉的。

过拟合和欠拟合是机器学习的核心问题,而两个核心问题的理解和解决,衍生出很多机器学习的基本思想。

在我看来,过拟合要比欠拟合更应该引起人们的重视,因为欠拟合本身很容易被发现,而过拟合却会让人迷惑——明明自己拟合的足够好,却还是无法做出有效的预测。比如,机器学习为什么要分为训练集和测试集,在训练集中为什么要做交叉验证(Cross Validation),数据越多越好吗,为什么使用正则化可以降低过拟合…

所以,这次,我对过拟合问题做一次全面的总结。

模型复杂度

线性回归可能是最简单的模型,假设我们的样本是m个特征构成的向量,X=(x1,x2,x3……xm),n个样本构成标记向量,Y=(y1,y2,y3……ym),那我们就可以建立一个非常简单的模型:f(x)=wx+b

如果,即样本只有一个特征,那么简单线性回归在样本空间会表现为一条直线。

如用简单线性回归不能满足要求,我们可以考虑稍微复杂一些的模型,比如多项式回归(polynomial regression),f(x)=w0+w1x+w2x^2 +w3*x^3……,它的本质是给样本增加特征,把x的指数项作为了另一个特征,再将这些一起放在线性模型的框架内。从数学来说,只是对广义线性模型进行了级数展开。
在这里插入图片描述
从模型的角度来看,参数越多,模型的复杂度就越高,高复杂度的模型也叫做高容量的模型,对于很多不同种类的数据都能有很好的拟合效果。

性能度量

从直观上来理解,我们会觉得复杂模型会更好一点。因为我们希望模型的预测值与样本的真实值y差距尽可能小,预测值与真实值越接近,代表着我们的模型越准确。

以简单线性回归问题为例,一个自然的想法是将两者直接作差,将作为我们的性能指标,但简单的求差再求和并没有考虑样本的个数,这样的性能指标数值会随着样本容量的增大而增大。所以我们要除以样本的个数,结果是:
在这里插入图片描述
但是,即便这样的形式可以作为一个有效的性能度量,但在数值优化上还是会遇到困难,所以我们给两者的差做平方,即:
在这里插入图片描述
这就是回归问题中常用到的性能指标:均方误差(mean squared error)。用均方误差作为损失函数的数值优化,我们把它叫做最小二乘法(least squares)。
在这里插入图片描述
如果我们仅仅看性能度量给出的结果,蓝线的表现远远好于黑线。但蓝线却是一种严重的过拟合现象,看起来蓝线经过了每一个点,但机器学习的任务是对未知样本做出预测,事实上,蓝线对于未知样本的拟合效果要远远差于黑线。究其根本,性能度量衡量的是模型对数据的拟合能力,但是机器学习的目的是获得预测能力强的模型。

误差的偏差-方差分解

一方面,误差可以通过真实值与预测值的差来计算,另一方面,我们也可以把误差进一步表示成偏差(Bias)和方差(Variance)的和。所谓偏差,是指我们样本预测值的平均值与样本真实值的差,而方差是指样本预测值偏离样本预测值平均值的程度,或者说是样本预测值的离散程度。

事实上,我们有这样的关系,Error=Bias+Variance+Noise,其中Noise是指系统的噪声,一般我们认为,其期望为零。
在这里插入图片描述
我们做这样的分解的意义在于,偏差和方差本身就是冲突的关系,偏差是模型的拟合能力的体现,符合均方误差作为性能度量的标准,本质是对模型准确度的刻画;而方差是模型稳定性的体现,刻画了模型本身对数据集的依赖,一定程度上反映了泛化能力。

在这里插入图片描述

如图所示,左上低偏差低方差,既准确又稳定,属于理想情况;左下高偏差低方差,稳定但不准确,属于训练的初步阶段,模型与数据欠拟合;右上低偏差高方差,准确但不稳定,是过度训练的结果 ,模型与数据过拟合;右下,不准确也不稳定,可能是随机猜测的模型。

过拟合和欠拟合是机器学习的核心问题,并没有一个模型能够同时避免这两者,所以降低过拟合的技术是任何一个机器学习学习者都需要掌握的。只要你采用性能度量来衡量模型的优劣,过拟合和欠拟合均无法避免。

分集的意义

既然模型的能力可以分为对现有数据的拟合能力和对位置数据的预测能力,我们就可以把我们的数据分为两部分,一部分用来检测模型的拟合能力,一部分用来检测模型的预测能力,前者我们叫做训练集,后者我们叫做测试集。

如果一个模型在训练集上表现优异,但是测试集上表现很差,就成为了过拟合的典型特征,即拟合能力强,但预测能力弱。
在这里插入图片描述
如图所示,随着模型复杂度的增加,训练集上的误差一直减小,因为模型的参数越多,拟合能力越强;但测试集上的误差却先减少后增加,这代表着模型的参数太少或者太多都会造成预测能力的下降,最终我们选择的是使得测试误差最小的模型复杂度。

基于此判据,我们可以通过观察测试集误差的表现,来对各种超参数有效的挑选。

在这里插入图片描述

使用迭代更新策略寻找最优参数值时,training cycles表示迭代的轮数,可以看出随着迭代次数的增加,训练集上的误差在减少,而测试集上的误差是先减少再增加,这提醒我们迭代不能无限制的进行下去,必须做一个截断,提前终止迭代是深度学习常用的技术,目的同样是为了获得最好的性能。
在这里插入图片描述

在高方差的情况下,测试集误差随着数据的增加在减小,但训练集却在增加。一方面表明数据的增加会增强模型的预测能力,另一方面也表明,高方差下测试误差和训练误差会有大的间隔,可以尝试更少的特征和更多的数据。

在这里插入图片描述

在高偏差的情况下,测试集的误差随着数据的增加在减小,训练集误差在增加,但相比于高方差的情况,训练误差和测试误差间隔很小,测试误差曲线已经接近平坦,这时继续增加数据,效果也不会变好,而是要适当的增加模型复杂度。

正则化(转)

L1正则化和L2正则化的详细直观解释

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nine_mink

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值