机器学习算法中的过拟合与欠拟合

机器学习中性能不佳的原因要么是数据过拟合,要么是数据欠拟合。

在这篇文章中,您将了解机器学习中泛化的概念以及随之而来的过拟合和欠拟合问题。

通过我的新书《掌握机器学习算法》来**启动您的项目**,其中包括**分步教程**和所有示例的**Excel 电子表格文件**。

让我们开始吧。

Overfitting and Underfitting With Machine Learning Algorithms

机器学习算法中的过拟合与欠拟合
图片由 Ian Carroll 拍摄,保留部分权利。

在机器学习中近似目标函数

监督式机器学习最好理解为近似一个目标函数(f),该函数将输入变量(X)映射到输出变量(Y)。

Y = f(X)

这种描述涵盖了分类和预测问题的范围以及可用于解决这些问题的机器学习算法。

从训练数据中学习目标函数的一个重要考虑因素是模型对新数据的泛化能力。泛化很重要,因为我们收集的数据只是一个样本,它是不完整且嘈杂的。

获取您的免费算法思维导图

Machine Learning Algorithms Mind Map

方便的机器学习算法思维导图样本。

我创建了一份方便的思维导图,其中包含60多种按类型组织的算法。

下载、打印并使用它。


还可以独家访问机器学习算法电子邮件迷你课程。

 

 

机器学习中的泛化

在机器学习中,我们将从训练数据中学习目标函数描述为归纳学习。

归纳指的是从具体示例中学习一般概念,这正是监督式机器学习问题旨在解决的问题。这与演绎不同,演绎是反向的,它试图从一般规则中学习具体概念。

泛化指的是机器学习模型学习到的概念在模型学习时未见过特定示例上的适用程度。

一个好的机器学习模型的目标是从训练数据泛化到问题领域中的任何数据。这使得我们能够在未来对模型从未见过的数据进行预测。

在讨论机器学习模型学习和泛化到新数据的能力时,机器学习中使用了一种术语,即过拟合和欠拟合。

过拟合和欠拟合是导致机器学习算法性能不佳的两个最大原因。

统计拟合

在统计学中,“拟合”指的是你近似目标函数的程度。

这是一个很好的机器学习术语,因为监督式机器学习算法旨在近似输入变量给定输出变量的未知底层映射函数。

统计学经常描述拟合优度,它指的是用于估计函数近似与目标函数匹配程度的度量。

其中一些方法在机器学习中很有用(例如计算残差),但其中一些技术假设我们知道我们正在近似的目标函数的具体形式,这在机器学习中并非如此。

如果我们知道目标函数的具体形式,我们将直接使用它进行预测,而不是试图从嘈杂的训练数据样本中学习一个近似值。

机器学习中的过拟合

过拟合指的是模型对训练数据建模得太好。

当模型学习训练数据中的细节和噪声达到对模型在新数据上的性能产生负面影响的程度时,就会发生过拟合。这意味着训练数据中的噪声或随机波动被模型捕捉并学习为概念。问题是这些概念不适用于新数据,并对模型的泛化能力产生负面影响。

过拟合更可能发生在具有更大灵活性的非参数和非线性模型上,当学习目标函数时。因此,许多非参数机器学习算法也包含参数或技术来限制和约束模型学习的细节程度。

例如,决策树是一种非参数机器学习算法,它非常灵活,容易对训练数据过拟合。可以通过在树学习后进行剪枝来解决这个问题,以删除其学到的部分细节。

机器学习中的欠拟合

欠拟合指的是一个既不能对训练数据建模,也不能泛化到新数据的模型。

一个欠拟合的机器学习模型不是一个合适的模型,并且由于它在训练数据上的性能不佳而显而易见。

欠拟合通常不被讨论,因为它在给定良好的性能指标时很容易检测到。补救措施是继续尝试替代的机器学习算法。尽管如此,它确实与过拟合问题形成了鲜明对比。

机器学习中的良好拟合

理想情况下,您希望选择一个处于欠拟合和过拟合之间最佳点的模型。

这是目标,但在实践中很难做到。

为了理解这个目标,我们可以观察机器学习算法在学习训练数据时随时间推移的性能。我们可以绘制训练数据上的技能和我们从训练过程中保留下来的测试数据集上的技能。

随着算法的学习,模型在训练数据上的误差会下降,在测试数据集上的误差也会下降。如果我们训练时间过长,训练数据集上的性能可能会继续下降,因为模型正在过拟合,学习训练数据集中不相关的细节和噪声。与此同时,测试集的误差又开始上升,因为模型的泛化能力下降了。

最佳点是测试数据集上的误差开始增加之前的点,此时模型在训练数据集和未见的测试数据集上都具有良好的技能。

您可以使用您最喜欢的机器学习算法进行此实验。这在实践中通常不是一个有用的技术,因为通过使用测试数据集上的技能选择训练的停止点,这意味着测试集不再是“未见的”或独立的客观度量。关于该数据的一些知识(很多有用的知识)已经泄露到训练过程中。

还有两种额外的技术可以在实践中帮助找到最佳点:重采样方法和验证数据集。

如何限制过拟合

过拟合和欠拟合都可能导致模型性能不佳。但应用机器学习中最常见的问题是过拟合。

过拟合之所以成为问题,是因为机器学习算法在训练数据上的评估与我们最关心的评估不同,即算法在未见过的数据上的表现如何。

在评估机器学习算法时,有两种重要的技术可以用来限制过拟合

  1. 使用重采样技术估计模型准确性。
  2. 保留一个验证数据集。

最流行的重采样技术是 k 折交叉验证。它允许您在不同的训练数据子集上训练和测试您的模型 k 次,并建立机器学习模型在未见过的数据上的性能估计。

验证数据集只是您的训练数据的一个子集,您将其保留在您的机器学习算法之外,直到项目结束。在您选择并调整了您的训练数据集上的机器学习算法之后,您可以在验证数据集上评估学习到的模型,以获得模型在未见过的数据上表现的最终客观概念。

使用交叉验证是应用机器学习中估计未见过数据模型准确性的黄金标准。如果您有数据,使用验证数据集也是一个很好的实践。

进一步阅读

本节列出了一些推荐资源,如果您想了解更多关于机器学习中的泛化、过拟合和欠拟合。

总结

在这篇文章中,您发现机器学习是通过归纳法解决问题。

您了解到泛化是对模型学习到的概念在新数据上适用程度的描述。最后,您了解了机器学习中泛化的术语,即过拟合和欠拟合。

  • **过拟合**:在训练数据上表现良好,但在其他数据上泛化能力差。
  • **欠拟合**:在训练数据上表现不佳,在其他数据上泛化能力差。

您对过拟合、欠拟合或这篇文章有什么疑问吗?请留言提问,我将尽力回答。

了解机器学习算法的工作原理!

Mater Machine Learning Algorithms

几分钟内了解算法如何工作

...只需算术和简单示例

在我的新电子书中探索如何实现
精通机器学习算法

它涵盖了**10种顶级算法**的**解释**和**示例**,例如:
_线性回归_、_k-近邻_、_支持向量机_等等...

最后,揭开
机器学习算法的神秘面纱

跳过学术理论。只看结果。

查看内容

115 条对《使用机器学习算法进行过拟合和欠拟合》的回复

  1. Kieron 2016 年 3 月 21 日上午 5:08 #

    Jason,我喜欢你的网站!我们目前正在考虑构建一个平台,用于连接数据科学家等与公司 http://www.kortx.co.uk

  2. Gary 2016 年 8 月 25 日晚上 8:03 #

    嗨,Jason,
    重采样和留出法(限制过拟合的两种选择)是相互排斥的,还是经常一起使用?同时使用这两种技术会使其中一种技术变得多余吗?
    谢谢

    • Jason Brownlee 2016 年 8 月 26 日上午 10:32 #

      你好,Gary,

      通常您会选择一种方法来估计算法的性能。通常,k 折交叉验证是推荐的方法。在我看来,同时使用这两种方法并没有太大意义,至少目前是这样。

  3. Bruno 2016 年 8 月 29 日下午 6:27 #

    Jason,谢谢你的文章,

    我成功地运用了你的方法!不过,我注意到交叉验证并不能防止过拟合。
    根据数据和算法的不同,使用交叉验证很容易获得低错误率但同时发生过拟合。
    你以前见过这种情况吗?

    这就是我分两步操作的原因
    1. 比较训练集分数和测试集分数的平均值,检查我是否没有过拟合太多,并调整算法参数
    2. 计算交叉验证以获得使用先前参数的总体性能。

    我这样做错了吗?
    非常感谢!

    • Jason Brownlee 2016 年 8 月 30 日上午 8:27 #

      布鲁诺,我同意,交叉验证是减少过拟合的一种技术,但必须小心使用(例如折叠次数)。

      人类是有偏见的,所以你也要限制人工循环迭代的次数,因为即使有交叉验证,我们也会鼓励方法过拟合。因此,保留一个验证数据集,只在最终模型选择时评估一次,也是一个好主意。

      你的程序看起来没问题,考虑在交叉验证后添加一个验证数据集。

    • mahie 2018 年 11 月 10 日上午 12:20 #

      请告诉我如何使模型过拟合,然后如何对该模型进行正则化以解决过拟合问题。

      • Jason Brownlee 2018 年 11 月 10 日上午 6:07 #

        训练时间过长会导致过拟合,可以使用 L2、提前停止或 Dropout 进行正则化。

  4. Bruno 2016 年 9 月 5 日下午 6:43 #

    Jason,我不知道如何使用验证集
    你用它来检查性能一致性/是否与 CV 分数没有过拟合吗?

    你用哪个分数(和误差)作为模型性能:是来自验证集的分数还是来自 CV 的分数?

    非常感谢

    • Jason Brownlee 2016 年 9 月 6 日上午 9:46 #

      你好,Bruno,

      我建议使用交叉验证来估计模型的技能。

      我还建议验证数据集可以用作冒烟测试。例如,误差应在交叉验证平均误差估计的 2-3 个标准差之内,即“合理”。

      最后,一旦您选择了模型,就可以继续使用所有训练数据进行训练,并开始使用它进行预测。

      希望这能有所帮助。

  5. Bruno 2016 年 9 月 7 日下午 5:39 #

    嗨,Jason,
    明白了!
    非常感谢您的清晰回答和时间。

  6. Lijo 2016 年 11 月 2 日上午 7:23 #

    嗨,Jason,
    我很好奇为什么我们不能使用验证数据集,然后通过将我们的模型与训练集和验证数据集进行比较来找到最佳点,使用这种方法有什么缺点?

    • Jason Brownlee 2016 年 11 月 2 日上午 9:13 #

      嗨,Lijo,

      这很难。你的方法可能效果很好,但在某些问题上可能会导致过拟合。实验一下就知道了。

      模型在保留(不可见)验证集上的表现如何的知识被反馈到模型选择中,从而影响训练过程。

  7. Wan. 2016 年 11 月 18 日上午 11:43 #

    我的常数约为 111.832,这算过拟合吗?我正在使用逻辑回归预测恶意软件检测,数据流量有 5000 条记录。我在 RapidMiner 中使用了特征选择技术,从 56 个特征中提取了 7 个特征,并在 SPSS 中进行了统计逻辑回归。从 7 个特征中选择了 3 个显著特征。最后,我需要绘制一个阈值图,其中截止点是概率值的 80%。正如我所说,我的常数很高,性能达到 97%。请指教。

    • Jason Brownlee 2016 年 11 月 19 日上午 8:40 #

      你好,Wan,

      过拟合指的是训练数据集学习得太好,以至于在新数据上表现不佳。即模型在新示例上的泛化能力不够好。

      您可以通过在新数据上评估模型,或使用 k 折交叉验证等重采样技术来估计在新数据上的性能。

      这有帮助吗?

  8. John 2017 年 1 月 27 日下午 9:42 #

    一如既往,解释得很好。如果你觉得需要修正一个小小的拼写错误
    “欠拟合指的是一个既不能对训练数据建模**也**不能泛化到新数据的模型。”(我不是母语为英语的人,但我认为应该是“nor”)。

    • Jason Brownlee 2017 年 1 月 28 日上午 7:39 #

      谢谢 John,我修正了一些拼写错误,包括你指出的那个。

  9. Saqib Qamar 2017 年 5 月 1 日下午 5:28 #

    嗨,Jason,
    关于过拟合的精彩教程……

    非常感谢

  10. hang 2017 年 5 月 11 日上午 5:35 #

    异或问题的解决方案是否是过拟合?

    它不能用 2 个单元和 1 个输出解决吗?

    • Jason Brownlee 2017 年 5 月 11 日上午 8:35 #

      也许欠拟合——就像提供不足以解决它一样。甚至是不合适的。

  11. machine_learner 2017 年 5 月 25 日晚上 8:01 #

    嗨,Jason,好文章!

    所以只是确认一下,交叉验证实际上并不能防止过拟合,它只是用来让您了解模型在未见过的数据上的表现,然后您可以修改参数以提高其性能?也就是说,它只是一种评估技术

    希望您能及时回复,因为我有一个关于此的考试!谢谢

  12. Yolower 2017 年 7 月 9 日上午 10:21 #

    如何解决欠拟合问题?

  13. geekWolf 2017 年 8 月 29 日上午 1:13 #

    你好,

    过拟合和欠拟合在泛化方面都表现不佳。那么,实现良好泛化的解决方案是什么呢?

    谢谢你。

    • Jason Brownlee 2017 年 8 月 29 日下午 5:08 #

      仔细调整你的模型 🙂

      没有灵丹妙药。

  14. Aniket Saxena 2017 年 11 月 7 日上午 2:01 #

    如果我的 k 近邻分类器在构建预测模型时导致过拟合怎么办?在这种情况下,或者更具体地说,在分类问题中,我该如何减少过拟合?正如我们可以在回归问题中使用正则化(ridge、lasso、elastic net)来减少过拟合一样,我可以在分类问题中也使用正则化吗?请帮忙……

  15. Aniket Saxena 2017 年 11 月 8 日上午 12:14 #

    谢谢。我将检查它的工作原理,然后将我的结果反馈给您。

  16. Himanshu Chawla 2017 年 11 月 17 日上午 1:06 #

    嗨,Jason,感谢你的精彩文章,我有一个小疑问……

    我们是在训练数据的子集中进行交叉验证,还是在训练数据和测试数据之间进行交叉验证?

    • Jason Brownlee 2017 年 11 月 17 日上午 9:26 #

      交叉验证会多次创建训练/测试集,以便我们能够在对未见数据进行预测时构建和评估多个模型。

      • Himanshu Chawla 2017 年 11 月 17 日晚上 9:17 #

        但那些训练/测试数据集只来自训练集

        • Jason Brownlee 2017 年 11 月 18 日上午 10:17 #

          不是“训练”,而是“可用数据”。

  17. Aakash 2018 年 1 月 2 日上午 5:43 #

    嗨,Jason,

    你对这个问题的解释非常精彩,对我帮助很大。但我只有一个关于我们可以用来限制过拟合的两种重要技术的问题。

    我的问题是,由于流行的重采样技术是 k 折交叉验证,那么它与引导法有什么区别?

    期待您的回答,

    谢谢你

    • Jason Brownlee 2018 年 1 月 2 日下午 3:58 #

      引导法从数据集中有放回地抽取随机样本,而 k 折交叉验证将数据集分成不重叠的子集。

  18. Mohammad Ehtasham Billah 2018 年 2 月 7 日上午 8:44 #

    你好 jason,
    感谢又一篇精彩的文章!!
    将数据分为三部分(训练集、测试集和验证集)是个好主意吗?我将只在项目结束时使用验证集,有时使用测试集来检查交叉验证的准确性是否与测试集的准确性匹配。

    我如何判断交叉验证后得到的模型没有过拟合?通过立即将模型应用于测试集(而不是最终验证集)?我不想等到项目结束才发现我的模型过拟合了 :)

    谢谢

    • Jason Brownlee 2018 年 2 月 7 日上午 9:32 #

      我们可以通过交叉验证估计模型的技能,并通过保留的测试数据集进行确认。

      这些只是估计,我们无法确定是否过拟合/欠拟合,但我们会努力获得最可靠的模型技能估计。

  19. Mohammad Ehtasham Billah 2018 年 2 月 7 日上午 8:54 #

    如何确定 K 折交叉验证中的折叠数 k 以避免交叉验证模型中的过拟合?是否有任何经验法则,例如观测数量与 K 的比率?

    谢谢

    • Jason Brownlee 2018 年 2 月 7 日上午 9:33 #

      如果可能的话,每个折叠中的样本数量应具有代表性,能代表更广泛的数据集。

  20. Nil 2018 年 3 月 27 日晚上 8:26 #

    嗨,Jason 博士,

    这篇帖子很棒。我有一个问题,如果我的分数如下:训练准确率为 98%,测试准确率为 95%,这意味着我的模型存在过拟合问题吗?或者是否存在一个差异范围,我需要考虑是否存在过拟合?我使用了 K 折交叉验证,并且训练和测试分数存在差异。

    致以最诚挚的问候。

    • Jason Brownlee 2018 年 3 月 28 日上午 6:25 #

      这是一个很好的技能。我会就此打住,开始使用这个模型。

      无需发布 100 次,我已删除重复项。所有评论都经过审核,将在我审核后显示。

      • Nil 2018 年 3 月 30 日上午 1:08 #

        谢谢 Jason 博士,

        我对重复内容表示歉意。我在发送问题后检测到打字错误,这就是我发送重复内容的原因,我试图纠正。下次我会确保文本在发送前书写良好。

        也许我对过拟合有误解,因为我理解训练和测试准确率必须相等,或者测试准确率必须大于训练准确率。因为如果训练准确率大于测试准确率,那么模型就过拟合了训练数据。

        这让我感到困惑,因为有时我训练模型时,训练准确率是 95%,测试准确率是 85%,等等,这取决于洗牌,这些差异让我感到不安,没有信心我的模型学到了足够多的东西。我试图修改我的编程代码,认为我的代码写得不好,我一直这样做直到找到相同的分数。

        只是为了确认,如果我发现训练准确率是 95%,测试准确率是 85%,我也不必担心吗?我也可以使用我的模型吗?我理解了上面的回答,但我需要确认,因为我已经思考了两个星期,认为我的模型过拟合了,并试图修改我的代码。并且试图找出准确率之间是否存在可接受的差异范围来决定模型是否过拟合。

        致以最诚挚的问候。

        • Jason Brownlee 2018 年 3 月 30 日上午 6:40 #

          训练和测试上的技能永远不会完全相同,这是一个理想状态。

          学习曲线的分析可以帮助理解可能发生的情况。有时什么也没有发生——您的模型已经拟合并且很好。

          • Nil 2018 年 3 月 30 日晚上 11:29 #

            明白了,

            谢谢你。

            此致

  21. Michael 2018 年 4 月 7 日晚上 7:34 #

    你好,

    感谢这篇精彩的帖子。我只是想知道你是否有关于

    “过拟合更可能发生在非参数模型上……”的学术来源?我正在写论文,所以需要引用一些已发表的文献。

    你是否也同意参数模型欠拟合数据的可能性更高,因为它们对目标函数施加了约束?

    谢谢,

    Michael

    • Jason Brownlee 2018 年 4 月 8 日上午 6:20 #

      我手头没有,也许可以尝试在谷歌学术和谷歌图书上搜索一下。

      任何好的机器学习入门教材都会有类似的说法。

  22. Farman 2018 年 5 月 5 日上午 1:56 #

    我的项目中有两个数据集,即 S1 和 S2。当我在 S1 上使用 10 折交叉验证时,我得到了 92.34% 的准确率,但我也需要展示 S2 作为测试(独立)数据集的结果。当我在 S1 上训练我的模型并在 S2 上测试时,我得到了 74% 的结果,而现有方法的准确率在 10 折交叉验证上是 86.43%,在独立测试上是 80.65%。我该如何解决我的问题?

  23. Nil 2018 年 5 月 9 日下午 6:08 #

    嗨,Jason 博士,

    训练准确率低于测试准确率有什么值得担心的地方吗?
    我正在从头开始研究朴素贝叶斯,我在训练集上获得了 91.7% 的准确率,在测试集上获得了 98.5% 的准确率,我的疑问是这些结果是否可接受,因为我看到分数差异非常大。

    致以最诚挚的问候。

    • Jason Brownlee 2018 年 5 月 10 日上午 6:26 #

      也许测试集太小或者不能代表数据集?

      • Nil 2018 年 5 月 11 日晚上 10:54 #

        也许是这样,但我在训练集中有 70 个观测值,在测试集中有 394 个观测值。在数据准备阶段,我使用阈值将数据二值化为 0 和 1。我不是将朴素贝叶斯用于高斯分布数据,而是将其用于分类数据。

  24. Karim Elghazawy 2018 年 7 月 4 日晚上 11:02 #

    如果验证数据集上的性能优于训练数据集怎么办?
    这好吗?如果好,是否有好的限制?

  25. Rihana 2018 年 8 月 6 日上午 9:58 #

    嗨,Jason,

    我的 LSTM seq-2-seq 模型面临一个非常典型的问题,那就是过拟合。
    我的目标序列极度不平衡,只有一个类别,由于问题是将序列中的标记分类为不同的类别 (NER),我无法重采样序列(这会导致相同的问题)。
    你有什么办法可以克服这个问题吗?

    谢谢!

    • Jason Brownlee 2018 年 8 月 6 日下午 2:54 #

      好问题。

      也许您可以探索数据增强来生成新样本,作为过采样的一种替代方法?
      也许可以尝试替代或修改损失函数来拟合模型?
      也许可以尝试惩罚?
      也许可以尝试更小的模型或更少的训练?
      也许可以查阅文献,看看针对类似问题尝试了哪些方法?

      • Rihana 2018 年 8 月 9 日上午 4:50 #

        非常感谢 Jason 的出色建议。我将尝试一下,如果取得任何结果会通知你。

        一些问题,我想从数据增强、改变损失函数和惩罚开始。(先单独进行,然后可能结合)

        你能给我一些关于这三者的链接吗,如果你已经有相关的帖子,或者如果你知道任何其他有用的帖子?

        我已经搜索了很多关于改变损失函数中权重的信息,但没有找到任何好的来源。

        • Jason Brownlee 2018 年 8 月 9 日上午 7:44 #

          抱歉,我没有太多关于数据增强的资料。

    • Afandi 2022 年 1 月 6 日晚上 8:01 #

      你好,我有一个模型,在训练时验证损失小于训练损失,这个模型好吗?我使用 10 折分层 K 折交叉验证。

  26. Younas Khan 2018 年 9 月 11 日上午 12:38 #

    您好,先生。

    我想问一下泛化是否有缺点?我们什么时候才进行泛化?它取决于数据集的大小吗?

    • Jason Brownlee 2018 年 9 月 11 日上午 6:31 #

      是的,它不够具体。它解决了平均情况,但牺牲了具体情况。

  27. Tobias 2018 年 11 月 3 日上午 4:53 #

    嗨,Jason!

    您的所有文章都对我帮助很大,我想表达我的感谢。

    然而,我仍然无法完全掌握的一个问题是,哪种方法可能适合估计算证您在这里提到的拟合优度,用于神经网络产生的非线性预测,以比较不同的预测。

    R² 仅对线性模型有用,我不太确定 Chi²(例如,如何选择自由度,p 值的 alpha,以及如何确定临界值——以及这对于比较不同的非线性模型是否有意义)以及 AIC/BIC 需要使用的参数数量——这是您可以从 Keras 生成的模型中获取的,但例如不能从 SKlearn 的 MLPRegressor 中获取。而且,模型实际使用了哪种参数和权重,根据神经网络的性质是完全不透明的,所以我怀疑 AIC/BIC 并没有多大价值。

    您对拟合优度有什么经验?

    祝好,提前致以万分感谢,
    Tobias

    • Jason Brownlee 2018 年 11 月 3 日上午 7:11 #

      抱歉,这确实取决于数据的分布和项目目标。

      不过,这是一个很棒的问题。嗯,它可能会成为一篇不错的博客文章。

      • Tobias 2018 年 11 月 5 日上午 1:29 #

        在这种情况下,时间序列数据有一个主体,但也有很多异常值。模型应该通过在测试数据上进行回归并检测关键转折点来反映分布。如果过拟合,模型最终会变得相当粗糙,但会覆盖大量数据点,从而产生更高的 R²——所以在我的案例中,R² 更多的是过拟合神经网络的指标。

  28. Aditya Varadaraj 2018 年 12 月 14 日晚上 9:18 #

    我面临一个问题,如果我第一次、第二次和第三次运行我的程序,该程序有一个训练测试分割,并且 MLP 有 64 个神经元/隐藏层,其中有 2 个这样的层,输出层中有 2 个类别,并且在第一个隐藏层之后有 dropout (0.5),我得到了不错的结果。

    当我第四次运行它时,我得到了一个欠拟合模型(可能是由于 dropout)(验证准确率和训练准确率之间的差异为 10-15%)

    当我第五次运行它时,我得到了过拟合模型(验证准确率和训练准确率之间的差异为 5-10%)

    是我的数据集有问题还是我的模型参数没有正确调整?

    我该如何纠正这个问题?

  29. Aditya Varadaraj 2018 年 12 月 14 日晚上 9:20 #

    我把测试集大小也设为0.3

  30. Tehreem Qasim 2019 年 2 月 7 日晚上 9:15 #

    你是最棒的!!!

  31. suraj 2019 年 4 月 13 日下午 4:44 #

    嗨,Jason,你能解释一下,如何决定哪种监督式机器学习算法适用于哪种类型的数据,比如多类分类、二元分类和回归等。以及如何将原始数据处理成最佳质量的数据,以便我们能够获得非常好的准确性。请记住,我刚接触机器学习。

  32. Karthik 2019 年 5 月 10 日上午 7:19 #

    嗨,Jason Browniee,

    首先,感谢您抽出时间回答几乎所有提问者的所有问题。我非常感谢您的耐心。

    我很难选择一个好的非参数学习算法。我有一个训练集和一个测试集。测试集暂时搁置。然后我训练模型并使用 GridSearchCV,它在交叉验证后选择最佳超参数。现在,我总是发现(在我拥有的数据上),与交叉验证的平均 MSE 相比,过拟合模型(在训练测试上 MSE 非常低的模型)在测试集上的表现非常好。这让我倾向于选择过拟合模型。我将我的训练集洗牌了 5 次,并训练了过拟合和欠拟合模型,但我仍然发现过拟合模型是赢家。请建议我如何改进我的选择过程。

  33. Karthik 2019 年 5 月 15 日上午 7:15 #

    嗨 Jason,

    谢谢您之前的回复。

    我正在比较两个模型,一个 XGBoostRegressor 和一个 ANN(一些文献中报道过)。两者都在相同的数据集上进行训练和测试。

    XGB 参数是根据 5 折交叉验证选择的——仅供参考

    训练集上的 RMSE,XGB 为 0.021 < 训练集上的 RMSE,ANN 为 0.0348
    测试集上的 RMSE,XGB 为 0.0331 < ANN 为 0.0337

    学习曲线看起来不错(我找不到发送给你的方法),验证曲线很好地逐渐变细
    并以 0.04 RMSE 结束,训练曲线缓慢上升并稳定在 0.02 RMSE。这两者之间存在差距,但并不宽。

    问题一
    我可以直接说 XGB 模型优于 ANN 吗?还是需要考虑其他因素?

    问题二
    测试集上的性能不足以证明我的 XGB 模型泛化良好吗?还是需要提取其他统计数据?

    • Jason Brownlee 2019 年 5 月 15 日上午 8:21 #

      做得好,问题也很棒!

      您可以评论您收集到的证据,但在实证研究(或广义科学)中,没有任何结论是最终的。

      • Karthik 2019 年 5 月 15 日上午 8:46 #

        同意!但我能说我的模型比 ANN 更好吗?ANN 的结果发表在研究论文中,是迄今为止与许多经验证的回归方程相比最好的。那么,鉴于我的 XGB 模型略有优势,我能声称取得了渐进式胜利吗?这是一个工程问题,而不是任何形式的 kagel 竞赛。提前致谢!

        • Jason Brownlee 2019 年 5 月 15 日下午 2:42 #

          如果模型在相同条件下进行评估,您可以提出这一主张。

          这通常很难做到,因为出版物很少提供足够的细节来重现结果或进行充分比较。

          • Karthik 2019 年 5 月 16 日上午 12:05 #

            好的!谢谢您。

  34. Pavan 2019 年 8 月 6 日晚上 10:46 #

    如果我的模型多次看到测试集,那么我的模型有没有可能对测试集过拟合?

    • Jason Brownlee 2019 年 8 月 7 日上午 7:57 #

      是的,是你自己在进行过拟合,试图优化模型配置以适应测试集。

  35. Andrea Berdondini 2019 年 8 月 8 日晚上 11:43 #

    我认为这是过拟合的最佳定义
    过拟合仅仅是考虑统计参数,因此将获得的结果视为有用信息,而没有检查它们是否不是随机获得的直接结果。因此,为了估计过拟合的存在,我们必须在一个等同于真实数据库但具有随机生成值的数据库上使用算法,重复此操作多次,我们可以估计以随机方式获得相同或更好结果的概率。如果这个概率很高,我们很可能处于过拟合情况。例如,四次多项式在平面上与 5 个随机点具有 100% 相关性的概率是 100%,因此这种相关性是无用的,我们处于过拟合情况。

  36. Andrea Berdondini 2019 年 8 月 9 日下午 6:50 #

    谢谢你,Jason。
    如果你对这个话题感兴趣,我写了一个悖论。
    这个悖论基于这样的考虑:统计数据的值并不代表有用的信息,只有当能够证明它不是随机获得时,它才成为有用的信息。

    这是 SSRN 上的链接
    https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3416559

  37. Aditya Nikhil 2020 年 3 月 15 日上午 1:00 #

    嗨,Jason,
    我有一个小疑问。我用 ResNet50 在一个只有 1500 张图像的数据集上训练了一个模型,并获得了非常好的准确率,并且它过拟合(>=95%)。我用同一个数据集进行验证。但令我惊讶的是,验证的准确率非常差(<=0.05%)。这是为什么呢?!

  38. Aditya Aggarwal 2020 年 3 月 26 日晚上 8:05 #

    嘿,Jason
    我正在比较决策树、随机森林、旋转森林在 Iris 数据集上的性能。
    我得到训练集的分数为 100,测试集的分数为 92-94。这可以称为过拟合吗?如果是,我们如何避免这种情况?

  39. OVR oscar vicente remon 2020 年 4 月 19 日下午 5:02 #

    Jason,非常有用。
    感谢如此清晰的解释

  40. Adil 2020 年 5 月 3 日晚上 11:24 #

    我正在通过 GAN 生成医学图像补丁,并使用 Xception 模型作为判别器。判别器的准确率、损失和生成器的损失可以通过链接查看 (https://send.firefox.com/download/af6c5c5f7852f511/#LCdCpRKOuKquO0h0i6lWOw)

    1. 为什么判别器损失和准确率收敛得如此之快,这是好是坏?
    2. 生成器损失波动很大,损失太高,但经过多个 epoch 后有所降低,这意味着什么?
    3. 生成的图像不够准确,但判别器准确率很高,原因可能是什么?

    Jason,您能回答这些问题吗?
    谢谢。

  41. Srini Janarthanam 2020 年 6 月 9 日下午 5:07 #

    嗨,Jason,

    信息量很大的帖子。谢谢。

    我有一个分类模型需要投入生产。我认为需要在一个从过去客户数据中派生出来的验证集上进行测试,模型从未见过这些数据。这将为我们提供在生产中性能的指示性性能指标。

    如果我们将数据(不包括验证数据)进行 k 折交叉验证,那么每个折叠都只会测试一个用 80% 数据训练的模型。每个折叠都会用我们持有的不同 80% 数据来测试不同的模型。这些都不会测试最终投入生产的、用 100% 数据训练的模型。因此我的结论是,留出法验证将为生产中的模型提供更好的估计。

    我的推理正确吗?
    感谢您的回复。

    • Jason Brownlee 2020年6月10日 上午6:09 #

      是的,但当对未用于预测的数据进行预测时,它能对建模流程提供一个合理的估计。通过这个,你可以选择一个模型并描述预期的性能。

  42. James Jordan 2020年8月26日 上午4:12 #

    嗨,Jason,我目前正在为考试复习并练习考试题。但是,我被我下面提出的问题困住了。我想问您认为答案会是什么?

    以下哪些操作可以减少机器学习模型中的过拟合?(选择所有适用项)

    1. 增加模型中的参数数量
    2. 减少模型中的参数数量
    3. 增加学习率
    4. 减少学习率
    5. 增加数据集的大小
    6. 减少数据集的大小

  43. Yan Hairul Firdan 2020年11月16日 上午11:01 #

    你好 Jason,你的解释非常清楚。但我仍然无法想象或理解朴素贝叶斯中过拟合是如何发生的。请问,你能向我解释一下吗?

    谢谢。

  44. sabir 2020年12月30日 下午11:33 #

    比较和对比朴素贝叶斯、逻辑回归和决策树。这些算法中哪个容易出现过拟合和欠拟合?

  45. rupam 2021年9月22日 上午5:07 #

    特征选择对于避免过拟合或欠拟合重要吗?

    • Adrian Tam
      Adrian Tam 2021年9月23日 上午3:05 #

      也许吧。特征选择旨在为模型训练提供更重要的输入。从信息论的角度来看,你试图给模型更多的信号和更少的噪音。如果你做得正确,这肯定会有帮助。

  46. Rachel 2021年12月22日 下午9:38 #

    嗨,Jason,
    感谢您所有富有洞察力的帖子,它们太棒了!
    我反复尝试下载“获取您的免费算法思维导图”,但邮件中(包括垃圾邮件)都没有找到。这有什么办法解决吗?或者我在其他地方能找到那张图吗?它看起来太棒了,不想错过 🙂

    谢谢

  47. Muhammad Asad Arshed 2024年1月16日 下午10:43 #

    你好,James,

    如果训练准确度低于验证或测试准确度怎么办?那是欠拟合,对吗?

发表回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。