k-fold 交叉验证是否比将数据集拆分为训练和测试数据集以防止过度拟合更有效?

人工智能 机器学习 比较 过拟合 交叉验证 k-fold-cv
2021-10-22 02:54:57

我想防止我的模型过度拟合。我认为 k 折交叉验证(因为它每次都对不同的数据集执行此操作)可能比将数据集拆分为训练和测试数据集以防止过度拟合更有效,但一位同事(在 ML 方面几乎没有经验)说也就是说,为了防止过度拟合,70/30% 分割比 k 折交叉验证表现更好。在我看来,k-fold 交叉验证提供了一种可靠的方法来测试模型的性能。

k-fold 交叉验证是否比将数据集拆分为训练和测试数据集以防止过度拟合更有效?我不关心计算资源。

3个回答

就完整性和泛化性而言,K 折交叉验证可能是首选:您确保系统已经看到完整的数据集进行训练。然而,在深度学习中,由于时间和功率限制,这通常是不可行的。它们都可以使用,没有一个比另一个更好这实际上取决于具体情况、数据集的大小以及可用的时间和硬件。请注意,过度拟合可以(部分)通过诸如 dropout 之类的东西来补救。

公平地说:与你的同事讨论这个问题很好,但通常没有一个正确的答案。如果你真的想要证据,你可以测试它并比较它们。但在性能方面(即模型的预测能力),差异会很小。

纯粹就过度拟合而言,假设你训练两者的时间相等,70/30 可能更好,但性能不会很好。不训练 %30 的数据会使训练和测试结果同样糟糕(在我看来)。但它不会过拟合,这是肯定的。交叉验证(我假设您想到的是 90/10)将需要很长时间,因此没有足够的时间进行训练,并且与 70/30 相比,它可能会过度拟合,但它会看到所有一次训练 %90 个样本,很有可能它会训练得更好。因此,在一天结束时,它会过度拟合更多但性能更好。

如果您要问整体、性能和过拟合哪个更好,我说这取决于您的数据集的大小。如果您有数百万个样本,您甚至可以使用 98/1/1 进行训练、测试和验证,并且仍然可以

编辑:多考虑一下,即使时间不是问题,情况也大致相同。但是通过交叉验证,您将更确定地了解模型在新数据上的性能。

如果使用得当,这两种方法都很好。根据经验,当训练时间不是问题时,如果您的数据多于模型中可以使用的数据,则使用拆分方法,如果没有,则使用交叉验证。我建议通过其他方式处理过度拟合。