文章目录
Bootstrap方法是一种重采样技术,用于通过对数据集进行替换采样来估计总体统计数据。
它可用于估计汇总统计数据,例如均值或标准差。它在应用机器学习中用于在对未包含在训练数据中的数据进行预测时估计机器学习模型的技能。
估计机器学习模型技能的结果的一个理想特性是可以用置信区间表示估计的技能,这是其他方法(例如交叉验证)不容易获得的特征。
在本文中您将发现用于估计机器学习模型对未知数据的技能的引导重采样方法。
- bootstrap 方法涉及对数据集进行迭代重采样和替换。
- 使用引导程序时,您必须选择样本大小和重复次数。
- scikit-learn 提供了一个函数,您可以使用该函数为 bootstrap 方法重新采样数据集。
引导法
Bootstrap 方法是一种统计技术,用于通过对多个小数据样本的估计进行平均来估计有关总体的数量。
重要的是,样本是通过从一个大数据样本中一次抽取一个观察结果并在它们被选择后返回给数据样本来构建的。这允许给定的观察不止一次包含在给定的小样本中。这种抽样方法称为放回抽样。
构建一个样本的过程可以总结如下:
- 选择样本的大小。
- 而样本的大小小于选择的大小:从数据集中随机选择一个观察并将其添加到示例中。
Bootstrap 方法可用于估计总体的数量。这是通过反复抽取小样本、计算统计量并取计算出的统计量的平均值来完成的。我们可以将这个过程总结如下:
- 选择一些引导程序样本来执行
- 选择样本大小
- 对于每个引导样本:用所选尺寸进行替换绘制样本并计算样本的统计量
- 计算计算出的样本统计数据的平均值。
该过程还可用于估计机器学习模型的技能。
《An Introduction to Statistical Learning》2013年
The bootstrap is a widely applicable and extremely powerful statistical tool that can be used to quantify the uncertainty associated with a given estimator or statistical learning method.
Bootstrap 是一种广泛适用且极其强大的统计工具,可用于量化与给定估计量或统计学习方法相关的不确定性。
这是通过在样本上训练模型并评估模型在未包含在样本中的那些样本上的技能来完成的。这些未包含在给定样本中的样本称为袋外样本,简称 OOB。
这个使用 bootstrap 方法估计模型技能的过程可以总结如下:
- 选择一些引导程序样本来执行
- 选择样本大小
- 对于每个引导样本:用所选尺寸进行替换绘制样本,在数据样本上拟合模型,估计模型在袋外样本上。
- 计算模型技能估计样本的平均值。
《Applied Predictive Modeling》 2013年
The samples not selected are usually referred to as the “out-of-bag” samples. For a given iteration of bootstrap resampling, a model is built on the selected samples and is used to predict the out-of-bag samples.
未选择的样品通常称为“袋外”样品。对于自举重采样的给定迭代,在所选样本上建立模型并用于预测袋外样本。
重要的是,在拟合模型或调整模型超参数之前的任何数据准备都必须在数据样本的 for 循环中进行。这是为了避免使用测试数据集的知识来改进模型的数据泄漏。反过来,这可以导致对模型技能的乐观估计。
bootstrap 方法的一个有用特征是估计的结果样本通常形成高斯分布。除了用集中趋势总结这个分布之外,还可以给出方差的度量,例如标准偏差和标准误差。此外,可以计算置信区间并将其用于限定所呈现的估计。这在展示机器学习模型的估计技能时很有用。
引导程序的配置
执行引导程序时必须选择两个参数:样本的大小和要执行的程序的重复次数。
样本量
在机器学习中,通常使用与原始数据集相同的样本大小。
《Applied Predictive Modeling》 2013年
The bootstrap sample is the same size as the original dataset. As a result, some samples will be represented multiple times in the bootstrap sample while others will not be selected at all.
bootstrap 样本与原始数据集大小相同。因此,某些样本将在引导样本中多次表示,而其他样本则根本不会被选中。
如果数据集很大且计算效率有问题,可以使用较小的样本,例如数据集大小的 50% 或 80%。
重复
重复次数必须足够大,以确保可以对样本计算有意义的统计量,例如均值、标准差和标准误差。
最少可能是 20 或 30 次重复。可以使用较小的值将进一步增加对估计值样本计算的统计数据的方差。
理想情况下,考虑到时间资源,估计样本应尽可能大,重复数百或数千次。
代码示例
我们可以通过一个小的工作示例使引导程序具体化。我们将完成该过程的一次迭代。
想象一下,我们有一个包含 6 个观察值的数据集:
[0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
第一步是选择样本的大小。在这里,我们将使用 4。
接下来,我们必须从数据集中随机选择第一个观察值。让我们选择 0.2。
sample = [0.2]
这个观察结果返回到数据集,我们再重复这个步骤 3 次。
sample = [0.2, 0.1, 0.2, 0.6]
我们现在有了我们的数据样本。该示例有意证明相同的值可以在样本中出现零次、一次或多次。这里观测值 0.2 出现了两次。
然后可以对抽取的样本计算估计值。
statistic = calculation([0.2, 0.1, 0.2, 0.6])
没有为样本选择的那些观察可以用作样本外观察。
oob = [0.3, 0.4, 0.5]
在评估机器学习模型的情况下,该模型适合绘制的样本并在袋外样本上进行评估。
train = [0.2, 0.1, 0.2, 0.6]
test = [0.3, 0.4, 0.5]
model = fit(train)
statistic = evaluate(model, test)
这样就结束了一个重复的过程。它可以重复 30 次或更多次以给出计算统计的样本。
statistics = [...]
然后可以通过计算平均值、标准偏差或其他汇总值来汇总此统计样本,以提供最终可用的统计估计值。
estimate = mean([...])
引导程序 API
我们不必手动实现 bootstrap 方法。scikit-learn 库提供了一个实现,可以创建数据集的单个引导样本。
可以使用resample() scikit-learn 函数。它将数据数组作为参数,是否进行替换采样、样本大小以及采样前使用的伪随机数生成器的种子。
例如,我们可以创建一个引导程序,该程序创建一个带有 4 个观测值的替换样本,并为伪随机数生成器使用值 1。
boot = resample(data, replace=True, n_samples=4, random_state=1)
不幸的是,API 不包含任何机制来轻松收集可用作评估拟合模型的测试集的袋外观察。
至少在单变量情况下,我们可以使用简单的 Python 列表理解来收集袋外观察。
# 袋外观察
oob = [x for x in data if x not in boot]
我们可以将所有这些与我们在上一节的工作示例中使用的小数据集联系在一起。
# scikit-learn bootstrap
from sklearn.utils import resample
# 数据样本
data = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
# 准备引导样本
boot = resample(data, replace=True, n_samples=4, random_state=1)
print('Bootstrap Sample: %s' % boot)
# 袋外观察
oob = [x for x in data if x not in boot]
print('OOB Sample: %s' % oob)
运行该示例将打印 bootstrap 样本中的观察值和袋外样本中的观察值
Bootstrap Sample: [0.6, 0.4, 0.5, 0.1]
OOB Sample: [0.2, 0.3]