首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

利用正则化方法避免过拟合问题

引言

你有没有创建过一个可以完美训练样本的机器学习模型,但对于需要预测的样本却给出了非常糟糕的预测!你有没有想过为什么会这样?本文解释了过度拟合,这是导致了不可见样本预测不佳的原因之一。同时,这篇文章介绍了基于回归的正则化技术,明确了如何使用正则化技术避免过度拟合的方式。

本文解释了何为过度拟合,即导致被预测样本预测不佳的原因之一。同时,通过简单的步骤介绍了基于回归的正则化方法,明确了如何用正则化的方式避免过度拟合的发生。

多项式回归与过度拟合

你有没有创建过一个可以完美训练样本的机器学习模型,但对于需要预测的样本却给出了非常糟糕的预测!你有没有想过为什么会这样?本文解释了过度拟合,这是导致了不可见样本预测不佳的原因之一。同时,这篇文章介绍了基于回归的正则化技术,明确了如何使用正则化技术避免过度拟合的方式。

机器学习 (ML) 的重点是训练数据的算法,以便创建一个模型。通过这个模型,我们能够对看不见的数据 (测试数据) 做出正确的预测。例如,如果要创建一个分类器,我们首先要收集训练 ML 算法所需的数据。我们负责找到不同类的最好分辨特征来表示每个类,以便电脑能够辨别不同的类。这些特征将被用来训练 ML 算法。假设我们要建立一个 ML 模型,将图像分类为包含猫咪的以及不包含猫咪的。我们通过使用以下图片来训练数据。

我们要回答的第一个问题是“什么是可以用来区分不同类的最佳特征?”这是机器学习的关键问题所在;因为使用更好的特征可以训练 ML 模型产生更好的预测。让我们试着以这些图像为例,并从中提取一些猫的代表性特征。一些代表性的特征可以是两个黑色的瞳孔以及两只有角度的耳朵。假设我们用某种方法提取了这些特征,并且用上面的图像创建了一个ML 模型。这种模型可以应用于各种猫的图像,因为大多数猫都有以上的那些特点。我们可以使用一些需要预测的数据来测试模型,如下所示。假设测试数据的分类精度为 x%。

你可能想要增加分类的准确性,那么首先你要考虑的就是使用更多特征。这是因为使用的判别特征越多,准确度就越高。通过再次对训练数据的检测,我们可以找到更多的特征,如整体图像的颜色等;因为所有训练的猫咪样本都是白色的,且眼睛虹膜为黄颜色。下面显示的四个特征即为特征向量。它们将被用来重新训练ML 模型。

创建训练过的模型后,我们就需要来测试它。使用新的特征向量的预期结果是,分类精度将降低且小于 x%。这是为什么呢?精度下降的原因是因为使用了一些已经存在于训练数据中但不广泛存在于所有猫咪图像中的特征。这些特征并不存在于每个猫咪的图片里。所有使用的训练图像有白色的皮肤和黄色的虹膜,因此机器认为所有的猫都有以上两个特征。而在测试数据中,有些猫是黑色的,有些是黄色的——这些并不能通过白色猫咪的训练数据而训练出来。与此同时,有些猫咪的虹膜也并不是黄色的。

在这种情况下,我们使用的特征是高效强大的训练样本,但在测试样本过程中表现却十分糟糕,这种现象则被称为过度拟合。即该模型受训练数据的某些特征而得到训练,但在测试数据中却不存在这种特征。

前面讨论的目的是通过一个高层次的例子来简单解释什么是过度拟合。想要了解过度拟合的细节,最好还是使用一个较为简单的示例。其余的讨论就将基于一个回归的例子来讨论过度拟合的细节。

理解基于回归示例的正则化

假设我们要创建一个符合下面所示数据的回归模型。我们可以使用多项式回归。

我们可以首先使用的最简单模型是具有一阶多项式方程的线性模型:

θ1、θ2是模型参数和x是唯一使用的特征。

前面的模型的图表如下所示:

根据如下所示的损失函数,我们可以得出这样的结论:模型不能很好地拟合数据。

fi(xi)是样本i预期输出值,di为同一个样本的所需输出值。

这个模型太简单了,因此很多预测都不准确。所以我们应该创建一个更复杂的模型,以便能够很好地适应数据。那么我们可以将等式的程度从一到二增加。显示如下:

通过将相同的特征x提升为 2 (x2),我们创建了一个新的特征;我们不仅可以捕获数据的线性特征,还能捕捉一些非线性特征。新模型的图表如下所示:

该图表明,第二度多项式比第一度更适合数据。但同时,二次方程也不能很好地应用于一些数据样本。这就是为什么我们可以创建一个更复杂的第三度模型,显示如下:

该图将如下所示:

在添加了捕获第三级数据属性的新特征后,该模型变得更适合于数据。为了更好地适应数据,我们还可以将等式的程度提高到第四度,如下面的等式所示:

该图将如下所示:

多项式方程的程度越高,它就越适合于数据。但还有一些重要的问题需要解答。如果用通过增加新的特征来增加多项式方程程度的方式来提高结果的准确度,那么为什么不使用一个非常高的程度,比如100度呢?或者说,这类问题的最佳度是多少呢?

模型容量/复杂性

有一个项叫做模型容量或复杂性。模型容量/复杂性是指模型可以使用的变化级别。容量越高,模型所能应付的变化越大。第一个模型y1,与y4相比较而言,就是一个小容量模型。在我们的例子中,我们通过增加多项式程度来增加容量。

当然,多项式方程的程度越高,数据就越合适。但请记住,增加多项式的程度也增加了模型的复杂性。使用比所需容量高的模型可能会导致过度拟合。也就是说,模型会变得非常复杂,它会很好的适合训练数据,但对于需要预测的数据而言将会是非常失败的。ML 的目标不仅是建立一个可以高效训练数据的模型,同时也应该可以应用于需要预测的数据样本。

第四度 (y4) 的模型是非常复杂的。是的,它非常适合我们已经得到的数据,但它却不能应用在需要预测的数据。这种情况下,y4中新使用的特征(就是x4)捕获的细节比我们所需的要多。因此这个新特征使模型过于复杂,所以我们应该放弃使用这个特征。

在这个例子中,实际上我们知道要移除哪些特征。因此,我们可以选择不要使用它,并且返回到以前使用的的第三度模型 。但在实际工作中,我们并不知道要移除哪些特征。此外,假设新特征没有那么糟糕,我们不想完全移除它,只是想尽可能的减少它带来的负面影响,那我们该怎么办?

我们来回顾一下损失函数,其唯一的目标就是最小化或避免预测的误差。我们可以设定一个新的目标,尽可能减少或避免新特征的效果。在修改损失函数以修x3后,我们得到的公式将如下所示:

我们现在的目标是尽量最小化损失函数。我们现在只想尽量减少 θ4x4这个项。很明显,为了最小化 θ4x4,我们应该尽量减少 θ4,因为它是的唯一的自由参数。我们可以将其值设置为零;如果为了防止该特征表现十分糟糕,我们可以选择完全移除该特征,如下所示:

通过去掉它,我们回到第三度多项式方程 ( y3)。y3不能像y4一样完美符合所有已存在的数据,但总的来说,它却可以比y4为需要预测的数据提供更好的表现。

但是,如果x4是一个相对良好的特征,我们只是想限制它,而不是完全移除它,我们可以把它设置为一个接近零的,但不到零的值 (如 0.1),如下所示。通过这样做,我们限制了x4的效果。因此,新的模型不会像以前那样复杂。

回到y2,看起来它似乎比y3简单。它可以很好地使用已存在的和需要预测的数据样本。因此,我们应该移除在y3的新特征(即x3),或者如果表现得没有那么糟糕时,我们可以只是减小它。我们可以修改损失函数来做到这一点。

正则化

请注意,我们实际上知道y2是适合数据的最佳模型,因为数据图表可供我们使用。这是一个非常简单的任务,我们可以自己手动解决。但是,如果这些信息不能提供给我们,并且随着样本数量和数据复杂性的增加而增加,我们将无法轻易得出这样的结论。必须有一种自动的东西来告诉我们哪种程度将最适合所提供的数据,同时告诉我们需要把那些特征的影响降低至最低,以获得最好的预测。这就是正则化。

正则化帮助我们选择模型复杂度以适应数据。自动识别使模型过于复杂的干扰特征会大幅度提高预测效率。请记住,如果这些特征符合标准,正则化是十分有用的,会相对地帮助我们得到良好的预测。并且我们只是需要减小该特征,并不是完全移除它们。正则化会限制所有使用的特征,而不是某个选定的子集。之前我们只限制x3和x4两个特征,而不是所有特征。因此这种情况不属于正则化的范畴。

使用正则化时,一个新的项会被添加到损失函数,以限制特征,因此损失函数将如下所示:

在移动Λ以外的总和后,它也可以表示为如下所示的式:

新添加的项用限制特征的方式来控制模型复杂性的级别。我们之前的目标是在添加正则化项之前,尽量减少预测误差。而现在我们的目标是尽量减少错误,但要小心不要使模型过于复杂,避免过度拟合。

有一个称为 lambda (λ) 的正则化参数,它控制如何限制这些特征。它是一个没有固定值的超参数。它的值根据不同的任务而改变。随着它的值的增加,对特征的限制力度也会越大。因此,模型变得更加简单。当其值降低时,对特征惩罚的力度也会降低,从而提高模型的复杂性。当其为零时表示根本不限制任何特征。

当λ为零时, θj的值将不会受到限制,如下一等式所示。这是因为设置为零意味着移除正则化项,而留下了错误项。因此,我们的目标将回溯到将错误降到最小,越接近零越好。当误差最小化是目标时,模型可能会发生过度拟合的情况。

但是,当限制参数λ的值非常高时 (例如109,对于参数θj来说就必须有很高的限制,以使损失保持在最小值。因此,参数θj将为零。由此得出,模型 (y4) 将修剪θi,如下所示。

请注意,正则化项是从1开始它的索引j,而不是0。实际上,我们使用正则化项来限制特征 (xi)。因为θ0没有关联的功能,所以没有理由去限制它。在这种情况下,模型将会是y4=θ0并以下图形式显示出:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181031B1IA5J00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券