Skip to content

过拟合问题及解决方案

在本文中,我想解释一下在我们训练机器学习模型后遇到的机器学习和数据科学最重要的概念之一。这是一个必须知道的话题。

本文旨在解释以下主题:

  • 什么是机器学习项目中的过度拟合?
  • 我们如何检测过度拟合?
  • 我们如何解决过度拟合问题?
摄影:Isaac Smith在  Unsplash上
摄影:[Isaac Smith](https://unsplash.com/@isaacmsmith?utm_source=medium&utm_medium=referral)在  [Unsplash上](https://unsplash.com/?utm_source=medium&utm_medium=referral)

让我们首先确定概念的基础。

假设您想要预测股票的未来价格变动。

然后,您决定收集过去10天的股票的历史每日价格,并在散点图上绘制股票价格,如下所示:

上图显示实际股票价格是随机的。

要捕获股票价格变动,您需要评估并收集以下16种功能的数据,您知道股票价格取决于:

  • 行业表现
  • 公司新闻发布
  • 公司的收益
  • 公司的利润
  • 公司未来的公告
  • 公司的股息
  • 公司当前和未来的合约规模
  • 公司的并购状态
  • 公司的管理信息
  • 公司目前的合同
  • 公司的未来合同
  • 通货膨胀
  • 利率
  • 外汇汇率
  • 投资者情绪
  • 公司的竞争对手

收集,清理,缩放和转换数据后,您可以将数据拆分为训练和测试数据集。此外,您将训练数据提供给您的机器学习模型以进行训练。

训练模型后,您决定通过传入测试数据集来测试模型的准确性。

期望的结果

上图显示实际股票价格是随机的。然而,预测的股票价格是平滑的曲线。它不适合自己太靠近训练集,因此它能够更好地推广看不见的数据。

但是,让我们假设你的情节实际与预测的股票价格,你会遇到以下图表:

直线显示预测价格

这意味着该算法具有非常强的数据预概念。这意味着它具有高偏见性。**这被称为欠配合。**这些模型不适合预测新数据。

过拟合结果

这是另一个极端。它可能看起来好像在预测股价方面做得很好。**然而,这被称为过度拟合。**它也被称为高方差,因为它已经很好地学习了训练数据,因此无法很好地推广新的和看不见的数据。这些模型不适合预测新数据。如果我们为模型提供新数据,那么它的准确性将最终变得极差。

这也表明我们没有用足够的数据训练我们的模型。过度拟合是指您的模型过度训练自己训练的数据。可能是因为数据中存在太多功能,或者因为我们没有提供足够的数据。它发生在实际值和预测值之间的差值接近0时。

过度适应训练数据的模型并不能很好地概括为新的例子。他们不善于预测看不见的数据。

摄影:Stephen Dawson,  来自Unsplash
摄影:[Stephen Dawson](https://unsplash.com/@srd844?utm_source=medium&utm_medium=referral),  [来自Unsplash](https://unsplash.com/?utm_source=medium&utm_medium=referral)

这意味着它们在训练期间非常准确,并且在预测看不见的数据期间产生非常差的结果。如果在模型训练期间精度测量值(例如平均误差平方)显着降低,并且测试数据集的精度会下降,那么这意味着您的模型过度拟合数据。

如果您想了解可用于测量机器学习模型准确性的算法,请查看本文:必须知道每个数据的数学测量科学家
关键的数学公式在易于遵循的子弹点介绍medium.com

我们可以随机删除这些特征并迭代地评估算法的准确性,但这是一个非常繁琐和缓慢的过程。

基本上有四种减少过度拟合的常用方法。

最明显的选择是减少功能。您可以计算要素的相关矩阵,并减少彼此高度相关的要素:

import matplotlib.pyplot as pltplt.matshow(dataframe.corr())plt.show()

您可以选择模型选择算法。这些算法可以选择更重要的功能。

这些技术的问题在于我们最终可能会丢失有价值的信息。

您的目标应该是为模型提供足够的数据,以便对模型进行全面的培训,测试和验证。旨在提供60%的数据来训练模型,20%的数据用于测试,20%的数据用于验证模型。

正则化的目的是保持所有特征,但对系数的大小施加约束。

它是首选,因为您不必通过惩罚功能来丢失功能。当约束应用于参数时,模型不太容易过度拟合,因为它产生平滑的函数。

引入称为惩罚因子的正则化参数,其控制参数并确保模型本身不会过度训练训练数据。

这些参数设置为较小的值以消除过度拟合。当系数取大值时,正则化参数惩罚优化函数。

有两种常见的正则化技术:

  • 套索

增加一个惩罚值,它是系数幅度的绝对值。这确保了特征不会最终对算法的预测施加高权重。

from sklearn import linear_model model = linear_model.Lasso(alpha=0.1) model.fit([[0,0], [1, 1], [2, 2]], [0, 1, 2])

**2. RIDGE**

增加一个惩罚,它是系数大小的平方。结果,一些权重最终将为零。这意味着某些功能的数据将不会在算法中使用。

from sklearn.linear_model import Ridge model = Ridge(alpha=1.0) model.fit(X, y)

摄影:Sergey Pesterev,关于  Unsplash
摄影:[Sergey Pesterev,](https://unsplash.com/@sickle?utm_source=medium&utm_medium=referral)关于  [Unsplash](https://unsplash.com/?utm_source=medium&utm_medium=referral)

本文重点介绍了我们在测试机器学习模型后遇到的一个关键主题。它概述了以下关键部分:

  • 什么是机器学习项目中的过度拟合?
  • 我们如何检测过度拟合?
  • 我们如何解决过度拟合问题?

本文转自 medium,原文地址