假如你是餐厅主厨,熬了一大锅汤。你没法把整锅喝光来确认咸淡,只能舀起一小勺尝一尝——这一勺,就是你的“样本数据”。问题来了:万一这一勺刚好是盐没化开的角落呢?万一运气好,舀到了最淡的那一处?如果手里永远只有这一锅汤,你该怎么回答“这锅汤到底有多咸”?Bootstrap 的做法很朴素:把这一勺倒回锅里,用力搅匀,再舀一勺,再倒回去,再搅匀……反反复复地舀。每勺的咸度略有不同,把这些咸度记录下来,你就能看出“咸度”大致落在哪个范围,范围有多稳定。这就是 Bootstrap 的核心:无法获得更多数据时,就从手头唯一的一勺样本里反复有放回地抽取,用“重复”模拟“不断从总体取样”的效果,让不确定性自己显形。

岗位关联

掌握 Bootstrap,你就能在小样本、高不确定性的场景下给出带置信区间的模型性能报告,从“报一个数字”升级为“报一个靠谱的数字”,这是数据科学家评估模型可信度的基本功。

目录
  1. 可视化演示
  2. 重采样原理
  3. 置信区间估计
  4. 偏差校正
  5. 交叉验证对比
  6. 模型评估应用
  7. 实践操作步骤
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

通过有放回重采样构建统计量分布,估计置信区间并校正偏差,直观展示Bootstrap方法的完整流程。

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

有放回重采样 从N个原始样本中有放回抽取N个样本组成Bootstrap样本 重复B次得到B个Bootstrap样本用于统计量分布估计 每个Bootstrap样本约63.2%原始样本被包含,36.8%为袋外样本OOB

重采样原理

你面前只有一锅汤,汤里总共 40 颗盐粒,你不可能喝光整锅。聪明的做法是:舀一勺,记下咸度,倒回去,使劲搅匀,再舀。每一次“舀—倒回—搅匀”就是一次重采样。注意:因为倒回去了,同一颗盐粒可能被反复舀到,也可能整轮都躲在汤底没露面——这就是“有放回抽样”。

在统计里,那锅汤是“总体”,你手里的一勺观测值 X₁ 到 Xₙ 是唯一的数据。Bootstrap 不假设总体服从什么分布,而是把样本自身的“经验分布”当作总体的替身:每个观测值出现的概率都是 1/n。每次从经验分布中有放回地抽 n 个值,构成一个“自助样本”,重复 B 次,就模拟出“如果再从总体里取样会看到什么”。

因为每次抽取概率都是 1/n 且相互独立,某个样本在一轮 n 次抽取中一次都没被抽中的概率是 (1 − 1/n)ⁿ。n 越大越接近 e⁻¹ ≈ 0.368,也就是说每轮自助样本中大约只有 63.2% 的原始样本出现,剩下 36.8% 像躲在汤底的盐粒,构成了天然的“留出验证集”——这正是后面偏差校正的伏笔。蒙特卡洛思想则贯穿始终:用大量随机重复代替解析推导,B 通常取 1000 次以上。

每舀一勺,你都在用“这一锅”重新演绎“如果还有更多汤”的场景。Bootstrap 的魔力在于:数据不会变多,但你能在唯一的一勺汤里翻来覆去地品尝出不确定性的形状。

P(样本未被抽中)=(1−1n)n≈e−1≈0.368P(\text{样本未被抽中})=\left(1-\frac{1}{n}\right)^{n}\approx e^{-1}\approx 0.368
有放回抽 n 次,某个特定样本一次都不出现的概率约为 36.8%,因此每轮自助样本大概包含六成三的原始样本。
  1. 单次未抽中概率有放回抽取时,每次从 n 个值中随机取一个,某个特定样本被落选的概率是 1 减去 1/n。
    1−1n1-\frac{1}{n}
  2. n 次独立抽取全部落选因为每次抽取相互独立,连续 n 次都没碰到它的概率是每次落选概率连乘 n 次。
    (1−1n)n\left(1-\frac{1}{n}\right)^{n}
  3. 极限逼近常数n 越大,该式越接近自然常数 e 的负一次幂,这就是“约 36.8% 样本缺席”的来源。
    e−1≈0.368e^{-1}\approx 0.368

置信区间估计

你连续舀了 1000 勺,记下每勺的咸度。这些咸度当然不会完全一样——有的咸一点,有的淡一点。你会想知道:这锅汤的咸度该报“6 分”还是“6 分上下浮动 0.5”?把这 1000 个数字画成直方图,中间鼓起、两边收窄的形状本身就在回答问题。

对每个自助样本算同一个统计量(均值、准确率、回归系数……),得到 B 个统计量。它们的散布程度就是该统计量“抽样不确定性”的度量。Bootstrap 标准误直接把这些统计量的标准差算出来;百分位法则更朴素——排序后直接取 α/2 和 1−α/2 位置的值作为区间端点。

B=1000 时,95% 百分位区间就是排序后第 25 个和第 975 个统计量。若统计量分布近似正态,标准误法同样适用;分布偏斜时百分位法更稳健。更高级的 BCa 法进一步修正偏差和偏度,但核心不变:用大量重采样模拟抽样分布,再从中切出区间。

汇报“咸度约 6 分,95% 置信区间 [5.6, 6.5]”——这比拍胸脯说“就是 6 分”诚实得多,因为菜品评审需要知道你的舌头到底有多靠谱。

SEB(θ^)=1B−1∑b=1B(θ^∗b−θˉ∗)2\mathrm{SE}_B(\hat{\theta})=\sqrt{\frac{1}{B-1}\sum_{b=1}^{B}\left(\hat{\theta}^{*b}-\bar{\theta}^{*}\right)^2}
这个公式算的是 B 轮重采样统计量的“离散程度”,也就是 Bootstrap 给出的标准误;用它乘上相应分位数就能构造置信区间。
  1. B 轮重采样对原始样本做 B 次有放回抽样,每轮计算一次统计量,得到 θ¹ 到 θ\^B。
    θ^∗1,θ^∗2,…,θ^∗B\hat{\theta}^{*1}, \hat{\theta}^{*2}, \ldots, \hat{\theta}^{*B}
  2. 均值中心把所有重采样统计量取平均,作为分布的中心,相当于“平均咸度”。
    θˉ∗=1B∑b=1Bθ^∗b\bar{\theta}^{*}=\frac{1}{B}\sum_{b=1}^{B}\hat{\theta}^{*b}
  3. 离差平方每个统计量与中心差值的平方,反映“每勺咸度”偏离“平均咸度”的程度。
    (θ^∗b−θˉ∗)2\left(\hat{\theta}^{*b}-\bar{\theta}^{*}\right)^2
  4. 平均后开方用 B−1 做分母近似无偏方差,再开平方,得到 Bootstrap 标准误。
    1B−1∑b=1B(θ^∗b−θˉ∗)2\sqrt{\frac{1}{B-1}\sum_{b=1}^{B}\left(\hat{\theta}^{*b}-\bar{\theta}^{*}\right)^2}

偏差校正

有个隐患:你的勺子总在汤面刮,而汤底的调料更浓,于是每勺咸度都系统性偏低——这不是随机波动,而是“勺子的偏见”。训练误差就是这把偏心的勺子:模型在训练数据上评估自己,永远自我感觉良好。

用自助样本训练模型时,如果直接在自助样本上评分,误差会因“样本内评估”而过分乐观;如果用没被抽中的约 36.8% 样本(袋外样本)评分,又因样本量偏少且模型没见过这些数据,误差往往偏高。真实误差应该介于两者之间。

.632 估计器给出一个实用的加权折中:0.368 × 训练误差 + 0.632 × 袋外误差。其中 0.632 正是 1 − e⁻¹,对应样本平均被抽中的概率。当模型过拟合严重时,.632 仍会低估误差,于是 .632+ 引入“相对过拟合率”进一步放大袋外误差的权重。

好厨师知道自己勺子的毛病,会主动把品味结果“校正”后再写进菜谱。Bootstrap 的偏差校正也一样:先承认训练评估在撒谎,再给这个谎言打折。

Err.632=0.368×errtrain+0.632×errboot\mathrm{Err}_{.632}=0.368\times\mathrm{err}_{\mathrm{train}}+0.632\times\mathrm{err}_{\mathrm{boot}}
.632 估计器把偏乐观的训练误差和偏悲观的袋外误差按比例混合,得到一个更接近真实的误差估计。
  1. 训练误差 err_train模型在自助样本上自我评估的误差,乐观偏低。
    errtrain\mathrm{err}_{\mathrm{train}}
  2. 袋外误差 err_boot模型在没被抽中的约 36.8% 样本上的误差,略偏高。
    errboot\mathrm{err}_{\mathrm{boot}}
  3. 权重 0.632来自每轮样本被抽中的平均比例 1 − e⁻¹,代表“自助样本与原始数据重叠”的程度。
    0.632≈1−e−10.632 \approx 1-e^{-1}
  4. 加权求和0.368 × 训练误差 + 0.632 × 袋外误差,两者互补折中出校正值。
    0.368×errtrain+0.632×errboot0.368\times\mathrm{err}_{\mathrm{train}}+0.632\times\mathrm{err}_{\mathrm{boot}}

交叉验证对比

除了“舀—倒回—搅匀”,厨师还有别的品汤策略:把整锅汤提前分装成 5 个小碗,每碗轮流当“待检验品”,其余 4 碗用来定标准——这就是交叉验证的饭桌版本。

K 折交叉验证把数据均分 K 份,轮流取 1 份作验证、其余 K−1 份训练,误差取 K 次平均;留一法(LOOCV)是 K=n 的极端:每次只用 1 个样本验证。Bootstrap 则完全不同:每次“训练碗”与“验证碗”重叠,靠有放回抽样天然产生约 36.8% 的袋外样本。

差异是本质的——交叉验证每个样本恰好被验证一次,方差较小、近似无偏,适合模型选择;Bootstrap 的重复抽样天然支持“多次估计 + 置信区间”,能算出“准确率 85% ± 2.3%”,但每次验证集大小随机且与训练集有重叠,偏差稍大。小数据集上 Bootstrap 常比 K 折更稳,代价是计算量更大。

没有绝对更好的品汤法:急着定菜单用交叉验证,想回答“我的判断有多准”用 Bootstrap。两种勺子搭配使用,才是后厨老手的做法。

LOOCV=1n∑i=1nerri\mathrm{LOOCV}=\frac{1}{n}\sum_{i=1}^{n}\mathrm{err}_i
留一交叉验证是 K=n 的特例:每次留一个样本当验证集,把所有误差平均,得到整体误差。
  1. 逐样本留一每次留出第 i 个样本作验证,其余 n−1 个训练,得到一次预测误差。
    erri=仅第 i 个样本的预测误差\mathrm{err}_i = \text{仅第 }i\text{ 个样本的预测误差}
  2. 平均所有位置n 个误差的算术平均,就是留一交叉验证的总误差。
    1n∑i=1nerri\frac{1}{n}\sum_{i=1}^{n}\mathrm{err}_i

模型评估应用

现在你不是为自己尝汤,而是为挑剔的食客上菜。你想知道:“这道菜客人打分的误差大概是多少?”一次性评估不够,你需要带上“这次评估可不可信”的证据。Bootstrap 正是给评估结果装上误差棒的工具。

对每个自助样本:①有放回抽出 n 个样本;②训练模型;③在袋外数据上算准确率或误差;④重复 B 轮后得到 B 个性能指标。报告时给出均值作为点估计,给出百分位区间作为不确定性范围。小样本(几百条数据)而模型又复杂时,传统留出法一次划分的结果很飘,Bootstrap 通过多次重采样显著稳定。

这实际是“性能估计的元算法”:任何可计算的指标——准确率、AUC、回归 MAE——都能塞进这个框架。模型选择方面,Bootstrap 也能辅助比较两个模型的差异是否显著:直接看两个模型 Bootstrap 性能差值的分布,若 95% 区间不含 0,则差异显著。

给食客端菜时,你会说“这道菜我们测试了 1000 次,满意率 90%,误差棒 ±2%”。加了误差棒的汇报,在业务面前才有说服力。

Acc^boot=1B∑b=1BAcc(f∗b)\hat{\mathrm{Acc}}_{\mathrm{boot}}=\frac{1}{B}\sum_{b=1}^{B}\mathrm{Acc}\left(f^{*b}\right)
Bootstrap 性能估计 = 各轮袋外准确率的平均,它把单次评估变成了一组可统计的分布。
  1. 自助训练第 b 轮在自助样本上训练出模型 f*\^b。
    f∗b=第 b 轮自助样本上训练的模型f^{*b} = \text{第 } b \text{ 轮自助样本上训练的模型}
  2. 袋外评分在未被抽中的袋外样本上计算该模型的准确率。
    Acc(f∗b)\mathrm{Acc}(f^{*b})
  3. 求平均B 轮的准确率取平均,得到模型整体性能的点估计。
    1B∑b=1BAcc(f∗b)\frac{1}{B}\sum_{b=1}^{B}\mathrm{Acc}\left(f^{*b}\right)

实践操作步骤

说了这么多,回到后厨把流程写成熟练工的 checklist:搅汤、舀、记、倒回、再来。四步成菜,每一步都不能省。

标准流程四步:①从原始数据有放回抽取 n 条;②在自助样本上训练模型;③在袋外样本上评估;④重复 B 次并聚合。聚合方式依目标而定:要标准误就算标准差,要区间就用百分位,要误差估计就用 .632。

点估计取 B 轮统计量的平均。汇报模板建议:均值 ± 标准误,或“点估计 + 95% 百分位区间 + B 轮直方图”。实操注意:固定随机种子保证可复现;B 取 200~2000 足够,再大边际收益递减;类别不平衡数据可按类别分别重采样。

熟记这套“舀汤工序”后,你在任何数据集上都能像主厨一样笃定地回答:“这个评估稳不稳?稳,而且我知道它有多稳。”

θ^boot=1B∑b=1Bθ^∗b\hat{\theta}_{\mathrm{boot}}=\frac{1}{B}\sum_{b=1}^{B}\hat{\theta}^{*b}
最终的点估计是 B 轮重采样统计量的算术平均,代表“反复品尝”后的综合判断。
  1. 每轮统计量第 b 轮重采样计算出统计量 θ*\^b,可能是均值、误差或准确率。
    θ^∗b\hat{\theta}^{*b}
  2. 跨轮取平均B 轮结果求算术平均,得到 Bootstrap 点估计。
    1B∑b=1Bθ^∗b\frac{1}{B}\sum_{b=1}^{B}\hat{\theta}^{*b}

AI 应用场景

小样本医学影像分类的性能报告

阶段:模型评估与决策报告

解决的问题:罕见病影像数据往往只有几百张,单次留出法划分的结果波动很大,无法向临床合作方证明“模型到底稳不稳”。Bootstrap 在几百张图上重复采样上百次,输出准确率与 AUC 的均值及 95% 置信区间,让评估结论可量化、可复核。

具体案例:某团队训练糖尿病视网膜病变分级模型,训练集仅 400 张眼底图。用 Bootstrap(B=500)估计 AUC:点估计 0.91,95% 区间 [0.87, 0.94],而单次留出法的 AUC 在 0.89 到 0.93 之间随机飘动。报告附上重采样直方图后,临床方接受了“模型性能可靠”的结论。

模型上线前的性能波动体检

阶段:上线前验证与风险控制

解决的问题:风控模型上线前,业务方问“准确率 90% 是运气还是实力?”传统做法只给一个数,无法回答。Bootstrap 给出性能波动范围:若 90% 的 95% 区间是 [88%, 92%],说明稳定;若是 [70%, 98%],说明数据或模型有问题,需排查后再上线。

具体案例:某信贷风控团队对申请评分卡模型做 200 次 Bootstrap 重评估,发现 KS 值区间跨度从 0.05 到 0.18,远大于预期。进一步排查发现抽样样本存在时间分布偏移,团队修正采样窗口后重新评估,区间收窄至 [0.11, 0.15],模型顺利上线。

特征重要性的不确定性估计

阶段:特征工程与模型解释

解决的问题:树模型输出的特征重要性只是点估计,业务方常追问“这个排序可信吗?”用 Bootstrap 对特征重要性做重采样估计,可给每个特征的重要性打分附上置信区间,避免被单次排序的运气误导。

具体案例:推荐团队用梯度提升树做点击率模型,对 3000 条样本做 100 次 Bootstrap 重训练,计算每个特征重要性的 95% 区间。发现“用户年龄”重要性区间 [0.08, 0.22] 与“价格敏感度”[0.09, 0.20] 重叠,说明两者统计上难分高下,团队据此调整了特征取舍决策。

Python 演示

python50 行
import numpy as np  def bootstrap_ci(data, statistic=np.mean, n_bootstrap=1000, alpha=0.05, seed=42):    """有放回重采样, 返回统计量分布与百分位置信区间."""    rng = np.random.default_rng(seed)    n = len(data)    boot_stats = np.empty(n_bootstrap)    for b in range(n_bootstrap):        sample = rng.choice(data, size=n, replace=True)        boot_stats[b] = statistic(sample)    lo = np.percentile(boot_stats, 100 * alpha / 2)    hi = np.percentile(boot_stats, 100 * (1 - alpha / 2))    return boot_stats, (lo, hi)  def err_632(model, X, y, n_bootstrap=100, seed=0):    """用 .632 估计器校正训练误差的乐观偏差."""    rng = np.random.default_rng(seed)    n = len(X)    train_errors = []    boot_errors = []    for _ in range(n_bootstrap):        idx = rng.choice(n, size=n, replace=True)        model.fit(X[idx], y[idx])        train_errors.append(1.0 - model.score(X[idx], y[idx]))        oob = np.ones(n, dtype=bool)        oob[idx] = False        if oob.sum() > 0:            boot_errors.append(1.0 - model.score(X[oob], y[oob]))    err_train = np.mean(train_errors)    err_boot = np.mean(boot_errors)    return 0.368 * err_train + 0.632 * err_boot  if __name__ == "__main__":    from sklearn.tree import DecisionTreeClassifier     rng = np.random.default_rng(7)    X = rng.normal(size=(60, 2))    y = (X[:, 0] + 0.5 * X[:, 1] + rng.normal(size=60)) > 0    model = DecisionTreeClassifier(max_depth=3, random_state=1)     toy = rng.normal(size=40)    boot_stats, ci = bootstrap_ci(toy, seed=1)    print("Bootstrap 均值: %.3f" % boot_stats.mean())    print("95%% 置信区间: [%.3f, %.3f]" % ci)     e632 = err_632(model, X, y)    print(".632 误差估计: %.3f" % e632)
目的:演示两个最常用的 Bootstrap 操作——对任意统计量构造置信区间,以及对模型误差做 .632 偏差校正。
  1. rng = np.random.default_rng(seed)固定随机种子,让每次运行结果可复现。
  2. sample = rng.choice(data, size=n, replace=True)核心一行:有放回地抽取 n 个样本。
  3. boot_stats[b] = statistic(sample)每轮算一个统计量,攒成分布。
  4. lo = np.percentile(boot_stats, 100 * alpha / 2)百分位法求区间下界。
  5. idx = rng.choice(n, size=n, replace=True)对样本索引做有放回抽样。
  6. oob[idx] = False没被抽中的位置就是袋外样本。
  7. 0.368 * err_train + 0.632 * err_boot.632 估计器的加权校正公式。

常见误区

误区Bootstrap 是不是要从更大的总体中再抽一批新数据?如果我只有 100 条数据,怎么“生成”1000 条新数据?

正解Bootstrap 从不创造新数据。它只做一件事:在你已有的 100 条数据上反复“有放回地抽 100 条”。被重复抽中的样本可以出现多次,没被抽中的就缺席。好比只有一锅汤,你反复舀同一锅,汤不会变多,但你能统计出咸度的波动范围。

为何常见:大家习惯“样本来自总体”的思维,容易把重采样误当成“额外采样”,混淆了“从总体取样”和“从样本中重取样”。

误区B=10000 一定比 B=1000 好,反正只是让计算机多跑一会儿。

正解B 增大只让蒙特卡洛近似误差变小,但统计精度上限由原始样本量 n 决定。n=30 时,B 从 1000 增到 10000,置信区间几乎不变。好比同一锅汤你舀 10000 勺,结论不会比舀 1000 勺更接近整锅真实咸度——因为汤还是那锅汤。

为何常见:直觉上“重复越多越精确”很自然,但没意识到精度瓶颈在原始样本量,而不是模拟次数。

误区既然 Bootstrap 又给误差又给区间,K 折交叉验证还有存在必要吗?

正解两者解决的问题有重叠但不相同。交叉验证每个样本恰好被验证一次,评估方差小、近似无偏,更适合模型选择;Bootstrap 每轮的验证集与训练集有重叠、大小随机,偏差略大,但胜在能构造置信区间、小样本下更稳。厨师既需要“分碗品尝”也需要“反复舀汤”,两者互补。

为何常见:看到 Bootstrap 输出更丰富(区间 + 直方图),容易高估它的全面性,忽略评估偏差和计算成本。

误区replace=True 是不是先把数据复制 10 份再抽?那训练集不就被污染了吗?

正解有放回不是预先复制。每次抽取都是独立的等概率抽样,同一原始样本可能多次出现、也可能不出现,完全由随机决定。期望上每轮约 63.2% 的样本出现,具体是哪 63.2% 每一轮都不同。这恰恰模拟了“换一批同分布数据会怎样”的不确定性。

为何常见:把“有放回”理解为“堆料”,忽略了独立重复抽样的随机组合本质。

面试题

Q1. Bootstrap 重采样的核心特征是什么?

单选题 · easy

  • A.抽取后不再放回样本
  • B.抽一个样本后放回再抽← 正确答案
  • C.从完整总体中直接抽取
  • D.按类别比例分层抽取

答案:B。Bootstrap 的关键就是有放回抽样(replace=True):每次从原始样本中等概率抽取一个,抽完放回去,下次还能再抽到它。A 是无放回抽样,C 是从总体抽样,D 是分层抽样,都不是 Bootstrap。

Q2. 一个大小为 n 的 Bootstrap 样本中,不同原始样本的比例约为?

单选题 · easy

  • A.约占百分之三十六点八
  • B.约占百分之五十
  • C.约占百分之六十三点二← 正确答案
  • D.约占百分之九十九

答案:C。某个样本在 n 次独立抽取中一次都没被抽中的概率是 (1−1/n)ⁿ,当 n 较大时约等于 e⁻¹ ≈ 0.368。因此被抽中的比例约 1−0.368 = 63.2%。36.8% 是“未被抽中”的比例,50% 和 99% 都没有理论依据。

Q3. Bootstrap 重采样的关键参数是哪个?

单选题 · easy

  • A.隐藏层神经元的数量
  • B.重采样次数 B 的大小← 正确答案
  • C.梯度下降的学习速率
  • D.网络的正则化系数

答案:B。B 控制蒙特卡洛模拟的轮数,是 Bootstrap 的核心参数。神经元数量、学习率、正则化系数都是神经网络训练的超参数,与重采样方法无关。

Q4. 若原始样本量为 30,Bootstrap 重采样得到的样本量通常是多少?

单选题 · mid

  • A.固定为十个样本
  • B.固定为二十个样本
  • C.与原样本量同为三十个← 正确答案
  • D.由用户自定义个数

答案:C。Bootstrap 每次重采样的样本量与原样本量相同,这样才能“模拟一次完整的取样实验”。固定为 10 或 20 会改变统计量的分布形状,与 Bootstrap 定义不符。

Q5. 关于 .632 估计器的说法,正确的有?

多选题 · mid

  • A.组合训练误差与自助误差← 正确答案
  • B.权数零点六三二来自抽样率← 正确答案
  • C.零点三六八为训练误差权重← 正确答案
  • D.该估计器不需要训练误差

答案:ABC。.632 估计器 = 0.368 × 训练误差 + 0.632 × 袋外误差。0.632 ≈ 1−e⁻¹ 是样本平均被抽中的概率,剩余 0.368 作为训练误差的权重。D 说不需要训练误差,与公式矛盾,错误。

Q6. Bootstrap 相比留一交叉验证的主要优势是?

单选题 · hard

  • A.计算开销总是更小
  • B.能估计统计量置信区间← 正确答案
  • C.完全不需要随机抽样
  • D.无需假设数据同分布

答案:B。Bootstrap 靠重复抽样能构造统计量的分布,从而给出置信区间;LOOCV 只产出单一误差估计。计算上 Bootstrap 通常更贵而非更小,它也依赖随机抽样并需要数据同分布假设。

Q7. Bootstrap 在模型评估中的典型应用有哪些?

多选题 · mid

  • A.估计模型精度的方差大小← 正确答案
  • B.小样本下获得可靠性能估计← 正确答案
  • C.构造精度指标的置信区间← 正确答案
  • D.替代所有特征选择方法

答案:ABC。Bootstrap 既能估计精度方差,又能构造置信区间,在小样本下提供更稳定的性能估计。但它不会替代特征选择,D 过于绝对,属于错误选项。

Q8. 偏差校正主要解决什么问题?

单选题 · hard

  • A.训练误差低估真实误差← 正确答案
  • B.测试误差总高于训练误差
  • C.学习率过高导致不收敛
  • D.梯度消失导致训练停滞

答案:A。模型在训练集上评估自己会显得“太完美”,即训练误差系统性低于真实误差,这就是乐观偏差。偏差校正(如 .632 估计器)就是给这种乐观打折。C 和 D 是神经网络训练问题,与偏差校正无关。

Q9. 用百分位法求 95% 置信区间,B=1000 次重采样统计量排序后,区间端点取自哪两个位置?

单选题 · extreme

  • A.第二十五位与第九百七十五位← 正确答案
  • B.第五十位与第九百五十位
  • C.第五位与第九十五位
  • D.第一位与第九百九十九位

答案:A。95% 百分位区间的下界取 1000 × 0.025 = 第 25 个统计量,上界取 1000 × 0.975 = 第 975 个。B 对应 90% 区间的位置,C 是 90% 且位置计算错误,D 是极值范围而非置信区间。

Q10. 关于 Bootstrap 与 K 折交叉验证的对比,正确的有?

多选题 · hard

  • A.K 折中每个样本只验证一次← 正确答案
  • B.自助样本含约六成三的不同样本← 正确答案
  • C.Bootstrap 易构造置信区间← 正确答案
  • D.交叉验证完全不用随机性

答案:ABC。K 折把数据分成 K 份,每个样本恰好出现在一次验证集中;Bootstrap 样本平均含约 63.2% 的不同原始样本;Bootstrap 的重复抽样天然支持置信区间。但 K 折的划分离散也有随机性,D 说“完全不用随机性”是错误的。