Bootstrap 方法是一种重采样技术,用于通过对数据集进行有放回抽样来估计总体的统计数据。
它可以用来估计均值或标准差等汇总统计量。在应用机器学习中,它被用来估计机器学习模型在对未包含在训练数据中的数据进行预测时的性能。
在估计机器学习模型性能时,一个理想的特性是,估计出的性能可以附带置信区间,而这是交叉验证等其他方法不容易提供的。
在本教程中,您将了解用于估计机器学习模型在未知数据上性能的 Bootstrap 重采样方法。
完成本教程后,您将了解:
- Bootstrap 方法涉及对数据集进行有放回的迭代重采样。
- 使用 Bootstrap 时,您必须选择样本大小和重复次数。
- scikit-learn 提供了一个函数,可用于对数据集进行重采样以应用 Bootstrap 方法。
通过我的新书《机器学习统计学》来启动您的项目,书中包含所有示例的分步教程和 Python 源代码文件。
让我们开始吧。

Bootstrap 方法入门
照片由 john mcsporran 拍摄,保留部分权利。
教程概述
本教程分为4个部分,它们是:
- Bootstrap 方法
- Bootstrap 的配置
- 实例演示
- Bootstrap API
需要机器学习统计学方面的帮助吗?
立即参加我为期7天的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
Bootstrap 方法
Bootstrap 方法是一种统计技术,通过对多个小数据样本的估计值进行平均,来估算总体的数量特征。
重要的是,样本是通过从一个大数据样本中逐个抽取观测值,并在抽取后将其放回数据样本中来构建的。这使得一个给定的观测值可以在一个给定的小样本中被包含多次。这种抽样方法称为有放回抽样。
构建一个样本的过程可总结如下:
- 选择样本的大小。
- 当样本的大小小于所选大小时:
- 从数据集中随机选择一个观测值
- 将其添加到样本中
Bootstrap 方法可用于估计总体的某个量。这是通过重复抽取小样本,计算统计量,然后取这些计算出的统计量的平均值来实现的。我们可以将此过程总结如下:
- 选择要执行的 Bootstrap 样本数量
- 选择一个样本大小
- 对于每个 Bootstrap 样本:
- 以所选大小进行有放回抽样
- 计算样本的统计量
- 计算所计算出的样本统计量的均值。
该过程也可用于估计机器学习模型的性能。
Bootstrap 是一种适用范围广且极为强大的统计工具,可用于量化与给定估计器或统计学习方法相关的不确定性。
— 第 187 页, 《统计学习导论》, 2013。
这是通过在样本上训练模型,并在未包含在样本中的那些样本上评估模型性能来完成的。这些未包含在给定样本中的样本被称为袋外(out-of-bag)样本,简称 OOB。
使用 Bootstrap 方法评估模型性能的这个过程可总结如下:
- 选择要执行的 Bootstrap 样本数量
- 选择一个样本大小
- 对于每个 Bootstrap 样本:
- 以所选大小进行有放回抽样
- 在数据样本上拟合模型
- 在袋外样本上评估模型性能。
- 计算模型性能估计样本的均值。
未被选中的样本通常被称为“袋外”样本。对于 Bootstrap 重采样的某次迭代,模型在选中的样本上构建,并用于预测袋外样本。
— 第 72 页, 《应用预测建模》, 2013。
重要的是,在拟合模型之前进行的任何数据准备或模型超参数的调整,都必须在数据样本的 for 循环内部进行。这是为了避免数据泄露,即利用测试数据集的知识来改进模型。这反过来可能导致对模型性能的乐观估计。
Bootstrap 方法的一个有用特性是,最终得到的估计样本通常呈高斯分布。除了用中心趋势来总结这个分布外,还可以给出方差的度量,如标准差和标准误差。此外,可以计算置信区间来界定所提出的估计值。这在呈现机器学习模型的估计性能时非常有用。
Bootstrap 的配置
在执行 Bootstrap 时,必须选择两个参数:样本大小和要执行该过程的重复次数。
样本大小
在机器学习中,通常使用与原始数据集大小相同的样本大小。
Bootstrap 样本的大小与原始数据集相同。因此,一些样本会在 Bootstrap 样本中出现多次,而另一些则根本不会被选中。
— 第 72 页, 《应用预测建模》, 2013。
如果数据集非常大且计算效率是一个问题,可以使用较小的样本,例如数据集大小的 50% 或 80%。
重复次数
重复次数必须足够大,以确保可以对样本计算出有意义的统计数据,例如均值、标准差和标准误差。
最小次数可能是 20 或 30 次。使用更小的值会给样本的统计计算带来更大的方差。
理想情况下,在时间资源允许的情况下,估计样本应该尽可能大,重复数百或数千次。
实例演示
我们可以通过一个小例子来具体说明 Bootstrap 过程。我们将逐步完成一次迭代。
假设我们有一个包含 6 个观测值的数据集:
1 |
[0.1, 0.2, 0.3, 0.4, 0.5, 0.6] |
第一步是选择样本的大小。这里,我们将使用 4。
接下来,我们必须从数据集中随机选择第一个观测值。让我们选择 0.2。
1 |
样本 = [0.2] |
这个观测值被放回数据集中,我们再重复此步骤 3 次。
1 |
样本 = [0.2, 0.1, 0.2, 0.6] |
现在我们有了数据样本。这个例子特意展示了同一个值可以在样本中出现零次、一次或多次。这里观测值 0.2 出现了两次。
然后可以在抽取的样本上计算一个估计值。
1 |
统计量 = 计算([0.2, 0.1, 0.2, 0.6]) |
那些未被选入样本的观测值可以用作袋外观测值。
1 |
oob = [0.3, 0.4, 0.5] |
在评估机器学习模型的情况下,模型在抽取的样本上进行拟合,并在袋外样本上进行评估。
1 2 3 4 |
训练集 = [0.2, 0.1, 0.2, 0.6] 测试集 = [0.3, 0.4, 0.5] 模型 = 拟合(训练集) 统计量 = 评估(模型, 测试集) |
这就完成了一次重复。它可以重复 30 次或更多次,以得出一个计算统计量的样本。
1 |
统计量列表 = [...] |
然后可以通过计算均值、标准差或其他汇总值来总结这个统计量样本,从而给出一个最终可用的统计量估计值。
1 |
估计值 = 均值([...]) |
Bootstrap API
我们不必手动实现 Bootstrap 方法。scikit-learn 库提供了一个实现,可以创建数据集的单个 Bootstrap 样本。
可以使用 resample() scikit-learn 函数。它接受数据数组、是否进行有放回抽样、样本大小以及抽样前使用的伪随机数生成器的种子作为参数。
例如,我们可以创建一个 Bootstrap,它会生成一个包含 4 个观测值的有放回样本,并使用伪随机数生成器的值为 1。
1 |
boot = resample(data, replace=True, n_samples=4, random_state=1) |
不幸的是,这个 API 没有提供任何简便的机制来收集可用作测试集以评估拟合模型的袋外观测值。
至少在单变量的情况下,我们可以使用简单的 Python 列表推导式来收集袋外观测值。
1 2 |
# 袋外观测值 oob = [x for x in data if x not in boot] |
我们可以将所有这些与我们在上一节的实例演示中使用的小数据集结合起来。
1 2 3 4 5 6 7 8 9 10 |
# scikit-learn bootstrap from sklearn.utils import resample # 数据样本 data = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6] # 准备 bootstrap 样本 boot = resample(data, replace=True, n_samples=4, random_state=1) print('Bootstrap 样本: %s' % boot) # 袋外观测值 oob = [x for x in data if x not in boot] print('OOB 样本: %s' % oob) |
运行该示例会打印出 Bootstrap 样本中的观测值以及袋外样本中的观测值。
1 2 |
Bootstrap 样本: [0.6, 0.4, 0.5, 0.1] OOB 样本: [0.2, 0.3] |
扩展
本节列出了一些您可能希望探索的扩展本教程的想法。
- 列出 3 个您可以使用 Bootstrap 方法估计的汇总统计量。
- 找到 3 篇使用 Bootstrap 方法评估机器学习模型性能的研究论文。
- 实现您自己的函数,以使用 Bootstrap 方法创建一个样本和一个袋外样本。
如果您探索了这些扩展中的任何一个,我很想知道。
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
文章
书籍
- 应用预测建模, 2013.
- 统计学习导论, 2013.
- Bootstrap 导论, 1994.
API
文章
- 维基百科上的重采样(统计学)
- 维基百科上的自助法(统计学)
- 关于 Bootstrap 样本数量的经验法则,CrossValiated。
总结
在本教程中,您了解了用于评估机器学习模型在未见数据上性能的 Bootstrap 重采样方法。
具体来说,你学到了:
- Bootstrap 方法涉及对数据集进行有放回的迭代重采样。
- 使用 Bootstrap 时,您必须选择样本大小和重复次数。
- scikit-learn 提供了一个函数,可用于对数据集进行重采样以应用 Bootstrap 方法。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
很棒的文章,Jason!帮了我大忙
很高兴听到这个消息。
你忘了补充你在 R 或 R studio 上工作,这让你在了解程序时更容易,但对于外行来说,手动操作是另一回事,程序不会向他们展示。
我不在 R 或 R studio 工作,也从未工作过。
描述如何使用 bootstrap 估计均方误差
抽取样本,评估你的指标,重复,然后对分数求平均。
还有一本书
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/
非常棒的参考资料,谢谢 Vladislav。
感谢这篇文章,我终于能理解 K 折交叉验证和 Bootstrap 之间的区别了,谢谢清晰的解释。
很高兴听到这个消息。
嗨,Jason,
一篇非常好的文章。您能否扩展一下,用一些解释/例子说明如何在最后计算置信区间,例如,对于通过 bootstrap 计算出的均值?
请看这篇文章
https://machinelearning.org.cn/confidence-intervals-for-machine-learning/
还有这篇文章
https://machinelearning.org.cn/calculate-bootstrap-confidence-intervals-machine-learning-results-python/
非常感谢 Jason,这是一个很棒的主题,它帮我很好地理解了这个概念。
很高兴听到这个消息,Mahmood。
感谢这篇文章,我(在学习 ISLR 的 bootstrap 实验时)一直期待在 sklearn(或 numpy, pandas)中找到一个 bootstrap 方法。谢谢你的解释。你可能还想提一下 Panda 的 resample 方法,它对于将月度观测数据转换为季度数据很有用。
不确定 sklearn.cross-validation.bootstrap 是做什么的。
谢谢,Jerry。
嗨,Jason,
感谢这篇文章。我理解了什么是机器学习中的 Bootstrap。我对于 Bootstrap 和重复随机子抽样交叉验证(https://en.wikipedia.org/wiki/Cross-validation_(statistics)#Repeated_random_sub-sampling_validation)之间的区别感到困惑。对我来说,两者似乎是一样的。首先从给定数据中随机创建一个子样本,并在此基础上训练模型。接下来,在剩余的样本上验证模型。重复这个过程若干次。最终的验证误差将是每次迭代的估计值。请告诉我有什么区别吗?
我能想到的一个区别是,Bootstrap 是有放回抽样,而重复随机子抽样方法不重复样本。这是唯一的区别吗?
谢谢,
Gaurav
有放回抽样可能是主要区别。
Jason,我觉得在你文章中展示的方法里,Bootstrap 和重复随机子抽样交叉验证的概念有些混淆了。
我认为至少在入门介绍时,应该遵循以下方法:
– 首先将数据划分为训练集和测试集,然后训练模型(一个模型,不是多个)
– 然后使用 bootstrap 进行模型性能评估。这里只使用包含 n 个点的测试数据 x。我们将从 x 中有放回地抽取 n 个点来创建 bootstrap 复制样本 x*,并在 x* 上评估模型性能。我们重复这个过程 B 次。这种变异将告诉我们,在给定测试数据的情况下,我们对模型性能的测量有多好。
或许也可以反过来做,即在训练数据的 bootstrap 复制样本上训练多个模型,每个模型都用相同的测试数据进行测试。这次的变异将显示模型性能对训练数据的依赖程度有多强(类似于我们通过交叉验证达到的效果)。
谢谢你的建议。
非常有用的文章,Jason..概念很容易理解..非常感谢
谢谢。很高兴听到这个消息。
嗨,Jason,
如何将 bootstrap 方法应用于时间序列数据?
谢谢
嗯……或许可以对同一个模型使用不同长度的历史数据,或者使用不同配置的模型?
谢谢回复。我考虑使用 bootstrap 策略的原因很简单,因为我没有足够的数据(时间序列)来拟合和验证我的模型。因此,我需要找到一种方法来扩展或增强我当前的数据。
我了解到一种移动块 bootstrap 方法,它简单地将原始数据分段成块,然后对这些块进行有放回的独立重采样,同时保持观测值序列中的顺序。我能够以一定的置信区间增加我的数据,但在 bootstrap 后的数据中缺少了日期索引,只留下一个难以处理的索引。
我希望您能给我一个关于时间序列 bootstrap 更简洁概念的链接,因为我查阅的文章假设读者具备一定的统计学知识。
很有趣。我不太熟悉这种方法。请告诉我你的进展。
Efron 和 Tibshirani 的书《An Introduction to the Bootstrap》确实涵盖了重采样时间序列的例子。基本上,他们使用某种模型,然后对模型误差进行重采样以创建新的时间序列。可以看看这本书——这本书值得一读。
谢谢!
当然!
是否可以将自助法与目的性抽样结合使用?
康妮
我们的想法是使用有放回的随机抽样。如果你使用非随机抽样,你会引入偏差。
或许可以试试并比较结果。
我想对我的观测数据进行 bootstrap 以估计 NARDL 模型,您能帮我创建一个程序或者简单地指导我一下吗???
NARDL 模型是什么?
ARDL 是一种计量经济学模型,有两种类型:线性的(ARDL)和非线性的(NARDL)。
自回归分布滞后模型(ARDL)在需要分析经济情景时扮演着至关重要的角色。在经济体中,任何经济变量的变化都可能在未来一段时间内引起其他经济变量的变化。这种变量的变化不是立即反映出来的,而是分布在未来的时期。不仅是宏观经济变量,其他变量如公司一年的亏损或盈利也会在一段时间内影响组织的品牌形象。
感谢分享,我没有经济模型/方法的经验。
好的,谢谢你
嗨,Jason,
您提到了机器学习模型的“skill”(技能)。我以前没听说过这个术语——它和准确率(accuracy)是一样的吗?一如既往,感谢这篇精彩的文章。
技能是我们/利益相关者关心的模型性能方面。它可能是准确率或误差。
总体思路很容易理解,但我不太明白“通常使用与原始数据集大小相同的样本大小”这句话。这是怎么操作的?如果样本大小和原始数据集一样大,那就没有抽样了啊。除非“原始数据集”在这里有别的意思。听起来好像是说,如果你的训练集里有20个例子,你的样本大小也应该是20。
哦对了,是因为有放回抽样。不过,直觉上使用一个更小的子集似乎更有用。
没错!
为什么较小的数据集更符合直觉?
我们从原始样本中创建与原始样本大小相同的样本,但可能会重复一些示例(例如,有放回抽样)。
这有帮助吗?
感谢这篇文章,它在理解 bootstrap 方法方面给了我很大帮助。
我遇到了一个问题,本以为可以用 bootstrap 解决,但在理解了这个方法后,觉得似乎不太合理。您能帮我一下吗?
我正在做一个多类别图像分类算法,数据集完全不平衡。例如:A 类有 2000 张图片,而 B 类只有 100 张图片。您能指导我如何处理这个问题,并建立一个好的 CNN 模型吗?
好问题。
我在这里有处理不平衡数据的建议
https://machinelearning.org.cn/tactics-to-combat-imbalanced-classes-in-your-machine-learning-dataset/
也许你可以使用数据增强来对少数类进行过采样
https://machinelearning.org.cn/image-augmentation-deep-learning-keras/
开始使用 CNN 的一个好方法是迁移学习
https://machinelearning.org.cn/transfer-learning-for-deep-learning/
非常感谢您的建议。我会仔细研究您提到的方法。
补充评论
所以 bootstrap 方法不能用来平衡数据集,对吗?
我目前正在使用迁移学习(vgg16, resnet50)来分类我的图像。然而,由于数据严重不平衡,我无法获得预期的结果。
谢谢你,
KK
Bootstrap 并非旨在平衡数据集。也许它可以用于此目的,但我没有见过这种用法。
感谢您的澄清。现在我对这些方法有了更好的理解。我将对少数类数据集进行过采样(翻转、添加一些噪声等),然后重新训练我的迁移学习模型。如果得到有趣的结果,我会在这里更新。
再次感谢您的博客,它帮助我理解了很多主题。
期待听到你的进展。
嗨,Jason,
非常感谢这篇文章,非常有帮助!
我有一个关于 bootstrap 样本大小的问题。其他在线资源建议,对于统计推断,bootstrap 样本大小应等于原始样本大小:“统计估计的准确性取决于样本大小”。
您认为只取一个作为 bootstrap 样本大小有什么风险吗?
样本量为 1 太小了,我预计至少需要 30 个。
感谢您的文章!
我的问题是,如果像那样使用 bootstrap 抽样,我猜我们会失去数据集的时间依赖性。这对机器学习时间序列预测有什么用呢?
谢谢。
你可以用不同的历史子集来拟合模型。
谢谢 Jason,我有两个问题,请问:1- 如果我的数据集是 4D 的,每个数据点(行)包含四个属性,我是应该对整个数据点进行 bootstrap,还是可以在属性之间混合?2- 如果我的数据集很大,比如 30 万,我每次可以重采样一个子集,比如 5000 个吗?我的情况是需要进行 1000 次采样,每次只需要 5000 个... 尝试重采样 30 万时遇到了内存错误。谢谢
你应该在行(样本)之间进行选择,而不是在列(特征)之间。
嗨,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,
抱歉这很长,但我真的很希望能得到帮助!
这篇文章很有帮助,因为我正试图“增加”我的样本量,以便改进我的模型估计。我正在用 R 做这个项目,但我也熟悉 Python。我想之前的评论试图解决这个问题,但没有说清楚。
我有野生动物探测数据以及探测发生的调查地点的环境特征数据。我希望有更多调查地点的野生动物探测数据,这样我使用的占用模型可以提供更准确的物种丰富度估计。我只有 40 个有野生动物探测的调查地点,我希望有 80 个。我希望确保在进行 bootstrap 时,我的探测数据是在考虑其他因变量的情况下进行重采样的,以便探测结果与环境特征相对一致。
有没有办法确保我想从数据集中重采样的特征是在考虑其他因变量的情况下进行重采样的?或者,有没有办法根据我已经拥有的 40 个调查地点的数据来创建“新的调查”地点和新的探测数据(一次性对多个特征进行 bootstrap)?
感谢任何帮助或参考资料!
是的,你可以将所有变量捆绑到一个内存中的数据结构里,然后对这些聚合的“记录”集合进行重采样。
谢谢回复!
您具体是什么意思?您的意思是我应该将变量保存在一个数据框中,然后从数据框中重采样行吗?
谢谢!
阿里
或者用任何你觉得方便操作的结构。
它真的帮了我大忙。谢谢 ????
很高兴听到这个消息。
你应该解释为什么“有放回”很重要,以及它实现了什么目的。
很好的建议,谢谢。
在一个包含 400 个样本的数据集中,我有一些子样本被分成了两个分类变量,比如说 A 和 B。A 有 106 个样本,B 有 294 个。由于两个样本数量之间存在很大的不平衡,bootstrap 能否帮助对分类变量 A 进行相关性分析?我只对分类变量 A 进行相关性检验感兴趣。
嗯,样本量很小。
使用数千次重复可能会帮助你估计所需的量。不过我感觉有点不放心。
使用分层重采样程序可能会有帮助。
感谢您的文章。对于通过将 t 值乘以均值的标准误差计算出的置信区间,样本量和置信区间宽度之间存在明确的关系(样本量增加四倍,宽度减半)。我想知道,样本量与通过 bootstrap 计算出的置信区间宽度之间有什么联系?
可能与估计数量时的大数定律有关
https://machinelearning.org.cn/a-gentle-introduction-to-the-law-of-large-numbers-in-machine-learning/
我的理解是否正确,即只有当研究样本较小时才需要 bootstrap?然后通过 bootstrap 进行重复以增加样本量。
不仅如此,你通常也可以使用该方法来估计一个量,比如在展示最终模型时估计模型准确率。
你好,Brownlee 先生;
在本教程中,resample 函数在所有试验中为 boot 和 oob 样本选择了相同的值。
我的意思是,在每个循环中
Bootstrap 样本: [0.6, 0.4, 0.5, 0.1]
OOB 样本: [0.2, 0.3]
我需要用 resample 函数将数据集分成 10 份,并希望为训练集和测试集得到不同的集合。然后每个训练集和测试集都将用于机器学习算法,即我需要一个 bootstrap 聚合。但是 resample 函数在每次循环中的输出都是相同的。
是的,在选择一个样本后,你必须手动用它来创建训练/测试集。
你可以在这里看到一个例子
https://machinelearning.org.cn/calculate-bootstrap-confidence-intervals-machine-learning-results-python/
这个例子真的很有帮助。我之前看了好几个链接,一直很难理解这个概念。然后这个链接里的例子澄清了我的想法。谢谢你。
谢谢,很高兴它能帮到你!
解释得非常完美!非常感谢!
谢谢,很高兴它对你有用。
你好!!!
在有 50 万个样本且它们不在 95% 置信区间内之后,这意味着什么?我应该分析更多的 k(比如 1000 个)吗?还是说所提出的模型不起作用?
谢谢!
你好,
我想知道您是否能指出一些关于如何撰写自助法统计数据的例子——在我的案例中是报告一个小型试点研究。
谢谢!
这可能会给你一些想法
https://machinelearning.org.cn/calculate-bootstrap-confidence-intervals-machine-learning-results-python/
非常感谢这个精彩的解释。
我想重复 bootstrap X 次,如何在您的代码中实现?
此致
为什么?
也许在 bootstrap 外面再加一个循环。
换句话说:或者 Bootstrap 的输出应该从原始数据中生成 X 个重采样包。在您的示例中,我只看到创建了 1 个重采样包。如何创建多个?
谢谢。
看这个实例演示
https://machinelearning.org.cn/calculate-bootstrap-confidence-intervals-machine-learning-results-python/
你好,
如何设置特定的重复次数?在您的页面上找不到。此致,Mico
这是一个实例演示
https://machinelearning.org.cn/calculate-bootstrap-confidence-intervals-machine-learning-results-python/
解释得很好!
谢谢!
你好!非常感谢您的文章和出色的工作。我是一个忠实的追随者。如果这个问题上面已经回答过,或者我漏掉了一些非常基础的东西,我很抱歉。我们能用 Bootstrap 方法估计方差吗?
我有一个均值为 0.08,方差为 0.0001 的分布。
均值估计正确,但我也想估计方差。
非常感谢。
不客气。
好问题,我猜想是可以的,但我建议你查阅文献以确认。
感谢您的回复,您的回复鼓励我深入挖掘,我发现了我犯的错误。我使用了 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))
如果我错了,或者我抽取的样本比需要的多太多,请纠正我。
提前感谢。
不客气。
感谢分享。抱歉,我没有能力审查代码。
我想知道 resample 函数是否执行了 bootstrap 的第一步?
抱歉,我不太明白您的问题。您能详细说明一下吗?
再次感谢 Jason 如此简洁易懂的文章。有几个问题,
1. 如果所选统计量不服从高斯分布,如何计算 CI?
2. 关于“不幸的是,resample() API 没有提供任何简便的机制来收集可用作测试集以评估拟合模型的袋外观测值”,为什么我们不能预留一些数据,不在任何样本中使用它?
不客气。
Bootstrap 可以直接用于非高斯分布。
Bootstrap 需要从数据集中抽取样本,一些示例会在样本内,一些会在样本外。
教授您好。
我是美国的一名研究生,我遇到了一个问题,就是当样本量足够大时如何进行 bootstrap。
具体来说,我正在做 LPA,这也需要 bootstrap。
当人们数据中的样本量为 400 时,他们通常会重采样(bootstrap)10,000 次或至少 1,000 次。
我的样本量足够大,n=45,000。在这种情况下,我需要 bootstrap 多少次?
关于最小样本量的问题有很多,但我的情况看起来不寻常。
我认为 1000 次有点过多了,30 或 100 次可能就足够了。但这可能取决于数据集的密度/复杂性。
您把这个主题讨论得非常清楚!非常感谢!
不客气,Fatemeh!我们感谢您的支持和反馈!
Jason,非常感谢你这么棒的解释。
我一直在想这个问题;我们是否可以把数据集分成训练集和测试集,然后分别对它们进行 bootstrap?
这样每次我们都可以用训练集的一组 bootstrap 和它对应的测试集来训练和评估模型。您对此有何看法?
在这种情况下,我们能说测试集和袋外样本是一样的吗?
你好 Dave……这个方法是合理的。请继续尝试,并告诉我们你的发现。
很棒的文章。关于 Bootstrap 方法有一个问题。当进行有放回抽样,并且建议的样本大小与原始数据集相同时,会不会有风险导致剩余的观测值不足以构成一个有意义的测试数据集?如果碰巧测试中的许多唯一值被选中,只剩下很少的,这种情况下你会怎么做?
更正我上面的帖子,最后一句应该是
“如果碰巧许多唯一值被选中,只剩下很少的,这种情况下你会怎么做?”
你好。
如何应用 bootstrap 来更好地估计标准差及其置信区间?
当有多个变量时,例如在回归模型中,如何应用它?