我有兴趣在数据集上训练不同的算法并观察性能指标。目前,我的方法是在训练数据上训练不同的算法,然后在测试集上评估性能。然后,我使用GridSearch带有交叉验证的 a 来找到性能最佳模型的最佳超参数,并使用它们再次进行测试。
我对交叉验证有点困惑——这是正确的方法还是有办法/应该对所有模型进行交叉验证?
我有兴趣在数据集上训练不同的算法并观察性能指标。目前,我的方法是在训练数据上训练不同的算法,然后在测试集上评估性能。然后,我使用GridSearch带有交叉验证的 a 来找到性能最佳模型的最佳超参数,并使用它们再次进行测试。
我对交叉验证有点困惑——这是正确的方法还是有办法/应该对所有模型进行交叉验证?
主要问题是获得对性能的可靠估计。重要的是要考虑到这两个阶段(算法的选择和超参数调整)本身就是训练阶段,因此应该在新的测试集上评估生成的模型(选择之后,并且只有这个模型)。否则存在高估性能的风险,以防所选方法碰巧在测试集上更好。
最简单的方法是认为这都是参数调整的单个阶段(即,将算法视为参数)。在这种情况下,您应该将数据分成 3 组 A、B、C:
步骤 1 可以用交叉验证代替。在这种情况下,只有两组:A 上的 CV,然后 B 上的选择和评估。
保持两个阶段分开通常需要多一层,即 4 组 A、B、C、D:
同样可以在步骤 1 或 2 或两者中使用 CV。在这种情况下,这将是嵌套的交叉验证,它有点复杂但原理相同。
应该使用交叉验证来寻找高性能算法和相关的超参数。如果您有足够的数据,请创建一个跨算法和相应超参数进行搜索的网格搜索。如果您没有足够的数据,请尝试随机搜索或更少的算法和超参数选项。
在算法、超参数和参数最终确定之后,您应该只查看一次测试。