60 个样本重抽样 2000 次,均值估计的标准误 0.3987,理论值 3 除以根号 60 等于 0.3873, 对得上。但 95% 区间 [8.459, 10.015] 没盖住真实值 10——因为样本均值本身就是 9.232。
前几节都要切数据。 这一节讲一个不切分的办法:靠有放回重抽样造出很多份「假数据」,看统计量怎么波动。
一、做法只有一句话
从原样本里有放回地抽 n 个,得到一个和原样本一样大的新样本。算一遍你关心的统计量。 重复上千次,就得到这个统计量的一个分布。 有放回是关键。无放回抽样抽 n 个就是原样本本身,什么也没变。 有放回才会出现「某个样本被抽到两次、另一个一次都没抽到」的情况,这才有随机性。 这个分布的离散程度就是标准误——衡量「如果再采一次样,这个数会波动多少」。 它的用途:算置信区间、比较两个模型的差异是否显著、给没有解析公式的统计量(中位数、F1、 AUC)估误差。
二、实测对得上理论
Demo 从均值 10、标准差 3 的正态分布里抽了 60 个数,重抽样 2000 次。 自助法算出的均值标准误是 0.3987,理论值 3 除以根号 60 等于 0.3873,相差 3%。 两者对得上,说明自助法在这个有解析解的简单情形下是对的。 这也是验证实现有没有写错的最快办法——先用一个已知答案的统计量试一遍。 95% 区间是 [8.459, 10.015]。 中位数那组是 [7.995, 9.921],比均值组宽一点,符合预期(中位数的效率比均值低)。
三、那个没盖住真实值的区间
真实均值是 10,但 95% 区间 [8.459, 10.015] 只是勉强擦到上界。这看起来像自助法失败了,其实不是。 原因在样本本身:这 60 个数的均值是 9.232,比 10 低了 0.77。 一次抽样运气不好,抽到了一批偏小的数。 自助法只能告诉你「重抽样的波动有多大」(±0.4),救不了一次运气不好的抽样。 它评估的是「抽样误差」,不是「抽样偏差」。 这一点非常重要:置信区间不保证包含真值。 95% 的含义是「重复这个流程很多次,约 95% 的区间会包含真值」,不是「这一次的区间一定包含」。
四、副产品:袋外样本
每次重抽样抽 n 个,大约有 36.8% 的样本一次都没被抽到。 Demo 实测 200 次平均是 0.3667,理论值 1 减 1/e 等于 0.3679。 这些没被抽到的样本叫袋外样本,天然可以当验证集用——它们没参与训练,又来自同一个分布。 随机森林就是靠这个做「袋外估计」:不用额外切验证集,训练完顺手就能给出一个近乎无偏的性能估计。 这在数据少的时候特别值钱。 所以自助法不只是个统计工具,它还直接催生了一整类算法(Bagging、随机森林)。 下一节讲集成的时候还会用到它。
五、动手 Demo:自助法:标准误估准了,但区间没盖住真值
从均值 10、标准差 3 的正态分布抽 60 个数; 有放回重抽样 2000 次,记录每次的样本均值和中位数,算标准误和 95% 分位区间; 再实测袋外样本比例,和理论值 1 减 1/e 对比。
for i in range(B):
s = rg.choice(x, n, replace=True)
mus[i] = s.mean()
med[i] = np.median(s)
lo, hi = np.percentile(mus, 2.5), np.percentile(mus, 97.5)
实跑输出:
--------------------------------------------------------------------
自助法:重抽样能估出「这个数有多不准」
--------------------------------------------------------------------
真实分布 均值 10、标准差 3
样本 60 个,样本均值 9.232
重抽样次数 2000
均值估计的 95% 区间 [8.459, 10.015]
均值估计的标准误 0.3987(重抽样的标准差)
理论标准误 0.3873(3 除以根号 60)
中位数估计的 95% 区间 [7.995, 9.921]
自助法的做法只有一句:从原样本里有放回地抽 n 个,算一遍统计量,重复上千次。
抽出来的这些统计量,就近似于「如果再采一次样,这个数会怎么变」。它的离散程度就是标准误。
实测均值标准误 **0.3987**,理论值 3 除以根号 60 等于 **0.3873**,差 2.9%。两者对得上,说明自助法在这个简单情形下是对的。
但注意那个 95% 区间:[8.459, 10.015] 并**没有**盖住真实值 10。
原因不在自助法,在样本本身:这 60 个数的均值是 9.232,比 10 低了 0.77。自助法只能告诉你「重抽样的波动有多大」,救不了一次运气不好的抽样。
它的真正价值在于:理论公式不好推的时候(比如中位数、F1、AUC),自助法照样能给区间。中位数的理论标准误没有简单公式,但上面直接算出来了。
还有一个副产品:**袋外样本**。每次重抽样大约有 37%% 的样本没被抽到,这些样本天然可以作为验证集,不用额外切分。
袋外样本比例(实测 200 次平均) 0.3667
理论值 1 减 1/e = 0.3679
这个 0.3679 就是随机森林里「袋外估计」的基础。不用切验证集,就能对模型性能做一个近乎无偏的估计。
标准误 0.3987 对理论 0.3873,差 3%。 这个差距在 2000 次重抽样的蒙特卡洛误差范围内,可以接受。 区间没盖住 10,是因为样本均值 9.232 本身偏了 0.77,而区间半宽只有 0.78。 刚好擦边——这是运气问题,不是方法问题。 中位数的区间 [7.995, 9.921] 比均值区间宽,且下限低得多。 中位数对偏态更敏感,这一组样本恰好左偏了一点。 袋外比例实测 0.3667 对理论 0.3679,只差 0.0012。 这个数很稳定,跟样本量几乎无关——只要 n 够大,永远是 36.8%。
30 秒实验
- 把样本量从 60 改成 20,看重抽样标准误和理论值还对不对得上。
- 把重抽样次数从 2000 改成 200,看区间的边界抖多少。
- 想一想:为什么袋外样本比例恒等于 1 减 1/e,和样本量无关?
常见误区
- 「95% 置信区间一定包含真值」——它的含义是重复多次有 95% 包含,不是这一次一定包含。
- 「自助法能修正偏差」——它估的是抽样误差,救不了运气不好的一次抽样。
- 「必须无放回抽样」——无放回抽 n 个就是原样本本身,什么也没变。
自测三问(点开对答案)
1. 自助法的核心操作是什么? —— 从原样本里有放回地抽 n 个,算统计量,重复上千次得到分布。 2. 为什么必须是有放回? —— 无放回抽 n 个等于原样本本身,没有随机性,也就没有分布。 3. 袋外样本比例为什么恒为 36.8%? —— 每个样本一次都没被抽到的概率是 (1-1/n)^n,n 大时趋于 1/e,所以留下约 36.8%。评估和诊断都讲完了。下一节进优化:超参数该怎么搜。
- ☐ (本节完,下一节 9.2.5 模型调参:找到最优超参数组合,提高模型性能)