当我没有测试集时如何交叉验证?

机器算法验证 机器学习 交叉验证
2022-03-29 08:29:20

情况:我有两个模型,拟合相同的数据。

目标:我想测量两个模型的样本外性能。

问题:我没有测试集,原始数据太小,无法将其分成训练批次和测试批次。所以我唯一的办法是模拟新的测试数据......但是说我从我的原始数据集中引导新数据。这并不是真正的“样本外”数据,因为它是通过我拟合的数据通过引导程序模拟的!事实上,我的“模拟测试数据”......与我的原始数据完全相同的可能性非零

那我该怎么办?

2个回答

由于数据集很小,您可以通过留一法交叉验证估计样本外错误/性能,并比较两个模型的 LOOCV 性能。

请注意,除了优点之外,LOOCV 也有其缺点:它的计算成本更高,并且性能指标的差异可能更大。但是,可以通过在分配所有类标签后计算性能并计算整个集合的性能来缓解这个问题。此外,我们最终不会有一个单一的模型。

您可以使用贝叶斯机器学习模型。您的预测分布向您展示了模型的准确性。如果您的模型过拟合,则预测会有很大的差异,因为集成的每个模型都不同地过拟合。当您有足够的数据时,分布非常窄,而当您有无限数据时,则等于非贝叶斯模型的预测。

您的模型的每个参数现在都是一个分布。根据模型的类型,它们甚至可以被解释。

获得贝叶斯模型的一种简单方法是通过贝叶斯自举。您可以通过为每个数据点使用不同的权重多次训练模型或使用诸如bayesian_bootstrap之类的包来做到这一点。权重必须从 Direchlet 分布(在这种情况下是多元均匀分布)中得出。