我不同意 Bootstrapping 通常优于使用单独的测试数据集进行模型评估。
首先,在这里区分模型选择和评估很重要。在“统计学习的要素”(1)中,作者将其表述如下:
模型选择:估计不同模型的性能以选择最佳模型。
模型评估:选择最终模型,估计其对新数据的预测误差(泛化误差)。
他们继续声明:
如果我们处于数据丰富的情况,解决这两个问题的最佳方法是将数据集随机分为三部分:训练集、验证集和测试集。训练集用于拟合模型;验证集用于估计模型选择的预测误差;测试集用于评估最终选择模型的泛化误差。理想情况下,测试集应保存在“保险库”中,仅在数据分析结束时取出。假设我们重复使用测试集,选择测试集误差最小的模型。那么最终选择的模型的测试集误差会低估真实的测试误差,有时甚至会大大低估。
与此一致,“机器学习 - 概率视角”(2)的作者写道:
通常我们将大约 80% 的数据用于训练集,将 20% 用于验证集。但是如果训练用例的数量很少,这种技术就会遇到问题,因为该模式没有足够的数据来训练,我们也没有足够的数据来对未来的性能做出可靠的估计。一个简单但流行的解决方案是使用交叉验证 (CV)
由于在模型选择中您正在比较不同的模型(给定技术甚至不同技术的不同超参数),因此预测误差估计的绝对水平并不那么重要。只要相对误差,即模型 A 与 B 的比较如何,被充分估计。相反,在评估最终模型时,您希望获得绝对预测误差的估计值。另请注意,在 Carlos Mougan 引用的文本中,作者写道
[...] 可以在这些实例上进行评估,而不需要单独的验证集。[...]”
即我们在这里谈论验证(模型选择)而不是测试(模型评估)。Cross-Validation 和 Bootstrapping 在模型选择(即估计验证误差)中更常见,但在模型评估(即估计测试误差)中不太常见。
总结一下:
- 当数据有限时,通常会应用交叉验证和引导
- 交叉验证和自举通常用于模型选择/验证错误的估计。它们在测试误差估计中不太常见。
然而,Bootstrapping 可用于估计验证甚至测试错误。至少有 3 种应用它的方法(我现在将提到“预测错误”,这可能意味着“验证错误”或“测试错误”,具体取决于您使用 Bootstrapping 的方式):
1. 简单的引导
你生产B通过随机选择为您的数据引导样本N(样本大小)重复的数据点。然后,您在每个 Bootstrap 样本上训练数据并计算整个数据集的预测误差。然后在所有 Bootstrap 样本中进行平均B. 由于预测误差是基于整个数据集,包括。Bootstrap 样本中的示例,这意味着训练数据也用于估计预测误差。这可能导致过度拟合。
2. 留一法引导
在这里,该方法类似于交叉验证:对于预测器fb^在 Bootstrap 样本上训练b预测误差是基于除 Bootstrap 样本中的示例之外的所有数据估计的b. (但是,这与交叉验证不同,因为 Bootstrap 样本是通过重复绘制产生的。)这种方式解决了过度拟合的问题,因为训练和预测误差估计是基于每个 bootstrap 样本的不同子数据集。
3. .632 引导程序
该方法使用 Leave-one-out Bootstrap 预测误差的线性组合errorleave-one-out和简单的训练错误errortraining:
error.632=0.368⋅errortraining+0.632⋅errorleave-one-out
注意0.632是绘制 Bootstrap 样本时数据点的概率(xn,yn)该 Bootstrap 样本中包含来自总体人口的数据。对这个等式的一个非常随意的解释是,您使用的估计值介于测试误差和留一法 Bootstrap 误差之间,而后者的权重更大。
有关更多详细信息,我建议阅读“统计学习的要素 - 数据挖掘、推理和预测”(1) 中的第 7.11 节。
(1)《统计学习的要素——数据挖掘、推理和预测》;哈斯蒂等人;第二版
(2)《机器学习——概率视角》;墨菲;第一版