使用训练测试确定要使用的最佳算法后的交叉验证?

数据挖掘 机器学习模型 训练 交叉验证
2022-02-28 17:25:05

我有兴趣在数据集上训练不同的算法并观察性能指标。目前,我的方法是在训练数据上训练不同的算法,然后在测试集上评估性能。然后,我使用GridSearch带有交叉验证的 a 来找到性能最佳模型的最佳超参数,并使用它们再次进行测试。

我对交叉验证有点困惑——这是正确的方法还是有办法/应该对所有模型进行交叉验证?

2个回答

主要问题是获得对性能的可靠估计。重要的是要考虑到这两个阶段(算法的选择和超参数调整)本身就是训练阶段,因此应该在新的测试集上评估生成的模型(选择之后,并且只有这个模型)。否则存在高估性能的风险,以防所选方法碰巧在测试集上更好。

最简单的方法是认为这都是参数调整的单个阶段(即,将算法视为参数)。在这种情况下,您应该将数据分成 3 组 A、B、C:

  1. 所有算法及其所有参数组合都在 A 上进行训练,然后在 B 上进行评估。
  2. 选择了最佳系统。然后在 A+B 上重新训练这个选定的算法+参数。最后,模型在 C 上进行评估。

步骤 1 可以用交叉验证代替。在这种情况下,只有两组:A 上的 CV,然后 B 上的选择和评估。

保持两个阶段分开通常需要多一层,即 4 组 A、B、C、D:

  1. 在 A 上训练所有算法,在 B 上评估它们。
  2. 选择最佳算法。通过在 A+B 上进行训练然后在 C 上进行测试来尝试该算法的所有参数组合。
  3. 选择最佳参数并在 A+B+C 上重新训练,然后在 D 上进行评估。

同样可以在步骤 1 或 2 或两者中使用 CV。在这种情况下,这将是嵌套的交叉验证,它有点复杂但原理相同。

应该使用交叉验证来寻找高性能算法和相关的超参数。如果您有足够的数据,请创建一个跨算法和相应超参数进行搜索的网格搜索。如果您没有足够的数据,请尝试随机搜索或更少的算法和超参数选项。

在算法、超参数和参数最终确定之后,您应该只查看一次测试。