假设我有一个小而固定的测试集的分类问题。如果我训练一个分类器并报告这个测试集的准确度,我知道这个估计值有很大的方差。引导测试集以减少准确度估计的方差是否有意义?
自举测试集?
我无法想象操纵你的测试集会导致更多的事情,而不是欺骗自己,你的结果比现实中的要好。
交叉验证和测试你的结果在看不见的数据上的想法是近似你的模型将应用于一些未来的未知数据的情况。这种近似值可能更好或更差,具体取决于您拥有的数据与未来数据的相似程度。
bootstrap 的想法是您从数据中采样的方式与从总体中采样的方式相同,因此可以近似采样过程并估计由它引起的可变性。首先要注意的是,如果您拥有的数据与未来的数据不相似,这样的过程不会让您了解任何可能的性能。其次,采样应该模仿采样过程,所以不要重新采样你的测试集,你应该做多个随机分割来训练和测试集(即使用 k 折交叉验证)。
最后,bootstrap 是为估计可能的变异性而设计的,而不是为了纠正它。Bradley Efron 本人不鼓励使用这种引导程序。完全不同的故事是引导对训练集重新采样,然后聚合结果,即使用装袋——这将有助于减少预测的方差。
我假设您还有一个(更大的)训练集,并且训练集和测试集在特征和目标变量之间具有相同的关系(没有显着差异)。然后:不,引导您的测试集并考虑结果测试集的性能很可能没有帮助。
您可以使用您的训练数据来选择特征、训练和评估不同的模型类型和超参数。从这些结果中,您选择了一个“最适合”工作的模型。这是您应该在测试集上评估一次,以确保一切正常。使用这种设置,拆分测试集不再带来好处:如果在引导期间不重用样本,您只会得到“子结果”,然后将其平均为一个标量结果(从而导致粒度更小),或者您会带替换的引导程序,只有很少的分区会偶然导致更好或更差的结果(并且在无限数量的回合中会再次给您非常相似的结果)。
如果你真的被一个非常小的测试集困住了,而测试性能是唯一重要的事情(为什么会这样?你的目标是泛化,对吧?),问题归结为测试数据在多大程度上代表了真实的应用案例数据 - 因为很少有样本可能太少而无法对现实世界的表现进行任何良好的估计。如果您认为这对您的情况可能是正确的,那么无论如何都可能需要获取/询问更多测试数据。
您正在尝试估计 MSE。您有“n”个点,所有这些点都是 MSE 的无偏估计。即使您继续重新采样和平均,您也无法获得比测试集中已有的更有效的 MSE 估计量。
这类似于抽取 10 个样本并根据样本平均值估计总体均值 - 您无法做出比该样本更(无偏)有效的估计量。