【机器学习:机器学习中的过拟合】它是什么以及如何防止它

【机器学习:机器学习中的过拟合】它是什么以及如何防止它

你知道有一个错误吗?

成千上万的数据科学初学者在不知不觉中犯下的错误?

这个错误会毁掉你的机器学习模型吗?

不,这不是夸张。我们讨论的是应用机器学习中最棘手的障碍之一:过拟合。

但不用担心:

在本指南中,我们将引导您准确了解过度拟合的含义、如何在模型中发现过度拟合以及模型过度拟合时该怎么办。

到最后,您将知道如何一劳永逸地处理这个棘手的问题。

过度拟合的例子

假设我们想根据学生的简历来预测她是否会获得工作面试机会。

现在,假设我们根据 10,000 份简历及其结果的数据集训练一个模型。

接下来,我们在原始数据集上尝试该模型,它以 99% 的准确率预测结果......哇!

但现在坏消息来了。

当我们在新的("看不见的")简历数据集上运行模型时,我们只能获得 50% 的准确率......呃哦!

我们的模型不能很好地从训练数据泛化到未见过的数据。

这称为过度拟合,是机器学习和数据科学中的常见问题。

事实上,过度拟合在现实世界中时常发生。您只需打开新闻频道即可听到示例:


过度拟合选举优先级(来源:XKCD)

信号与噪声

您可能听说过内特·西尔弗(Nate Silver)所著的著名著作《信号与噪声》。

在预测建模中,您可以将"信号"视为您希望从数据中学习的真正的基础模式。

另一方面,"噪声"是指数据集中的不相关信息或随机性。

例如,假设您正在对儿童的身高与年龄进行建模。如果你对大部分人群进行抽样,你会发现一个非常清晰的关系:


身高与年龄(来源:CDC)

这就是信号。

然而,如果你只能选择一所当地学校,那么这种关系可能会更加混乱。它会受到异常值(例如,父亲是 NBA 球员的孩子)和随机性(例如,在不同年龄进入青春期的孩子)的影响。

噪声干扰信号。

这就是机器学习的用武之地。功能良好的机器学习算法可以将信号与噪声分开。

如果算法太复杂或太灵活(例如,它有太多输入特征或没有正确正则化),它最终可能会"记住噪声"而不是找到信号。

然后,该过度拟合模型将根据该噪声进行预测。它在训练数据上的表现异常出色......但在新的、看不见的数据上表现却很差。

拟合优度

在统计学中,拟合优度是指模型的预测值与观测(真实)值的匹配程度。

学习了噪声而不是信号的模型被认为是"过度拟合",因为它适合训练数据集,但与新数据集拟合不佳。


虽然黑线与数据拟合良好,但绿线却过度拟合。

过拟合与欠拟合

通过观察相反的问题------欠拟合,我们可以更好地理解过拟合。

当模型太简单时(特征太少或正则化太多)就会出现欠拟合,这使得模型在从数据集中学习时不灵活。

简单学习者的预测方差往往较小,但对错误结果的偏差更大(请参阅:偏差-方差权衡)。

另一方面,复杂的学习者的预测往往有更大的差异。

偏差和方差都是机器学习中预测误差的形式。

通常,我们可以减少偏差带来的误差,但可能会增加方差带来的误差,反之亦然。

这种太简单(高偏差)与太复杂(高方差)之间的权衡是统计学和机器学习中的一个关键概念,并且影响所有监督学习算法。


偏差与方差(来源:EDS)

如何检测机器学习中的过度拟合

过度拟合以及一般机器学习的一个关键挑战是,在实际测试之前,我们无法知道模型在新数据上的表现如何。

为了解决这个问题,我们可以将初始数据集分成单独的训练和测试子集。


训练-测试分离

该方法可以估算我们的模型在新数据上的表现。

如果我们的模型在训练集上的表现比在测试集上的表现好得多,那么我们可能会过度拟合。

例如,如果我们的模型在训练集上的准确率达到 99%,但在测试集上的准确率仅为 55%,那么这将是一个很大的危险信号。

如果您想了解 Python 中的工作原理,我们提供了使用 Scikit-Learn 进行机器学习的完整教程。

另一个技巧是从一个非常简单的模型开始作为基准。

然后,当您尝试更复杂的算法时,您将有一个参考点来看看额外的复杂性是否值得。

这就是奥卡姆剃刀测试。如果两种模型的性能相当,那么您通常应该选择更简单的一种。

如何防止机器学习中的过度拟合

检测过度拟合很有用,但并不能解决问题。幸运的是,您有多种选择可以尝试。

以下是一些最流行的过拟合解决方案:

交叉验证

交叉验证是防止过拟合的有效预防措施。

这个想法很聪明:使用初始训练数据生成多个小型训练测试拆分。使用这些拆分来调整模型。

在标准的 k 折叠交叉验证中,我们将数据划分为 k 个子集,称为折叠。然后,我们在 k-1 折叠上迭代训练算法,同时使用剩余的折叠作为测试集(称为"保持折叠")。


K-Fold 交叉验证

交叉验证允许您仅使用原始训练集来调整超参数。这允许您将测试集保留为真正看不见的数据集,以便选择最终模型。

我们还有另一篇文章,对交叉验证进行了更详细的细分。

使用更多数据进行训练

它不会每次都有效,但使用更多数据进行训练可以帮助算法更好地检测信号。在前面对儿童身高与年龄进行建模的示例中,很明显,抽样更多学校将如何帮助您的模型。

当然,情况并非总是如此。如果我们只是添加更多嘈杂的数据,这种技术将无济于事。这就是为什么你应该始终确保你的数据是干净和相关的。

删除功能

某些算法具有内置的特征选择功能。

对于不这样做的要素,您可以通过删除不相关的输入要素来手动提高其泛化性。

一个有趣的方法是讲述一个关于每个特征如何适应模型的故事。这就像数据科学家对软件工程师的橡皮鸭调试技术的旋转,他们通过逐行向橡皮鸭解释代码来调试代码。

如果有什么没有意义,或者很难证明某些功能的合理性,这是识别它们的好方法。

此外,还有几种特征选择启发式方法可用于良好的起点。

提前停止

在迭代训练学习算法时,可以衡量模型每次迭代的性能。

在达到一定次数的迭代之前,新的迭代会改进模型。然而,在那之后,模型的泛化能力可能会减弱,因为它开始过度拟合训练数据。

提前停止是指在学习者通过该点之前停止训练过程。

如今,这种技术主要用于深度学习,而其他技术(如正则化)则是经典机器学习的首选。

规范化

正则化指的是一系列人为迫使模型变得更简单的技术。

具体方法取决于您使用的学习器类型。例如,你可以修剪决策树,在神经网络中使用剔除,或者在回归中为代价函数添加惩罚参数。

通常,正则化方法也是一种超参数,这意味着可以通过交叉验证对其进行调整。

在此,我们将对算法和正则化方法进行更详细的讨论。

组装

集合是一种机器学习方法,用于综合多个独立模型的预测结果。有几种不同的集合方法,但最常见的有两种:

Bagging 试图减少过度拟合复杂模型的机会。

  • 它可以并行培训大量的 "强 "学习者。
  • 强学习者是一个相对不受约束的模型。
  • 然后,套袋法将所有强学习者组合在一起,以 "平滑 "其预测结果。

助推试图提高简单模型的预测灵活性。

  • 它依次训练大量 "弱 "学习者。
  • 弱学习器是一种受限模型(即可以限制每棵决策树的最大深度)。
  • 这一系列中的每一部作品都注重吸取前一部作品的经验教训。
  • 然后,提升技术会将所有弱学习器合并成一个强学习器。

虽然套袋法和提升法都是集合方法,但它们处理问题的方向却截然相反。

套袋法使用复杂的基础模型,并试图 "平滑 "其预测结果,而提升法使用简单的基础模型,并试图 "提升 "其总体复杂度。

下一步工作

呼!我们刚刚讲了很多概念:

  • 信号、噪音以及它们与过度拟合的关系。
  • 统计数据的拟合优度
  • 欠拟合与过拟合
  • 偏差与方差的权衡
  • 如何利用训练-测试分割检测过度拟合
  • 如何使用交叉验证、特征选择、正则化等方法防止过度拟合。

希望看到所有这些概念联系在一起有助于澄清其中的一些概念。

要真正掌握这一主题,我们建议您进行实际操作练习。

虽然这些概念一开始可能会让人感到难以理解,但一旦你开始在实际代码和问题中看到它们,就会 "豁然开朗"。

相关推荐
可愛小吉17 分钟前
Python 课程14-TensorFlow
开发语言·人工智能·python·tensorflow
Elastic 中国社区官方博客37 分钟前
Elasticsearch:检索增强生成背后的重要思想
大数据·人工智能·elasticsearch·搜索引擎·全文检索
路人与大师44 分钟前
生成式语言模型技术栈
人工智能·语言模型·自然语言处理
网络研究院1 小时前
大型语言模型 (LLM) 劫持攻击不断升级,导致每天损失超过 100,000 美元
网络·人工智能·安全·语言模型·攻击·劫持
jia V iuww5201 小时前
数据分析
人工智能·数据挖掘·数据分析
AI第一基地2 小时前
推荐系统-电商直播 多目标排序算法探秘
人工智能·深度学习·排序算法·transformer·知识图谱·word2vec
叫我:松哥2 小时前
基于机器学习的癌症数据分析与预测系统实现,有三种算法,bootstrap前端+flask
前端·python·随机森林·机器学习·数据分析·flask·bootstrap
我是瓦力2 小时前
球形包围框-Bounding Sphere-原理-代码实现
人工智能·python·深度学习·计算机视觉·3d
开MINI的工科男2 小时前
【笔记】自动驾驶预测与决策规划_Part1_自动驾驶决策规划简介
人工智能·笔记·自动驾驶
网络研究院2 小时前
企业急于采用人工智能,忽视了安全强化
网络·人工智能·安全·工具·风险·企业