Bootstrap 方法入门

Bootstrap 方法是一种重采样技术,用于通过对数据集进行有放回抽样来估计总体的统计数据。

它可以用来估计均值或标准差等汇总统计量。在应用机器学习中,它被用来估计机器学习模型在对未包含在训练数据中的数据进行预测时的性能。

在估计机器学习模型性能时,一个理想的特性是,估计出的性能可以附带置信区间,而这是交叉验证等其他方法不容易提供的。

在本教程中,您将了解用于估计机器学习模型在未知数据上性能的 Bootstrap 重采样方法。

完成本教程后,您将了解:

  • Bootstrap 方法涉及对数据集进行有放回的迭代重采样。
  • 使用 Bootstrap 时,您必须选择样本大小和重复次数。
  • scikit-learn 提供了一个函数,可用于对数据集进行重采样以应用 Bootstrap 方法。

通过我的新书《机器学习统计学》来启动您的项目,书中包含所有示例的分步教程Python 源代码文件

让我们开始吧。

A Gentle Introduction to the Bootstrap Method

Bootstrap 方法入门
照片由 john mcsporran 拍摄,保留部分权利。

教程概述

本教程分为4个部分,它们是:

  1. Bootstrap 方法
  2. Bootstrap 的配置
  3. 实例演示
  4. Bootstrap API

需要机器学习统计学方面的帮助吗?

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

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

Bootstrap 方法

Bootstrap 方法是一种统计技术,通过对多个小数据样本的估计值进行平均,来估算总体的数量特征。

重要的是,样本是通过从一个大数据样本中逐个抽取观测值,并在抽取后将其放回数据样本中来构建的。这使得一个给定的观测值可以在一个给定的小样本中被包含多次。这种抽样方法称为有放回抽样。

构建一个样本的过程可总结如下:

  1. 选择样本的大小。
  2. 当样本的大小小于所选大小时:
    1. 从数据集中随机选择一个观测值
    2. 将其添加到样本中

Bootstrap 方法可用于估计总体的某个量。这是通过重复抽取小样本,计算统计量,然后取这些计算出的统计量的平均值来实现的。我们可以将此过程总结如下:

  1. 选择要执行的 Bootstrap 样本数量
  2. 选择一个样本大小
  3. 对于每个 Bootstrap 样本:
    1. 以所选大小进行有放回抽样
    2. 计算样本的统计量
  4. 计算所计算出的样本统计量的均值。

该过程也可用于估计机器学习模型的性能。

Bootstrap 是一种适用范围广且极为强大的统计工具,可用于量化与给定估计器或统计学习方法相关的不确定性。

— 第 187 页, 《统计学习导论》, 2013。

这是通过在样本上训练模型,并在未包含在样本中的那些样本上评估模型性能来完成的。这些未包含在给定样本中的样本被称为袋外(out-of-bag)样本,简称 OOB。

使用 Bootstrap 方法评估模型性能的这个过程可总结如下:

  1. 选择要执行的 Bootstrap 样本数量
  2. 选择一个样本大小
  3. 对于每个 Bootstrap 样本:
    1. 以所选大小进行有放回抽样
    2. 在数据样本上拟合模型
    3. 在袋外样本上评估模型性能。
  4. 计算模型性能估计样本的均值。

未被选中的样本通常被称为“袋外”样本。对于 Bootstrap 重采样的某次迭代,模型在选中的样本上构建,并用于预测袋外样本。

— 第 72 页, 《应用预测建模》, 2013。

重要的是,在拟合模型之前进行的任何数据准备或模型超参数的调整,都必须在数据样本的 for 循环内部进行。这是为了避免数据泄露,即利用测试数据集的知识来改进模型。这反过来可能导致对模型性能的乐观估计。

Bootstrap 方法的一个有用特性是,最终得到的估计样本通常呈高斯分布。除了用中心趋势来总结这个分布外,还可以给出方差的度量,如标准差和标准误差。此外,可以计算置信区间来界定所提出的估计值。这在呈现机器学习模型的估计性能时非常有用。

Bootstrap 的配置

在执行 Bootstrap 时,必须选择两个参数:样本大小和要执行该过程的重复次数。

样本大小

在机器学习中,通常使用与原始数据集大小相同的样本大小。

Bootstrap 样本的大小与原始数据集相同。因此,一些样本会在 Bootstrap 样本中出现多次,而另一些则根本不会被选中。

— 第 72 页, 《应用预测建模》, 2013。

如果数据集非常大且计算效率是一个问题,可以使用较小的样本,例如数据集大小的 50% 或 80%。

重复次数

重复次数必须足够大,以确保可以对样本计算出有意义的统计数据,例如均值、标准差和标准误差。

最小次数可能是 20 或 30 次。使用更小的值会给样本的统计计算带来更大的方差。

理想情况下,在时间资源允许的情况下,估计样本应该尽可能大,重复数百或数千次。

实例演示

我们可以通过一个小例子来具体说明 Bootstrap 过程。我们将逐步完成一次迭代。

假设我们有一个包含 6 个观测值的数据集:

第一步是选择样本的大小。这里,我们将使用 4。

接下来,我们必须从数据集中随机选择第一个观测值。让我们选择 0.2。

这个观测值被放回数据集中,我们再重复此步骤 3 次。

现在我们有了数据样本。这个例子特意展示了同一个值可以在样本中出现零次、一次或多次。这里观测值 0.2 出现了两次。

然后可以在抽取的样本上计算一个估计值。

那些未被选入样本的观测值可以用作袋外观测值。

在评估机器学习模型的情况下,模型在抽取的样本上进行拟合,并在袋外样本上进行评估。

这就完成了一次重复。它可以重复 30 次或更多次,以得出一个计算统计量的样本。

然后可以通过计算均值、标准差或其他汇总值来总结这个统计量样本,从而给出一个最终可用的统计量估计值。

Bootstrap API

我们不必手动实现 Bootstrap 方法。scikit-learn 库提供了一个实现,可以创建数据集的单个 Bootstrap 样本。

可以使用 resample() scikit-learn 函数。它接受数据数组、是否进行有放回抽样、样本大小以及抽样前使用的伪随机数生成器的种子作为参数。

例如,我们可以创建一个 Bootstrap,它会生成一个包含 4 个观测值的有放回样本,并使用伪随机数生成器的值为 1。

不幸的是,这个 API 没有提供任何简便的机制来收集可用作测试集以评估拟合模型的袋外观测值。

至少在单变量的情况下,我们可以使用简单的 Python 列表推导式来收集袋外观测值。

我们可以将所有这些与我们在上一节的实例演示中使用的小数据集结合起来。

运行该示例会打印出 Bootstrap 样本中的观测值以及袋外样本中的观测值。

扩展

本节列出了一些您可能希望探索的扩展本教程的想法。

  • 列出 3 个您可以使用 Bootstrap 方法估计的汇总统计量。
  • 找到 3 篇使用 Bootstrap 方法评估机器学习模型性能的研究论文。
  • 实现您自己的函数,以使用 Bootstrap 方法创建一个样本和一个袋外样本。

如果您探索了这些扩展中的任何一个,我很想知道。

进一步阅读

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

文章

书籍

API

文章

总结

在本教程中,您了解了用于评估机器学习模型在未见数据上性能的 Bootstrap 重采样方法。

具体来说,你学到了:

  • Bootstrap 方法涉及对数据集进行有放回的迭代重采样。
  • 使用 Bootstrap 时,您必须选择样本大小和重复次数。
  • scikit-learn 提供了一个函数,可用于对数据集进行重采样以应用 Bootstrap 方法。

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

掌握机器学习统计学!

Statistical Methods for Machine Learning

培养对统计学的实用理解

...通过在 python 中编写代码

在我的新电子书中探索如何实现
机器学习的统计方法

它提供关于以下主题的自学教程
假设检验、相关性、非参数统计、重采样,以及更多...

探索如何将数据转化为知识

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

查看内容

Bootstrap 方法入门 的 106 条回应

  1. Rafael 2018年5月25日 上午10:34 #

    很棒的文章,Jason!帮了我大忙

    • Jason Brownlee 2018年5月25日 下午2:52 #

      很高兴听到这个消息。

      • ww 2020年12月7日 上午3:13 #

        你忘了补充你在 R 或 R studio 上工作,这让你在了解程序时更容易,但对于外行来说,手动操作是另一回事,程序不会向他们展示。

        • Jason Brownlee 2020年12月7日 上午6:19 #

          我不在 R 或 R studio 工作,也从未工作过。

        • Kenneth 2021年7月22日 上午11:13 #

          描述如何使用 bootstrap 估计均方误差

          • Jason Brownlee 2021年7月23日 上午5:44 #

            抽取样本,评估你的指标,重复,然后对分数求平均。

  2. Vladislav Gladkikh 2018年5月25日 下午2:36 #

    还有一本书

    Michael R. Chernick, Robert A. LaBudde. 《Bootstrap 方法及其在 R 中的应用导论》(2011) https://www.amazon.com/Introduction-Bootstrap-Methods-Applications/dp/0470467045

    论文

    Yoram Reich, S.V.Barai. 评估用于工程问题的机器学习模型 https://www.sciencedirect.com/science/article/pii/S0954181098000211

    Gordon C. S. Smith, Shaun R. Seaman, Angela M. Wood, Patrick Royston, Ian R. White. 修正小数据集中的乐观预测 https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4108045/

  3. Luis Ibarra 2018年5月26日 上午1:34 #

    感谢这篇文章,我终于能理解 K 折交叉验证和 Bootstrap 之间的区别了,谢谢清晰的解释。

  4. Michał 2018年7月7日 下午3:59 #

    嗨,Jason,

    一篇非常好的文章。您能否扩展一下,用一些解释/例子说明如何在最后计算置信区间,例如,对于通过 bootstrap 计算出的均值?

  5. Mahmood 2018年7月11日 下午5:33 #

    非常感谢 Jason,这是一个很棒的主题,它帮我很好地理解了这个概念。

  6. jerry 2018年7月27日 晚上11:15 #

    感谢这篇文章,我(在学习 ISLR 的 bootstrap 实验时)一直期待在 sklearn(或 numpy, pandas)中找到一个 bootstrap 方法。谢谢你的解释。你可能还想提一下 Panda 的 resample 方法,它对于将月度观测数据转换为季度数据很有用。

    不确定 sklearn.cross-validation.bootstrap 是做什么的。

  7. gaurav srivastava 2018年8月7日 上午8:24 #

    嗨,Jason,

    感谢这篇文章。我理解了什么是机器学习中的 Bootstrap。我对于 Bootstrap 和重复随机子抽样交叉验证(https://en.wikipedia.org/wiki/Cross-validation_(statistics)#Repeated_random_sub-sampling_validation)之间的区别感到困惑。对我来说,两者似乎是一样的。首先从给定数据中随机创建一个子样本,并在此基础上训练模型。接下来,在剩余的样本上验证模型。重复这个过程若干次。最终的验证误差将是每次迭代的估计值。请告诉我有什么区别吗?

    我能想到的一个区别是,Bootstrap 是有放回抽样,而重复随机子抽样方法不重复样本。这是唯一的区别吗?

    谢谢,
    Gaurav

    • Jason Brownlee 2018年8月7日 下午2:30 #

      有放回抽样可能是主要区别。

      • Ernst Kloppenburg 2020年10月14日 凌晨12:00 #

        Jason,我觉得在你文章中展示的方法里,Bootstrap 和重复随机子抽样交叉验证的概念有些混淆了。

        我认为至少在入门介绍时,应该遵循以下方法:
        – 首先将数据划分为训练集和测试集,然后训练模型(一个模型,不是多个)
        – 然后使用 bootstrap 进行模型性能评估。这里只使用包含 n 个点的测试数据 x。我们将从 x 中有放回地抽取 n 个点来创建 bootstrap 复制样本 x*,并在 x* 上评估模型性能。我们重复这个过程 B 次。这种变异将告诉我们,在给定测试数据的情况下,我们对模型性能的测量有多好。

        或许也可以反过来做,即在训练数据的 bootstrap 复制样本上训练多个模型,每个模型都用相同的测试数据进行测试。这次的变异将显示模型性能对训练数据的依赖程度有多强(类似于我们通过交叉验证达到的效果)。

  8. Alireza Hajian 2018年11月19日 上午8:45 #

    非常有用的文章,Jason..概念很容易理解..非常感谢

  9. Kingsley Udeh 2018年12月10日 晚上11:27 #

    嗨,Jason,

    如何将 bootstrap 方法应用于时间序列数据?

    谢谢

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

      嗯……或许可以对同一个模型使用不同长度的历史数据,或者使用不同配置的模型?

  10. Kingsley Udeh 2018年12月11日 下午4:51 #

    谢谢回复。我考虑使用 bootstrap 策略的原因很简单,因为我没有足够的数据(时间序列)来拟合和验证我的模型。因此,我需要找到一种方法来扩展或增强我当前的数据。

    我了解到一种移动块 bootstrap 方法,它简单地将原始数据分段成块,然后对这些块进行有放回的独立重采样,同时保持观测值序列中的顺序。我能够以一定的置信区间增加我的数据,但在 bootstrap 后的数据中缺少了日期索引,只留下一个难以处理的索引。

    我希望您能给我一个关于时间序列 bootstrap 更简洁概念的链接,因为我查阅的文章假设读者具备一定的统计学知识。

    • Jason Brownlee 2018年12月12日 上午5:49 #

      很有趣。我不太熟悉这种方法。请告诉我你的进展。

      • Ernst Kloppenburg 2020年10月13日 晚上11:32 #

        Efron 和 Tibshirani 的书《An Introduction to the Bootstrap》确实涵盖了重采样时间序列的例子。基本上,他们使用某种模型,然后对模型误差进行重采样以创建新的时间序列。可以看看这本书——这本书值得一读。

  11. Kingsley Udeh 2018年12月12日 上午6:47 #

    当然!

  12. Connie L. Ekkens 2018年12月13日 下午2:09 #

    是否可以将自助法与目的性抽样结合使用?
    康妮

    • Jason Brownlee 2018年12月14日 上午5:29 #

      我们的想法是使用有放回的随机抽样。如果你使用非随机抽样,你会引入偏差。

      或许可以试试并比较结果。

  13. lila 2019年1月14日 上午7:46 #

    我想对我的观测数据进行 bootstrap 以估计 NARDL 模型,您能帮我创建一个程序或者简单地指导我一下吗???

    • Jason Brownlee 2019年1月14日 上午11:15 #

      NARDL 模型是什么?

      • lila 2019年1月17日 上午10:11 #

        ARDL 是一种计量经济学模型,有两种类型:线性的(ARDL)和非线性的(NARDL)。
        自回归分布滞后模型(ARDL)在需要分析经济情景时扮演着至关重要的角色。在经济体中,任何经济变量的变化都可能在未来一段时间内引起其他经济变量的变化。这种变量的变化不是立即反映出来的,而是分布在未来的时期。不仅是宏观经济变量,其他变量如公司一年的亏损或盈利也会在一段时间内影响组织的品牌形象。

        • Jason Brownlee 2019年1月17日 下午1:45 #

          感谢分享,我没有经济模型/方法的经验。

          • lila 2019年1月22日 晚上11:46 #

            好的,谢谢你

  14. hayleedee 2019年2月28日 晚上10:52 #

    嗨,Jason,
    您提到了机器学习模型的“skill”(技能)。我以前没听说过这个术语——它和准确率(accuracy)是一样的吗?一如既往,感谢这篇精彩的文章。

    • Jason Brownlee 2019年3月1日 上午6:20 #

      技能是我们/利益相关者关心的模型性能方面。它可能是准确率或误差。

  15. Jack 2019年3月16日 上午2:40 #

    总体思路很容易理解,但我不太明白“通常使用与原始数据集大小相同的样本大小”这句话。这是怎么操作的?如果样本大小和原始数据集一样大,那就没有抽样了啊。除非“原始数据集”在这里有别的意思。听起来好像是说,如果你的训练集里有20个例子,你的样本大小也应该是20。

    • Jack 2019年3月16日 上午2:43 #

      哦对了,是因为有放回抽样。不过,直觉上使用一个更小的子集似乎更有用。

      • Jason Brownlee 2019年3月16日 上午7:58 #

        没错!

        为什么较小的数据集更符合直觉?

    • Jason Brownlee 2019年3月16日 上午7:58 #

      我们从原始样本中创建与原始样本大小相同的样本,但可能会重复一些示例(例如,有放回抽样)。

      这有帮助吗?

  16. KK 2019年3月22日 上午5:30 #

    感谢这篇文章,它在理解 bootstrap 方法方面给了我很大帮助。
    我遇到了一个问题,本以为可以用 bootstrap 解决,但在理解了这个方法后,觉得似乎不太合理。您能帮我一下吗?
    我正在做一个多类别图像分类算法,数据集完全不平衡。例如:A 类有 2000 张图片,而 B 类只有 100 张图片。您能指导我如何处理这个问题,并建立一个好的 CNN 模型吗?

  17. KK 2019年3月22日 下午2:29 #

    非常感谢您的建议。我会仔细研究您提到的方法。
    补充评论
    所以 bootstrap 方法不能用来平衡数据集,对吗?
    我目前正在使用迁移学习(vgg16, resnet50)来分类我的图像。然而,由于数据严重不平衡,我无法获得预期的结果。

    谢谢你,
    KK

    • Jason Brownlee 2019年3月22日 下午2:39 #

      Bootstrap 并非旨在平衡数据集。也许它可以用于此目的,但我没有见过这种用法。

      • KK 2019年3月22日 下午2:48 #

        感谢您的澄清。现在我对这些方法有了更好的理解。我将对少数类数据集进行过采样(翻转、添加一些噪声等),然后重新训练我的迁移学习模型。如果得到有趣的结果,我会在这里更新。
        再次感谢您的博客,它帮助我理解了很多主题。

  18. Freddie 2019年4月4日 上午2:40 #

    嗨,Jason,
    非常感谢这篇文章,非常有帮助!
    我有一个关于 bootstrap 样本大小的问题。其他在线资源建议,对于统计推断,bootstrap 样本大小应等于原始样本大小:“统计估计的准确性取决于样本大小”。
    您认为只取一个作为 bootstrap 样本大小有什么风险吗?

    • Jason Brownlee 2019年4月4日 上午7:58 #

      样本量为 1 太小了,我预计至少需要 30 个。

  19. Koffi Mawuna Koudjonou 2019年5月24日 下午5:47 #

    感谢您的文章!

    我的问题是,如果像那样使用 bootstrap 抽样,我猜我们会失去数据集的时间依赖性。这对机器学习时间序列预测有什么用呢?

    谢谢。

    • Jason Brownlee 2019年5月25日 上午7:44 #

      你可以用不同的历史子集来拟合模型。

  20. mwh 2019年7月26日 上午6:54 #

    谢谢 Jason,我有两个问题,请问:1- 如果我的数据集是 4D 的,每个数据点(行)包含四个属性,我是应该对整个数据点进行 bootstrap,还是可以在属性之间混合?2- 如果我的数据集很大,比如 30 万,我每次可以重采样一个子集,比如 5000 个吗?我的情况是需要进行 1000 次采样,每次只需要 5000 个... 尝试重采样 30 万时遇到了内存错误。谢谢

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

      你应该在行(样本)之间进行选择,而不是在列(特征)之间。

  21. Cicely 2019年8月14日 晚上7:41 #

    嗨,Jason,

    新手问题,恐怕是。如果我从一个正态分布 Normal(mu_0, sigma_0) 中抽取 10,000 个随机样本,然后计算这 10k 样本的均值和标准差,我得到 mu_1 和 sigma_1,它们与 mu_0 和 sigma_0 略有不同,这是预料之中的。(请原谅我的符号表示)

    使用 bootstrap,我期望返回的估计值会接近 mu_0 和 sigma_0,即总体的参数。但它们没有:它们接近 mu_1 和 sigma_1,即那 10k 样本的参数。

    我是否误解了 bootstrap 方法的应用?

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

      我们没有新的样本,所以我们不是在运用大数定律来更好地逼近总体参数。

      不确定你的测试/比较是否合理。或许选择一个分布参数对于演示来说是不合适的,因为它会引起混淆,也许一个样本的非线性函数能让例子更清晰?

      • Cicely 2019年8月15日 上午8:12 #

        啊,我想我明白了。非常感谢您这么快回复,我非常感激。

  22. Ali 2019年10月9日 上午6:42 #

    嗨,Jason,

    抱歉这很长,但我真的很希望能得到帮助!
    这篇文章很有帮助,因为我正试图“增加”我的样本量,以便改进我的模型估计。我正在用 R 做这个项目,但我也熟悉 Python。我想之前的评论试图解决这个问题,但没有说清楚。

    我有野生动物探测数据以及探测发生的调查地点的环境特征数据。我希望有更多调查地点的野生动物探测数据,这样我使用的占用模型可以提供更准确的物种丰富度估计。我只有 40 个有野生动物探测的调查地点,我希望有 80 个。我希望确保在进行 bootstrap 时,我的探测数据是在考虑其他因变量的情况下进行重采样的,以便探测结果与环境特征相对一致。

    有没有办法确保我想从数据集中重采样的特征是在考虑其他因变量的情况下进行重采样的?或者,有没有办法根据我已经拥有的 40 个调查地点的数据来创建“新的调查”地点和新的探测数据(一次性对多个特征进行 bootstrap)?

    感谢任何帮助或参考资料!

    • Jason Brownlee 2019年10月9日 上午8:19 #

      是的,你可以将所有变量捆绑到一个内存中的数据结构里,然后对这些聚合的“记录”集合进行重采样。

      • Ali 2019年10月10日 上午6:39 #

        谢谢回复!
        您具体是什么意思?您的意思是我应该将变量保存在一个数据框中,然后从数据框中重采样行吗?

        谢谢!
        阿里

  23. iram shahzadi 2019年10月20日 晚上11:15 #

    它真的帮了我大忙。谢谢 ????

  24. Penryr 2019年10月21日 下午5:45 #

    你应该解释为什么“有放回”很重要,以及它实现了什么目的。

  25. Chris 2019年12月4日 上午7:24 #

    在一个包含 400 个样本的数据集中,我有一些子样本被分成了两个分类变量,比如说 A 和 B。A 有 106 个样本,B 有 294 个。由于两个样本数量之间存在很大的不平衡,bootstrap 能否帮助对分类变量 A 进行相关性分析?我只对分类变量 A 进行相关性检验感兴趣。

    • Jason Brownlee 2019年12月4日 下午1:54 #

      嗯,样本量很小。

      使用数千次重复可能会帮助你估计所需的量。不过我感觉有点不放心。

      使用分层重采样程序可能会有帮助。

  26. Lydia 2019年12月5日 晚上11:10 #

    感谢您的文章。对于通过将 t 值乘以均值的标准误差计算出的置信区间,样本量和置信区间宽度之间存在明确的关系(样本量增加四倍,宽度减半)。我想知道,样本量与通过 bootstrap 计算出的置信区间宽度之间有什么联系?

  27. Junaidda 2019年12月12日 下午6:52 #

    我的理解是否正确,即只有当研究样本较小时才需要 bootstrap?然后通过 bootstrap 进行重复以增加样本量。

    • Jason Brownlee 2019年12月13日 上午5:57 #

      不仅如此,你通常也可以使用该方法来估计一个量,比如在展示最终模型时估计模型准确率。

  28. ömer emhan 2020年1月4日 上午8:11 #

    你好,Brownlee 先生;
    在本教程中,resample 函数在所有试验中为 boot 和 oob 样本选择了相同的值。
    我的意思是,在每个循环中
    Bootstrap 样本: [0.6, 0.4, 0.5, 0.1]
    OOB 样本: [0.2, 0.3]
    我需要用 resample 函数将数据集分成 10 份,并希望为训练集和测试集得到不同的集合。然后每个训练集和测试集都将用于机器学习算法,即我需要一个 bootstrap 聚合。但是 resample 函数在每次循环中的输出都是相同的。

  29. Sikder Tahsin Al-Amin 2020年2月11日 上午8:16 #

    这个例子真的很有帮助。我之前看了好几个链接,一直很难理解这个概念。然后这个链接里的例子澄清了我的想法。谢谢你。

  30. Mounir 2020年2月25日 上午2:05 #

    解释得非常完美!非常感谢!

  31. Gaby 2020年8月6日 上午6:40 #

    你好!!!
    在有 50 万个样本且它们不在 95% 置信区间内之后,这意味着什么?我应该分析更多的 k(比如 1000 个)吗?还是说所提出的模型不起作用?

    谢谢!

  32. Annalysa K Lovos 2020年10月9日 下午2:51 #

    你好,
    我想知道您是否能指出一些关于如何撰写自助法统计数据的例子——在我的案例中是报告一个小型试点研究。

    谢谢!

  33. Dr. Sane 2020年10月29日 上午2:28 #

    非常感谢这个精彩的解释。

    我想重复 bootstrap X 次,如何在您的代码中实现?

    此致

  34. Mico Reinier 2020年10月29日 上午2:58 #

    你好,

    如何设置特定的重复次数?在您的页面上找不到。此致,Mico

  35. Rudi Greg 2020年10月29日 上午3:20 #

    解释得很好!

  36. Syed Khurram Mahmud 2020年12月29日 上午10:09 #

    你好!非常感谢您的文章和出色的工作。我是一个忠实的追随者。如果这个问题上面已经回答过,或者我漏掉了一些非常基础的东西,我很抱歉。我们能用 Bootstrap 方法估计方差吗?
    我有一个均值为 0.08,方差为 0.0001 的分布。
    均值估计正确,但我也想估计方差。

    非常感谢。

    • Jason Brownlee 2020年12月29日 下午1:31 #

      不客气。

      好问题,我猜想是可以的,但我建议你查阅文献以确认。

  37. Syed Khurram Mahmud 2020年12月29日 下午6:48 #

    感谢您的回复,您的回复鼓励我深入挖掘,我发现了我犯的错误。我使用了 np.var(boot) 函数,在 900 个样本后它正确地给出了方差。我上面提到的 0.0001 是标准差,所以我得到的一直是方差。所以是的,我们可以得到一个分布的方差,但是样本数量必须非常非常多。

    mu_1, sigma_1 = 0.08, 0.0001 //待预测的分布

    for i in range(900)

    INT_A = np.random.normal(mu_1,sigma_1,1)
    INT.append(INT_A)

    # 准备 bootstrap 样本
    boot = resample(INT, replace=True, n_samples=len(INT), random_state=1)
    print('Bootstrap 样本: %s' % boot)
    # 袋外观测值
    oob = [x for x in INT if x not in boot]
    print('OOB 样本: %s' % oob)

    print('均值:')
    print(np.mean(boot))
    print('方差')
    print(np.var(boot))

    如果我错了,或者我抽取的样本比需要的多太多,请纠正我。

    提前感谢。

    • Jason Brownlee 2020年12月30日 上午6:35 #

      不客气。

      感谢分享。抱歉,我没有能力审查代码。

  38. Nours 2020年12月31日 下午4:51 #

    我想知道 resample 函数是否执行了 bootstrap 的第一步?

    • Jason Brownlee 2021年1月1日 上午5:23 #

      抱歉,我不太明白您的问题。您能详细说明一下吗?

  39. Nitin Pasumarthy 2021年1月6日 下午5:09 #

    再次感谢 Jason 如此简洁易懂的文章。有几个问题,

    1. 如果所选统计量不服从高斯分布,如何计算 CI?
    2. 关于“不幸的是,resample() API 没有提供任何简便的机制来收集可用作测试集以评估拟合模型的袋外观测值”,为什么我们不能预留一些数据,不在任何样本中使用它?

    • Jason Brownlee 2021年1月7日 上午6:16 #

      不客气。

      Bootstrap 可以直接用于非高斯分布。

      Bootstrap 需要从数据集中抽取样本,一些示例会在样本内,一些会在样本外。

  40. Mansik 2021年3月8日 凌晨12:24 #

    教授您好。

    我是美国的一名研究生,我遇到了一个问题,就是当样本量足够大时如何进行 bootstrap。

    具体来说,我正在做 LPA,这也需要 bootstrap。
    当人们数据中的样本量为 400 时,他们通常会重采样(bootstrap)10,000 次或至少 1,000 次。

    我的样本量足够大,n=45,000。在这种情况下,我需要 bootstrap 多少次?
    关于最小样本量的问题有很多,但我的情况看起来不寻常。

    • Jason Brownlee 2021年3月8日 上午4:54 #

      我认为 1000 次有点过多了,30 或 100 次可能就足够了。但这可能取决于数据集的密度/复杂性。

  41. Fatemeh Nikkhoo 2023年1月16日 上午3:20 #

    您把这个主题讨论得非常清楚!非常感谢!

    • James Carmichael 2023年1月16日 上午8:20 #

      不客气,Fatemeh!我们感谢您的支持和反馈!

  42. Dave 2023年1月31日 下午2:06 #

    Jason,非常感谢你这么棒的解释。

    我一直在想这个问题;我们是否可以把数据集分成训练集和测试集,然后分别对它们进行 bootstrap?
    这样每次我们都可以用训练集的一组 bootstrap 和它对应的测试集来训练和评估模型。您对此有何看法?
    在这种情况下,我们能说测试集和袋外样本是一样的吗?

    • James Carmichael 2023年2月1日 上午9:45 #

      你好 Dave……这个方法是合理的。请继续尝试,并告诉我们你的发现。

  43. Søren Fyhn 2023年8月14日 上午1:59 #

    很棒的文章。关于 Bootstrap 方法有一个问题。当进行有放回抽样,并且建议的样本大小与原始数据集相同时,会不会有风险导致剩余的观测值不足以构成一个有意义的测试数据集?如果碰巧测试中的许多唯一值被选中,只剩下很少的,这种情况下你会怎么做?

    • Søren Fyhn 2023年8月14日 上午2:03 #

      更正我上面的帖子,最后一句应该是

      “如果碰巧许多唯一值被选中,只剩下很少的,这种情况下你会怎么做?”

  44. Juan 2024年2月8日 上午5:29 #

    你好。

    如何应用 bootstrap 来更好地估计标准差及其置信区间?

    当有多个变量时,例如在回归模型中,如何应用它?

发表评论

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