小张是一家奶茶店的老板,试营业那天只攒下 20 张外卖订单。他想开连锁店,必须知道“一天到底能卖多少杯”,可手里只有这一天数据,怎么知道销量稳不稳、波动有多大?换作普通人可能干瞪眼,但懂行的人会微微一笑:把 20 张订单放进一个签筒,闭眼抽一张、记下数字、放回去,再抽,反复抽满 20 张,凑成一个“虚拟新一天”。重复 1000 次,就得到 1000 个虚拟天的销量。看看这些虚拟天大多落在什么范围,就能估计真实波动。这种“靠一份数据反复自抽,把自己估出来”的方法,就是统计学里的 Bootstrap(自助法)。它不制造新东西,只是把有限数据当成取之不尽的签筒,用有放回重采样造出许多“平行世界”,再从平行世界里观察各种指标的脾气。机器学习里,它既能给模型效果算置信区间,又孕育了随机森林这样的算法。这篇文章就用小张的奶茶店故事,带你从零看懂 Bootstrap 重采样的原理、区间计算、与交叉验证的纠葛,以及它在实际项目中的打开方式。

岗位关联

学懂 Bootstrap,你就能在汇报模型效果时说出“准确率 92%,95% 置信区间 89%~95%”,而不是只丢一个干巴巴的数字——这是 AI 从业者专业性的分水岭。

目录
  1. 可视化演示
  2. 重采样原理
  3. 自助样本生成
  4. 置信区间估计
  5. 偏差与方差
  6. 交叉验证对比
  7. 小样本场景
  8. 实际应用
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。

本节配有交互动效(进入视口后自动加载,约 3KB)。

系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T

重采样原理

小张把 20 张订单当成自助餐台,每取一张订单就记下金额,然后放回餐台再取。手气背的时候,同一张大额订单可能被反复取到三次;手气好的时候,某张订单连影子都没出现。这就是“有放回抽样”——抽完的东西回到池子里,下一次还能再被抽到。

在统计学里,这种方法由 Efron 在 1979 年正式命名为 Bootstrap。它的核心操作非常简单:从原始数据 $\{x_1, x_2, \ldots, x_n\}$ 中有放回地抽取 n 次,组成一个自助样本。注意,抽取次数和原始数据量一样多,既不多也不少。因为放回,自助样本里会出现重复的观测值,也会漏掉一些原始数据。

这样一个“虚拟的样本”有什么用?我们可以从它身上算出任何感兴趣的统计量(从数据里算出来的一个数,比如均值、中位数、方差)。同一个公式换个数据代入,就得到一个新的估计值:

一个虚拟天可能因为某张大单被抽中两次而显得销量虚高,也可能因为漏掉大单而偏低。正因如此,我们才需要生成许多个虚拟天,从它们的波动中看到真实规律。

xˉ∗=1n∑i=1nxi∗,xi∗  有放回取自  {x1,x2,…,xn}\bar{x}^{*} = \frac{1}{n}\sum_{i=1}^{n} x_{i}^{*},\quad x_{i}^{*}\;\text{有放回取自}\;\{x_1,x_2,\ldots,x_n\}
这个公式表示自助样本均值:从原始数据中有放回抽出 n 个值,加起来除以 n,得到一个“虚拟平均值”。
  1. 自助样本 $x_i^*$第 i 次有放回抽到的原始观测值,可能和之前的某次重复。
    xi∗  均匀取自  {x1,x2,…,xn}x_{i}^{*}\;\text{均匀取自}\;\{x_1,x_2,\ldots,x_n\}
  2. 求和 $\sum_{i=1}^{n}$把 n 次抽到的所有值加总,得到自助样本的总量。
    ∑i=1nxi∗=x1∗+x2∗+⋯+xn∗\sum_{i=1}^{n} x_{i}^{*} = x_{1}^{*}+x_{2}^{*}+\cdots+x_{n}^{*}
  3. 平均 $\frac{1}{n}$除以 n 得到这一个自助样本的均值 $\bar{x}^{*}$,也就是“虚拟新一天”的平均销量。
    xˉ∗=x1∗+x2∗+⋯+xn∗n\bar{x}^{*} = \frac{x_{1}^{*}+x_{2}^{*}+\cdots+x_{n}^{*}}{n}

自助样本生成

小张把操作流程写成了一张便签:签筒里放 20 张订单,抽一张 → 记下金额 → 放回 → 摇一摇 → 再抽。重复 20 次,攒成一份“虚拟新一天”。第二天再从头来一遍,又得到一份新样本。这个过程重复 B 次(比如 1000 次),就攒下 1000 份虚拟订单集合。

这份操作流程在学术上有个严谨的说法:Bootstrap 抽样流程。每一步从全部 n 个原始样本中等概率抽取;每次抽取相互独立,上一次抽到谁不影响下一次;抽完放回保证池子始终是 n 个;最后样本容量固定为 n。重复 B 轮后,我们得到 B 个统计量 $\hat{\theta}^{*1}, \hat{\theta}^{*2}, \ldots, \hat{\theta}^{*B}$,它们合在一起就构成了统计量的 Bootstrap 近似分布。

有个数字特别有意思:一个原始样本点,在某个自助样本里“至少出现一次”的概率是多少?第一次抽没抽到没关系,n 次里只要出现一次就算数:

P(至少被抽中一次)=1−(1−1n)n≈1−e−1≈0.632P(\text{至少被抽中一次}) = 1 - \left(1-\frac{1}{n}\right)^n \approx 1 - e^{-1} \approx 0.632
约 63.2% 的原始数据会在某个自助样本中出现,剩下的约 36.8% 会缺席。这就是著名的 0.632 法则。
  1. 单次不中 $(1-\frac{1}{n})$某一次抽样没有抽到指定点的概率。
    1−1n=n−1n1-\frac{1}{n} = \frac{n-1}{n}
  2. 全部不中 $\left(1-\frac{1}{n}\right)^n$连抽 n 次该点一次都不露面的概率,因为每次独立所以相乘。
    (1−1n)n→n→∞e−1≈0.368\left(1-\frac{1}{n}\right)^n \xrightarrow{n\to\infty} e^{-1} \approx 0.368
  3. 取补 $1-$排除“一次都没出现”的情况,得到“至少出现一次”的概率约 0.632。
    1−0.368=0.6321 - 0.368 = 0.632

置信区间估计

有了 1000 个虚拟天的销量,小张把它们从低到高排成一队。他想知道“中间 95% 的虚拟天都卖了多少杯”,于是挥刀砍掉最惨的 2.5% 和最火爆的 2.5%,剩下的左右边界就是答案。这就是置信区间估计里的百分位法。

把 B 个 Bootstrap 统计量排序后,取 $\alpha/2$ 分位数和 $1-\alpha/2$ 分位数作为区间两端。另一条常用路线是标准误法:把 Bootstrap 分布的标准差当作标准误,再用正态分布的分位数乘出区间宽度。两条路都建立在“虚拟世界的波动近似真实波动”这个信念上:

现在小张终于能拍着胸脯说:“我的店 95% 的虚拟天销量在 8 到 14 杯之间。”这比单说“平均 10 杯”让人放心得多——它诚实地承认了不确定性。

[θ^(α/2)∗, θ^(1−α/2)∗],θˉ∗±z1−α/2⋅se^∗\left[\hat{\theta}^{*}_{(\alpha/2)},\ \hat{\theta}^{*}_{(1-\alpha/2)}\right],\qquad \bar{\theta}^{*} \pm z_{1-\alpha/2}\cdot \widehat{se}^{*}
左边是百分位法的区间,右边是标准误法的区间,两者都在回答:这个统计量大概落在什么范围内。
  1. 下分位 $\hat{\theta}^{*}_{(\alpha/2)}$排序后位于 2.5% 位置的自助统计量值,作为区间下界。
    θ^(0.025)∗=第 ⌈0.025B⌉ 小的统计量\hat{\theta}^{*}_{(0.025)} = \text{第 } \lceil 0.025B \rceil \text{ 小的统计量}
  2. 上分位 $\hat{\theta}^{*}_{(1-\alpha/2)}$排序后位于 97.5% 位置的值,作为区间上界。
    θ^(0.975)∗=第 ⌈0.975B⌉ 小的统计量\hat{\theta}^{*}_{(0.975)} = \text{第 } \lceil 0.975B \rceil \text{ 小的统计量}
  3. 标准误 $\widehat{se}^{*}$B 个自助统计量的样本标准差,衡量虚拟天之间的波动幅度。
    se^∗=1B−1∑b=1B(θ^∗b−θˉ∗)2\widehat{se}^{*} = \sqrt{\frac{1}{B-1}\sum_{b=1}^{B}\left(\hat{\theta}^{*b}-\bar{\theta}^{*}\right)^2}
  4. 临界值 $z_{1-\alpha/2}$标准正态分布的分位数,95% 置信度下约为 1.96。
    z0.975≈1.96z_{0.975} \approx 1.96

偏差与方差

小张算了一下,1000 个虚拟天的平均销量是 10.6 杯,而他手上 20 张订单的真实平均是 10.3 杯,差了 0.3 杯。这个差值不是随机噪音,而是虚拟世界整体偏高的“系统性偏移”——偏差。为什么会有偏差?因为有放回抽样让某些大单被过度重复,均值被微微抬高。

Bootstrap 不仅能给出区间,还能把偏差和方差分别量化。偏差估计是自助统计量均值与原始统计量之差;方差估计是自助统计量围绕自身均值的离散程度。用公式写就是:

偏差大说明虚拟世界整体跑偏,方差大说明虚拟天之间上蹿下跳。两者常常互相拉扯:想压低偏差,可能模型变复杂、方差又涨起来。这就是机器学习里永恒的“偏差-方差权衡”,而 Bootstrap 恰好给了我们一把测量它们的尺子。

bias^=θˉ∗−θ^,Var^(θ^)=1B−1∑b=1B(θ^∗b−θˉ∗)2\widehat{\mathrm{bias}} = \bar{\theta}^{*} - \hat{\theta},\qquad \widehat{\mathrm{Var}}(\hat{\theta}) = \frac{1}{B-1}\sum_{b=1}^{B}\left(\hat{\theta}^{*b} - \bar{\theta}^{*}\right)^2
第一个式子度量虚拟世界与真实世界的系统差距,第二个式子度量虚拟世界内部的波动大小。
  1. 原始统计量 $\hat{\theta}$在原始数据上直接算出的统计量,比如 20 张订单的均值 10.3。
    θ^=1n∑i=1nxi\hat{\theta} = \frac{1}{n}\sum_{i=1}^{n} x_{i}
  2. 自助均值 $\bar{\theta}^{*}$所有自助统计量的平均值,代表虚拟世界的中心。
    θˉ∗=1B∑b=1Bθ^∗b\bar{\theta}^{*} = \frac{1}{B}\sum_{b=1}^{B}\hat{\theta}^{*b}
  3. 偏差 $\widehat{\mathrm{bias}}$两者之差,正数说明虚拟世界整体偏高,负数说明偏低。
    bias^=θˉ∗−θ^=10.6−10.3=0.3\widehat{\mathrm{bias}} = \bar{\theta}^{*} - \hat{\theta} = 10.6 - 10.3 = 0.3
  4. 方差 $\widehat{\mathrm{Var}}$每个自助统计量与中心偏差的平方之和再平均,代表虚拟天之间的动荡程度。
    Var^(θ^)=1B−1∑b=1B(θ^∗b−θˉ∗)2\widehat{\mathrm{Var}}(\hat{\theta}) = \frac{1}{B-1}\sum_{b=1}^{B}\left(\hat{\theta}^{*b} - \bar{\theta}^{*}\right)^2

交叉验证对比

交叉验证像给员工排值班表:20 张订单分成 4 组,每组 5 张,周一用第 1 组当验证集,其余值班训练;周二换第 2 组……每张订单恰好只值一天班,各折之间互不重叠。Bootstrap 则像自助餐:同一个菜(同一张订单)可以反反复复拿,不受“只能出现一次”的约束。

这两种方法常常被放一起比较,但它们的性格完全不同。K 折交叉验证的核心是“互斥划分”:数据被切分成 K 个不相交的子集,每个样本恰好进入一次验证集,保证评估的相对公平。Bootstrap 的核心是“有放回共享”:训练集和验证集的角色模糊,同一个样本可能同时出现在多个自助样本中。交叉验证更适合回答“这个模型在没见过的数据上表现如何”,Bootstrap 更适合回答“这个指标估计得有多稳”。

两者还能结合出著名的 0.632 自助法,专门用来修正自助评估的乐观偏差:

排班表保证公平,自助餐提供灵活。实际项目里两者像左膀右臂:选模型用交叉验证,报指标的不确定性用 Bootstrap。

E0.632=0.368⋅eˉtrain+0.632⋅etestE_{0.632} = 0.368 \cdot \bar{e}_{\mathrm{train}} + 0.632 \cdot e_{\mathrm{test}}
这个公式把训练误差和袋外测试误差加权组合,用 0.632 这个比例修正 Bootstrap 的高估倾向。
  1. 训练误差 $\bar{e}_{\mathrm{train}}$在自助样本上训练并测试得到的平均误差,通常偏乐观(低估真实误差)。
    eˉtrain=1B∑b=1Betrain∗b\bar{e}_{\mathrm{train}} = \frac{1}{B}\sum_{b=1}^{B} e_{\mathrm{train}}^{*b}
  2. 测试误差 $e_{\mathrm{test}}$在没被抽中的袋外样本上得到的预测误差,更接近真实水平。
    etest=1n∑i:xi∉自助样本L(yi,f^(xi))e_{\mathrm{test}} = \frac{1}{n}\sum_{i: x_i \notin \text{自助样本}} L(y_i, \hat{f}(x_i))
  3. 权重 0.368 与 0.632约 63.2% 的原始样本在自助样本中出现(对应测试权重 0.632),36.8% 未出现(对应训练权重 0.368)。
    0.368+0.632=10.368 + 0.632 = 1

小样本场景

试营业只有 20 单,如果硬做 10 折交叉验证,每折只有 2 张订单,验证结果像抛硬币一样乱跳。小张愁坏了,但 Bootstrap 在这时候反而稳:它不需要把数据切得更碎,而是从 20 单里反复“变”出大量虚拟样本,用重复次数换稳定。

Bootstrap 之所以能救场,靠的是经验分布。它把原始数据当作一个离散的“经验分布”来看待:每个观测值出现的概率都是 $1/n$。有放回抽样,就等价于从这个经验分布里反复采样。当样本量 n 很小时,交叉验证每折的方差大得吓人;Bootstrap 则通过大量重复把估计的随机性磨平。

经验分布函数长这样:

Bootstrap 无法凭空造出新口味,但它能把现有菜单的点单规律研究得明明白白。样本少不可怕,怕的是误以为数据能无中生有。

F^n(x)=1n∑i=1n1{xi≤x}\hat{F}_n(x) = \frac{1}{n}\sum_{i=1}^{n} \mathbf{1}\{x_i \le x\}
这个函数统计原始数据中不超过 x 的比例,Bootstrap 就是从它里面反复抽签。
  1. 指示函数 $\mathbf{1}\{x_i \le x\}$当第 i 个观测值不大于 x 时取 1,否则取 0,相当于一次“是否达标”的投票。
    1{xi≤x}={1,xi≤x0,xi>x\mathbf{1}\{x_i \le x\} = \begin{cases} 1, & x_i \le x \\ 0, & x_i > x \end{cases}
  2. 求和 $\sum_{i=1}^{n}$统计原始数据中不超过 x 的观测个数。
    ∑i=1n1{xi≤x}=不超过 x 的样本数\sum_{i=1}^{n} \mathbf{1}\{x_i \le x\} = \text{不超过 } x \text{ 的样本数}
  3. 归一化 $\frac{1}{n}$除以 n 得到经验分布函数在 x 处的值,即“数据中小于等于 x 的比例”。
    F^n(x)=#{i:xi≤x}n\hat{F}_n(x) = \frac{\#\{i: x_i \le x\}}{n}

实际应用

小张决定开连锁店:他请了 10 位“虚拟店长”,每位店长拿到一份不同的虚拟订单做经营推演,最后综合大家的判断来开店。这个思路在机器学习里有个响亮的名字——Bagging(自助聚合):对原始数据做 B 次 Bootstrap 抽样,每份样本训练一个基学习器,最终预测取平均或投票。

随机森林就是“Bagging + 随机特征选择”的代表作。每棵树都用一份不同的自助样本训练,树与树之间有差异,投票时才能互补。Bagging 的预测公式简洁而优雅:

除了集成,Bootstrap 还常被用来做模型选择:对两个候选模型分别估计准确率的置信区间,哪个更高且区间更窄就选哪个。10 位虚拟店长的集体智慧,通常比单个店长靠谱——这正是“三个臭皮匠顶个诸葛亮”在数据世界的写照。

f^bag(x)=1B∑b=1Bf^∗b(x)\hat{f}_{\mathrm{bag}}(x) = \frac{1}{B}\sum_{b=1}^{B}\hat{f}^{*b}(x)
这是 Bagging 的集成预测:B 个基学习器的预测取平均,得到最终输出。
  1. 基学习器 $\hat{f}^{*b}$第 b 份自助样本训练出来的模型,比如一棵决策树。
    f^∗b=训练(自助样本b)\hat{f}^{*b} = \text{训练}( \text{自助样本}_b )
  2. 求和 $\sum_{b=1}^{B}$把 B 个模型的预测结果全部加在一起。
    ∑b=1Bf^∗b(x)=f^∗1(x)+f^∗2(x)+⋯+f^∗B(x)\sum_{b=1}^{B}\hat{f}^{*b}(x) = \hat{f}^{*1}(x) + \hat{f}^{*2}(x) + \cdots + \hat{f}^{*B}(x)
  3. 平均 $\frac{1}{B}$除以 B 得到所有虚拟店长的平均判断,回归用均值、分类用投票。
    f^bag(x)=1B∑b=1Bf^∗b(x)\hat{f}_{\mathrm{bag}}(x) = \frac{1}{B}\sum_{b=1}^{B}\hat{f}^{*b}(x)

AI 应用场景

模型效果汇报与置信区间

阶段:模型评估

解决的问题:传统汇报只给一个准确率或 AUC 数字,决策者不知道这个数靠不靠谱。Bootstrap 通过对验证集样本反复重采样,给出指标的 95% 置信区间,让“92% 准确率”变成“92%,且 95% 概率落在 89%~95%”,一下子就立体了。

具体案例:风控团队上线前用 Bootstrap 估计 AUC 的置信区间,发现区间的下界只有 0.70,距离业务红线 0.72 很近,于是决定继续优化而不是盲目上线。

Bagging 集成与随机森林

阶段:模型训练

解决的问题:单棵决策树容易过拟合,预测方差大。Bootstrap 为每棵树提供一份不同的训练数据,树的多样性让集成投票既保留强预测力又显著降方差。

具体案例:信贷违约预测中,随机森林用 500 棵在 Bootstrap 样本上训练的决策树投票,AUC 比单棵决策树提升 8 个百分点,且线上波动明显变小。

特征重要性的可靠性评估

阶段:特征工程

解决的问题:特征重要性排序受样本扰动影响,单次算出的排序可能只是运气。用 Bootstrap 反复重采样并多次计算重要性,观察每个特征重要性的分布与置信区间,就能分辨哪些特征是“真稳定”,哪些是“碰巧重要”。

具体案例:CTR 预估项目中,对某特征做 200 次 Bootstrap 重要性估计,发现其 95% 区间横跨正负值,极不稳定,最终将该特征剔除,线上效果反而提升。

Python 演示

python24 行
import numpy as np  def bootstrap_ci(data, statistic=np.mean, n_boot=2000, alpha=0.05, seed=42):    # Resample with replacement and return bootstrap distribution and CI    rng = np.random.default_rng(seed)    n = len(data)    boot_stats = []    for _ in range(n_boot):        sample = rng.choice(data, size=n, replace=True)        boot_stats.append(statistic(sample))    boot_stats = np.array(boot_stats)    lo = np.percentile(boot_stats, 100 * alpha / 2)    hi = np.percentile(boot_stats, 100 * (1 - alpha / 2))    return boot_stats, lo, hi  if __name__ == "__main__":    day_orders = np.array([8, 9, 12, 11, 10, 14, 13, 7, 15, 10, 9, 11, 12, 10, 13, 8, 11, 10, 9, 12])    boot_stats, lo, hi = bootstrap_ci(day_orders)    print("raw mean: {:.2f}".format(day_orders.mean()))    print("bootstrap 95% CI: [{:.2f}, {:.2f}]".format(lo, hi))    print("bootstrap se: {:.2f}".format(boot_stats.std(ddof=1)))    print("unique ratio: {:.1%}".format(1 - np.exp(-1)))
目的:用 Bootstrap 有放回重采样,估计小张奶茶店日销量均值的 95% 置信区间,并输出自助分布的标准误与 0.632 法则验证。
  1. sample = rng.choice(data, size=n, replace=True)核心的有放回抽样:从 20 张订单中抽 20 次,允许重复,每次得到一个自助样本。
  2. lo = np.percentile(boot_stats, 100 * alpha / 2)取自助分布 2.5% 分位数作为置信区间下界,对应百分位法。
  3. np.percentile(boot_stats, 100 * (1 - alpha / 2))取 97.5% 分位数作为上界,两个分位数夹出 95% 区间。
  4. boot_stats.std(ddof=1)计算自助统计量的标准差,即标准误,衡量虚拟天销量的波动幅度。
  5. 1 - np.exp(-1)数值上等于 0.632,验证每个自助样本约覆盖六成原始数据。

常见误区

误区我觉得 Bootstrap 重采样很神奇,能从 20 个数据点里变出无穷多个新数据,甚至造出原始数据里没有的数值,这样就不用花钱收集数据了。

正解Bootstrap 只能对已有的观测值做“重新组合”,它不会改变数值本身。自助样本里的每个值都来自原始数据,取值范围永远不会超出原始数据的最大和最小。它造出的是“样本组合的多样性”,而不是“新数值”。就像自助餐只能从已有的菜品里反复取,厨房不会因为你多拿几次就变出新菜。

为何常见:很多人把“生成了很多个样本”误解为“生成了很多新数据”,忽略了有放回抽样的本质是重新抽样而不是生成新值。

误区既然数据不够,那我每次自助抽样多抽一些,比如原始数据有 20 条,我抽 100 条,样本大了估计肯定更准。

正解Bootstrap 的样本容量应当与原始数据量相同,这是它的定义,也是理论正确性的基础。把样本容量加大到超过 n,会让每个自助样本过度偏离真实分布,反而引入偏差。虚拟一天就该是 20 单,不能硬拼成 100 单来充胖。

为何常见:人们习惯性地把“样本量越大越好”这一直觉搬过来,忽略了 Bootstrap 的“等大”约束是经过理论推导的必要条件。

误区交叉验证和 Bootstrap 都是把数据分来分去,目的差不多,哪个顺手用哪个就行了,不用区分。

正解两者的分工完全不同。交叉验证通过互斥划分估计模型的泛化误差,侧重于“模型选哪个”;Bootstrap 通过有放回重采样估计统计量的分布,侧重于“指标有多准、多稳”。排班表和自助餐解决的问题不一样:排班表保证每个人公平值班,自助餐让同一份数据反复贡献经验。项目里常常两个都用,而不是二选一。

为何常见:两者都涉及多次数据划分,表面相似,导致初学者容易混淆它们各自要回答的问题。

误区只要跑够 10000 次 Bootstrap,得到的置信区间就一定准确,原始数据质量差也没关系。

正解Bootstrap 的可靠性高度依赖原始样本的代表性。如果原始数据本身有偏(比如 20 张订单全是熟客点的),无论重采样多少次,虚拟世界仍然是那个偏的。Bootstrap 能反映“样本内部的波动”,但无法补救“样本与总体的偏差”。它是在一个坏模板上反复复印,模板歪了,复印件不可能正。

为何常见:人们容易把“计算量大”等同于“结果准确”,忽略了统计方法对数据质量的底层假设。

面试题

Q1. Bootstrap 重采样的核心特点是?

单选题 · easy

  • A.无放回抽样,每个样本只出现一次
  • B.有放回抽样,同一观测可被多次抽中← 正确答案
  • C.生成全新数据点,扩展取值范围
  • D.每次抽取固定比例的全新数据

答案:B。Bootstrap 的灵魂是有放回抽样,每次抽完放回,所以同一个观测可以多次出现。A 是无放回抽样的特征,C 和 D 都误解了 Bootstrap 不会生成新数值的本质。

Q2. 在容量为 n 的 Bootstrap 自助样本中,某个原始数据点至少出现一次的概率约为?

单选题 · easy

  • A.约 63.2%← 正确答案
  • B.约 50%
  • C.约 36.8%
  • D.约 100%

答案:A。某个点一次都不被抽中的概率是 $(1-1/n)^n$,当 n 较大时约等于 $e^{-1} \approx 0.368$,取补得到至少出现一次的概率约 0.632。这也是 0.632 法则的由来。

Q3. 关于 Bootstrap 自助样本的容量,正确做法是?

单选题 · mid

  • A.越大越好,容量直接影响精度
  • B.设置为原始数据量的一半
  • C.与原始数据量保持一致← 正确答案
  • D.设置为原始数据量的两倍

答案:C。Bootstrap 的样本容量必须等于原始数据量 n。加大容量会让自助样本偏离真实经验分布,反而引入偏差;减小容量则丢失信息。这就像虚拟新一天就该是 20 单,不能随意增减。

Q4. 用百分位法构造 95% 置信区间,应取自助统计量的?

单选题 · mid

  • A.2.5% 和 97.5% 分位数← 正确答案
  • B.5% 和 95% 分位数
  • C.样本的最大值与最小值
  • D.均值的正负一个标准差

答案:A。95% 置信区间要覆盖中间 95% 的分布,左右各去掉 2.5%,因此取 2.5% 和 97.5% 分位数。5% 和 95% 只覆盖了 90%;最大最小值是极端点不是区间端点的稳定估计。

Q5. 下列哪些是 Bootstrap 方法的优点?

多选题 · mid

  • A.无需假设数据服从特定分布← 正确答案
  • B.小样本下可提供不确定性估计← 正确答案
  • C.总能创造原始数据中不存在的新值
  • D.适合估计统计量的置信区间← 正确答案

答案:ABD。Bootstrap 是非参数方法,不依赖正态等分布假设,可在小样本下给出不确定性估计,也是置信区间估计的常用工具。C 是常见误解——Bootstrap 只重组合,不生成新数值。

Q6. Bootstrap 与交叉验证的关键区别是?

单选题 · hard

  • A.交叉验证有放回,Bootstrap 无放回
  • B.Bootstrap 有放回,交叉验证互斥划分← 正确答案
  • C.两者都能生成新的数据点
  • D.两者完全相同无法区分

答案:B。Bootstrap 用有放回抽样让数据可重复出现,交叉验证则把数据切成互斥的 K 折,每个样本恰好进一次验证集。这个区别决定了它们各自适合回答“指标多稳”和“模型泛化如何”。

Q7. 在 0.632 自助法误差估计中,测试误差的权重是?

单选题 · hard

  • A.0.368
  • B.0.632← 正确答案
  • C.0.500
  • D.1.000

答案:B。0.632 自助法的公式是 $E_{0.632}=0.368 \bar{e}_{train}+0.632 e_{test}$。因为训练误差通常偏低,所以给更真实的袋外测试误差 0.632 的大权重,训练误差只给 0.368。

Q8. 关于 Bootstrap 的局限性,下列说法正确的是?

多选题 · hard

  • A.原始样本有偏时 Bootstrap 无法校正← 正确答案
  • B.Bootstrap 可以生成超出原始范围的新值
  • C.Bootstrap 区间依赖原始样本的代表性← 正确答案
  • D.Bootstrap 适合任意小的样本且永远有效

答案:AC。Bootstrap 的所有结论都建立在“原始样本能代表总体”的基础上,样本有偏时它无能为力,区间可靠性自然依赖样本代表性。B 和 D 都是对 Bootstrap 能力的过度神化。

Q9. Bagging(自助聚合)每次训练基学习器使用的数据来自?

单选题 · easy

  • A.原始数据的互斥子集
  • B.有放回抽取的自助样本← 正确答案
  • C.全新生成的合成数据
  • D.全部数据各训练一轮

答案:B。Bagging 的核心就是对原始数据做 Bootstrap 抽样,每份自助样本训练一个基学习器。它和交叉验证的互斥划分完全不同,互斥子集属于 K 折交叉验证的思路。

Q10. 下列哪些技术建立在 Bootstrap 思想之上?

多选题 · mid

  • A.随机森林模型← 正确答案
  • B.自助置信区间← 正确答案
  • C.标准 K 折交叉验证
  • D.Bagging 集成法← 正确答案

答案:ABD。随机森林是 Bagging 的扩展,Bagging 和自助置信区间都直接使用 Bootstrap 重采样。标准 K 折交叉验证基于互斥划分,与有放回思想无关。