如何减少最终机器学习模型的方差

最终的机器学习模型是在所有可用数据上训练的模型,然后用于对新数据进行预测。

大多数最终模型的一个问题是它们的预测存在方差。

这意味着每次拟合模型时,都会得到一组略有不同的参数,而这些参数又会产生略有不同的预测。有时比你预期的更有技能,有时则不然。

这可能会令人沮丧,尤其是当你希望将模型部署到运营环境中时。

在本博文中,您将了解如何思考最终模型的模型方差,以及可以用于降低最终模型预测方差的技术。

阅读本文后,你将了解:

  • 最终模型预测方差的问题。
  • 如何衡量模型方差以及在估计参数时通常如何处理方差。
  • 您可以用来降低最终模型预测方差的技术。

启动您的项目,阅读我的新书 《Python集合学习算法》,其中包含分步教程和所有示例的Python源代码文件。

让我们开始吧。

How to Reduce Variance in a Final Machine Learning Model

如何减少最终机器学习模型的方差
照片由 Kirt Edblom 拍摄,保留部分权利。

最终模型

一旦您发现了哪种模型和模型超参数能在您的数据集上产生最佳技能,您就可以准备最终模型了。

最终模型是在所有可用数据上训练的,例如训练集和测试集。

这是您将用于对您不知道结果的新数据进行预测的模型。

最终模型是您应用的机器学习项目的成果。

要了解有关准备最终模型的更多信息,请参阅博文

偏差与方差

偏差-方差权衡是在应用机器学习中帮助理解模型误差来源的概念。

  • 偏差是指学习算法中的假设,它缩小了可以学习的范围。这很有用,因为它能加速学习并带来稳定的结果,但代价是假设与现实不同。
  • 方差是指学习算法对训练数据的特定性的敏感性,例如噪声和特定观测值。这很好,因为模型将专门针对数据进行优化,但代价是学习随机噪声,并且每次在不同数据上训练时都会有所不同。

偏差-方差权衡是一个概念工具,用于思考这些误差来源以及它们如何始终保持平衡。

算法的偏差越大,方差就越小,反之亦然。

您可以在这篇博文中了解有关偏差-方差权衡的更多信息

您可以控制这种平衡。

许多机器学习算法都有超参数,可以让你直接或间接地控制偏差-方差权衡。

例如,k-近邻中的*k*就是一个例子。小的*k*会导致预测方差大且偏差小。大的*k*会导致预测方差小且偏差大。

想开始学习集成学习吗?

立即参加我为期7天的免费电子邮件速成课程(附示例代码)。

点击注册,同时获得该课程的免费PDF电子书版本。

最终模型的方差问题

大多数最终模型都存在一个问题:它们的方差很大。

每次用高方差的算法训练模型时,您都会得到略有不同的结果。

这个略有不同的模型又会做出略有不同的预测,无论好坏。

这是训练最终模型的一个问题,因为我们需要使用该模型对我们不知道答案的真实数据进行预测,并且我们希望这些预测尽可能好。

我们想要获得我们能获得的尽可能好的模型版本。

我们希望方差能朝着对我们有利的方向发展。

如果我们无法实现这一点,至少我们希望方差在进行预测时不会对我们不利。

衡量最终模型的方差

最终模型有两种常见的方差来源

  • 训练数据的噪声。
  • 机器学习算法中使用随机性。

第一种类型我们在上面已经介绍过了。

第二种类型影响那些在学习过程中利用随机性的算法。

三个常见示例包括

  • 随机森林中随机分割点的选择。
  • 神经网络中随机权重初始化。
  • 随机梯度下降中训练数据的洗牌。

您可以使用训练数据来衡量您特定模型中这两种类型的方差。

  • 衡量算法方差:可以通过在同一训练数据集上重复评估算法并计算模型技能的方差或标准差来衡量算法的随机性质引入的方差。
  • 衡量训练数据方差:可以通过在不同的训练数据样本上重复评估算法,但保持伪随机数生成器的种子固定,然后计算模型技能的方差或标准差来衡量训练数据引入的方差。

通常,通过在训练数据集上运行重复的k折交叉验证,然后计算模型技能的方差或标准差来估计总方差。

减少估计的方差

如果我们想减少预测中的方差量,我们必须增加偏差。

考虑一个简单统计量来估计总体参数的情况,例如从少量随机数据样本中估计均值。

均值的单个估计值将具有高方差和低偏差。

这是直观的,因为如果我们重复这个过程30次并计算估计均值的大规模分布,我们就会看到较大的散布。

减少方差的解决方案也很直观。

从该领域中对许多不同的小型数据样本重复进行估计,并计算估计值的平均值,依靠 中心极限定理

估计均值的平均值将具有较低的方差。我们通过假设估计值的平均值比单个估计值更准确来增加了偏差。

另一种方法是大大增加我们估计总体均值的数据样本的大小,依靠 大数定律

减少最终模型的方差

用于减少总体统计量方差的原理也可用于减少最终模型的方差。

我们必须增加偏差。

根据最终模型的具体形式(例如,树、权重等),您可以在此想法上发挥创意。

以下是您可以尝试的三种方法。

如果可能,我建议设计一个测试框架来实验并发现最适合您的特定数据集和机器学习算法的方法。

1. 最终模型的集合预测

您可以拟合多个最终模型,而不是只拟合一个最终模型。

总的来说,最终模型的组可以被用作一个集合。

对于给定的输入,集合中的每个模型都会做出一个预测,而最终的输出预测被认为是模型预测的平均值。

敏感性分析可用于衡量集合大小对预测方差的影响。

2. 最终模型的参数集合

如上所述,可以创建多个最终模型而不是一个最终模型。

而不是计算最终模型的预测平均值,而是可以构建一个单一的最终模型,作为一组最终模型的参数的集合。

这只在每种模型具有相同数量参数的情况下才有意义,例如神经网络权重或回归系数。

例如,考虑一个具有三个系数 [b0, b1, b2] 的线性回归模型。我们可以拟合一组线性回归模型,并将最终的 b0 计算为每个模型中 b0 参数的平均值,并对 b1 和 b2 重复此过程。

同样,敏感性分析可用于衡量集合大小对预测方差的影响。

3. 增加训练数据集大小

依靠大数定律,减少模型方差最简单的方法可能是用更多训练数据来拟合模型。

在无法轻易获得更多数据的情况下,也许可以使用数据增强方法。

建议对训练数据集大小对预测方差进行敏感性分析,以找到收益递减点。

脆弱的思考

有一些准备最终模型的方法旨在让最终模型的方差为您服务,而不是与您对抗。

这些方法共有的特点是它们都在寻找一个最佳的最终模型。

两个例子包括:

  • 为什么不固定随机种子?您可以在拟合最终模型时固定随机种子。这将限制算法的随机性所引入的方差。
  • 为什么不使用早停法?您可以在训练期间将模型的技能与一个独立的集合进行检查,并在模型的技能在独立集合上开始下降时停止训练。

我认为这些方法以及类似的方法是脆弱的。

也许您可以冒险,并希望方差对您有利。这对于机器学习竞赛来说可能是一个好方法,因为输掉赌局没有真正的坏处。

我不会。

我认为更安全的方法是追求最佳平均性能并限制下行风险。

我认为,处理最终模型的偏差-方差权衡的关键在于从样本的角度思考,而不是从单个模型的角度思考。为了优化平均模型性能。

进一步阅读

如果您想深入了解,本节提供了更多关于该主题的资源。

总结

在本博文中,您了解了如何思考最终模型的模型方差,以及可以用于降低最终模型预测方差的技术。

具体来说,你学到了:

  • 最终模型预测方差的问题。
  • 如何衡量模型方差以及在估计参数时通常如何处理方差。
  • 您可以用来降低最终模型预测方差的技术。

你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。

掌握现代集成学习!

Ensemble Learning Algorithms With Python

在几分钟内改进您的预测

...只需几行python代码

在我的新电子书中探索如何实现
使用 Python 实现集成学习算法

它提供**自学教程**,并附有关于以下内容的**完整工作代码**:
堆叠、投票、提升、装袋、混合、超级学习器等等……

将现代集成学习技术带入
您的机器学习项目


查看内容

40 条对《如何降低最终机器学习模型的方差》的回复

  1. Elie Kawerk 2018年8月14日晚上10:25 #

    嗨,Jason,

    在段落中

    为什么不使用早停法?您可以在训练期间将模型的技能与一个独立的集合进行检查,并在模型的技能在独立集合上开始下降时停止训练。

    你的意思是
    “……与验证集进行检查……当模型在验证集上的技能开始下降时”?

    据我所知,留出集应该保持不变,用于最终评估。

    祝好,
    Elie

  2. peter courlis 2018年8月17日凌晨6:00 #

    喜欢这些课程和示例。
    真希望我能在美国找到一门“指导式课程”(?)

  3. vinodm 2018年8月17日凌晨6:31 #

    贝叶斯机器学习模型方差是否更小?

    • Jason Brownlee 2018年8月17日凌晨6:37 #

      和什么比?

      • vinodm 2018年8月17日凌晨7:15 #

        比那些使用参数(权重)的点估计的常规机器学习模型?

  4. Xu Zhang 2018年8月17日晚上11:13 #

    又一篇很棒的文章。非常感谢。

    您能否给出一个简单的例子来明确解释您的全部想法?因为我们需要在训练最终模型和在现实世界中进行预测时做出一些决定。我想了解您在进行实际项目时如何做出决定。

    我非常赞同您关于“最终模型就是从样本的角度思考,而不是从单个模型的角度思考”的观点。对于实际问题来说,一个最佳模型风险太高了。

    • Jason Brownlee 2018年8月17日晚上2:05 #

      这确实取决于具体问题。我试图提供框架来帮助您为您的特定数据集做出这些决定。

  5. Nisar A. Rana 2018年8月17日晚上9:38 #

    这是我第一次阅读您的博客,我想我成了您的粉丝。
    在“最终模型的参数集合”部分,在使用神经网络时,我该如何使用这种方法?我是否需要训练多个具有相同大小的神经网络并平均它们的权重值?
    这将提高泛化性能吗?

    提前感谢。

    • Jason Brownlee 2018年8月18日凌晨5:37 #

      正确。

      这将通过增加偏差来提高预测的稳定性。它可能会也可能不会对泛化产生积极影响——我的感觉是它是正交的。

      • Jasper 2019年4月29日晚上7:17 #

        为了找到一个更好的措辞,我觉得这有点可疑。虽然我当然认为这种平均方法对于直接回归来说是有意义的,但它似乎不适用于神经网络。

        我猜我有点担心,即使是相同的架构,不同训练的模型也可能在“潜在空间”中学习到截然不同的输入数据表示。即使是简单的全连接前馈网络,一个网络中的节点是否可能是一个网络中节点的排列版本?那么平均这些权重值就没有意义了吗?

        我的思考方式似乎是误解了——只是简单地平均权重。您能否详细说明您的意思,或者给我指一个其他资源?

  6. Stephen 2018年8月18日凌晨7:52 #

    “我认为更安全的方法是限制对最佳平均性能的追求并限制下行风险。”

    的意思是

    “我认为更安全的方法是追求最佳平均性能并限制下行风险。”

    ?

  7. Mukul 2018年12月5日凌晨12:12 #

    这里的方差和我们在统计学中学到的方差相似吗?

    • Jason Brownlee 2018年12月5日凌晨6:17 #

      是的,在对相同数据训练的模型所做的预测中存在散布。

  8. Matt 2019年4月13日凌晨1:47 #

    嗨,Jason,

    感谢您提供这些精彩的博文。如果您不介意,能否澄清一下我心中的一个疑问?

    这篇博文中的方差是指在固定数据集(最终数据集)上训练的单个模型。用相同的数据集训练模型有时会产生非确定性的参数(对未知目标函数的不同估计),因此在使用它们进行预测时,来自不同模型(在相同数据集上训练)的预测在数量上是不同的,这是由“模型方差”衡量的。换句话说,这篇博文关注的是最终模型训练的稳定性,这种稳定性不易受到数据/模型架构随机性的影响。

    在您另一篇博文《偏差-方差权衡入门》中,方差描述的是目标函数在不同训练数据下的变化量。不同的学习到的目标函数会产生不同的预测,这由方差来衡量。

    这两种方差在某种程度上都是对预测差异的衡量(由目标函数的不同近似值引起)。但是,在这篇博文中,模型是在相同数据集上训练的,而在偏差-方差权衡博文中描述的是在不同数据集上训练。

    我的问题是,过拟合的概念在这两种方差定义中是如何融入的?它们都适用吗?在训练不同训练数据集导致目标函数产生不同近似值的情况下,我可以将过拟合描述为模型拾取了噪声并“过拟合”了特定的数据点。在本文的情况下,我能这样描述吗?

    再次感谢您!

    • Jason Brownlee 2019年4月13日凌晨6:36 #

      嗯,很好的总结和好的问题。

      我不确定过拟合是否适合讨论,感觉它是一个正交的想法,例如拟合训练数据中的统计噪声——但仍然是目标函数的一个近似——只是一个糟糕的近似。

      我是否遗漏了您能看到的东西?

  9. Michael 2019年4月19日晚上1:04 #

    嗨,Jason,

    “1. 最终模型的集合预测”和

    “对于给定的输入,集合中的每个模型都会做出一个预测,而最终的输出预测被认为是模型预测的平均值。”

    如果我用相同的数据集和相同的参数训练模型 n 次,那么我将得到 n 个训练好的模型版本。

    为什么不选择表现最佳(在测试数据集上误差最低)的训练模型版本作为“最终模型”来执行预测?我认为它应该比使用集合模型预测的平均值提供更好的预测结果。

    提前感谢您!

    • Jason Brownlee 2019年4月19日晚上3:06 #

      因为当每个模型都在所有可用数据上训练时,您将不会知道。

  10. Chen Fan 2019年5月8日早上9:59 #

    嗨,Jason,

    “如果我们想减少预测中的方差量,我们必须增加偏差。”我不明白为什么这个说法是真的。改进模型难道不能同时减少方差和偏差吗?

    谢谢你

    • Jason Brownlee 2019年5月8日晚上2:09 #

      不一定,因为学习算法的随机性可能导致它收敛到许多不同的“解”之一。

      我们必须在选择最终模型时解决偏差/方差权衡问题,如果方差足够大,而对于神经网络来说确实如此。

  11. Jessica 2019年7月24日凌晨4:27 #

    亲爱的 Jason,

    感谢您所有有趣的博文!

    我开始阅读您之前的博文“如何训练最终机器学习模型”,一切都对我非常清楚:您使用例如交叉验证来得出特定类型的模型(例如,线性回归/k-nn 等)、超参数、特征(例如,特定的数据准备或简单地哪些是最佳特征等)来选择能为您带来最低误差/最高准确率的“最终模型”。您还说,我们应该用所有数据集来拟合这个模型,并且不必担心用所有数据训练的模型性能与交叉验证期间的评估有所不同,因为“如果设计得当,您使用训练-测试或k折交叉验证计算的性能指标能够很好地描述在所有可用历史数据上训练的最终模型在一般情况下的性能。”

    在这篇博文中,您在谈论与这样的“最终模型”相关的某个问题,对吗?我不确定,因为据我理解,最终模型是在整个数据集(原始数据集)上训练的,但在这篇博文中您写道:“大多数最终模型的一个问题是它们的预测存在方差。这意味着每次拟合模型时,都会得到一组略有不同的参数,而这些参数又会产生略有不同的预测。”

    1. 起初我以为您只会用整个数据集拟合一次最终模型,但在这里您提到“每次”都意味着您正在拟合它几次,而且如果是的话,是根据什么?总是用整个数据集?还是它的部分?

    2. 上一个答案对于我关于“衡量最终模型的方差”部分的问题也很重要。我同意您关于方差的两个可能来源,但仍然无法理解为什么您要在最终模型中评估它:原则上,您可以在找到最终模型时进行交叉验证,因为在这种情况下,您会将整个数据集分成几折,您可以在其中计算模型技能的方差/标准差。这样,您可能会选择方差/标准差较低的模型。

    3. 最后,在您之前的回答中,您说过拟合的概念与这篇博文没有 proper 的关系,但是当您说最终模型方差的一个来源是训练数据中的噪声时,难道您不是指过拟合的概念,因为模型也拟合了噪声,因此最终输出会有所不同吗?为什么以及如何将过拟合与这一切隔离开来?

    提前感谢您的时间!

    • Jason Brownlee 2019年7月24日早上8:14 #

      正确。

      是的,如果最终模型的性能非常重要,我们也可以选择关注它。这是这篇博文的基础。

      1. 是的,我们可以拟合多个最终模型并将它们的性能平均化以进行预测,以减少预测的方差。例如,我们的最终模型就成为最终模型的集合。

      2. 理想情况下,您应该在“最终”模型之前解决这个问题,例如,您应该在设计过程中已经测量并抵消了模型的方差。但很多人没有——因此有了这篇博文。

      3. 我明白了。这可能很重要,但理想情况下,我们已经超越了“最终模型”阶段,只关注数据中的噪声影响一个不易过拟合的模型。

      希望这能有所帮助。

      我在“更好预测”部分对此进行了更详细的介绍,这里
      https://machinelearning.org.cn/start-here/#better

  12. Michael 2019年8月20日晚上3:51 #

    你好,Jason。

    感谢这篇精彩的文章。
    一个简短的问题(可能与本文主题有些偏离)
    开头您提到最终模型是在整个数据集(例如训练集和验证集)上训练的。
    现在我想知道,在没有验证集的情况下,如何使用 keras 的“ReduceOnPlateau”回调函数来训练最终模型?
    通常我会监控验证损失并在其基础上降低学习率。在最终模型训练期间,我应该监控训练损失吗?

    提前感谢,

    此致,

    Michael

    • Jason Brownlee 2019年8月21日凌晨6:34 #

      您需要使用一个留出的验证集来作为早停法的标准。

  13. Vishal 2020年5月13日凌晨4:53 #

    我不确定我是否同意/理解这个陈述

    “估计均值的平均值将具有较低的方差。我们通过假设估计值的平均值比单个估计值更准确来增加了偏差。”

    从数学上讲(忽略不可约误差)Err(x) = E(x^2) = Var(x) + E[x]^2 | x = y-y(predicted)

    因此,当您增加样本量 n->n+1 时,方差应该会下降,但均方误差值在样本空间中应该会增加。如果估计的平均值更准确,那么这是否意味着估计的平均值与观测值之间的距离减小,从而 L2 范数距离也减小,这意味着偏差减小?

  14. Nicholas 2020年7月22日下午4:44 #

    嗨,Jason,

    只是想知道集成学习算法“bagging”是否

    – 降低了训练数据的方差

    或者

    – 降低了算法的方差

    您能否解释一下原因?

    提前感谢!

    • Jason Brownlee 2020年7月23日上午6:02 #

      通过对许多做出不同预测和错误的不同模型进行平均来降低方差。

      • Nicholas 2020年7月23日上午11:01 #

        嗨,Jason,

        感谢回复。有几个后续问题

        1.

        因此,如果我有以下两个“模型/系统”

        a) 一个基分类器(具有高方差)

        b) 同一个基分类器的装袋集成

        并且我将(a)的随机种子保持不变,并通过(通过在不同的训练数据样本上重复评估算法,但使用固定的种子)来测量(a)由于训练数据噪声引起的方差。

        然后对于(b),我将随机种子保持不变(对于装袋集成内的所有模型),并通过(同样,通过在不同的训练数据样本上重复评估系统,但使用固定的种子)来测量(b)由于训练数据噪声引起的方差

        对于这两种系统(a)和(b),由于训练数据噪声引起的方差是否会完全相同?

        2.

        另外,如何为装袋集成内的所有模型保持随机种子不变(例如,对于您“如何在 Keras 中创建深度学习模型的装袋集成”教程(如下链接)中所示的神经网络装袋集成)?

        https://machinelearning.org.cn/how-to-create-a-random-split-cross-validation-and-bagging-ensemble-for-deep-learning-in-keras/

        提前感谢!

        • Jason Brownlee 2020年7月23日下午2:43 #

          是的,类似。或者更简单地说

          保持学习算法不变,改变数据;或者保持数据不变,改变学习算法。

          装袋允许您指定用于学习过程中随机性的种子。

  15. Hongmin 2020年11月2日下午9:27 #

    嗨,Jason,

    非常感谢您一直以来发布的有用的博客,帮助人们更好地理解机器学习。

    我同意您的观点,在权衡最终模型的偏差-方差时,需要从样本的角度考虑,而不是从单个模型的角度考虑。在您另一篇博文“拥抱机器学习中的随机性”中,您列出了机器学习中的 5 种随机性,其中只有第 3 种是算法中的,其他都来自数据。但我很少看到您举例说明通过重复算法评估或使用不同的随机种子来降低方差。您认为这比其他数据中的随机性更重要吗?

    希望能得到您的回复!

    • Jason Brownlee 2020年11月3日上午6:53 #

      不客气。

      改变训练数据集会产生装袋集成。

      对于最终模型,我们可能会使用装袋,但仍然只有一个数据集,我们可以通过拟合多个最终模型并对它们的预测进行平均来控制学习过程中的随机性。

      我的意思是,在数据有限的情况下,学习的随机性是数据随机性的一个超集。先反驳后者,再反驳前者。

  16. Hongmin 2020年11月3日下午3:09 #

    非常感谢您的回复!

    我想我明白了。

  17. student-t 2021年3月18日上午11:24 #

    关于“2. 最终模型的集成参数”。我不确定线性回归的例子是否适用于此。但也许我的逻辑有误。线性回归模型通常有一个凸(即唯一的)解析解。因此,如果我们对完全相同的数据集估计线性回归 m 次,我们会得到完全相同的回归系数,每一次。也就是说,我们的线性回归模型没有固有的随机性,我们无法通过这种集成来利用。

    如果我们改变训练集中的样本,就可以将集成与线性回归结合使用。这将使我们得到不同的回归权重,可以对其进行平均。

    但是,我认为当前所陈述的方式并不一定正确。也许我的思考方式是错误的。讨论一下会很好。

    除此之外,我非常喜欢这篇文章!我是您所有帖子的忠实粉丝!

    • Jason Brownlee 2021年3月19日上午6:14 #

      是的,集成有很多类型。

      我猜基本假设是,一开始就存在一个方差源,例如随机学习算法。同意,线性回归不存在此问题,并且需要从其他地方(例如训练数据的随机样本)获取方差。

留下回复

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