我应该使用k折交叉验证将数据分割成训练/测试/验证集吗?

在评估推荐系统时,可以将数据分割成三部分:训练集、验证集和测试集。在这种情况下,训练集用于从数据中学习推荐模型,而验证集则用于选择最佳模型或参数。然后,使用选定的模型,用户可以使用测试集来评估算法的性能。

我在scikit-learn的交叉验证文档页面(http://scikit-learn.org/stable/modules/cross_validation.html)上发现,当使用k折交叉验证时,不需要将数据分割成三部分,而只需分割成两部分:训练集和测试集。

解决此问题的方法称为交叉验证(简称CV)。仍然应该保留一个测试集用于最终评估,但在进行CV时不再需要验证集。在基本方法中,称为k折CV,训练集被分割成k个较小的集合(其他方法在下文中描述,但通常遵循相同的原则)。

我想知道这是否是一个好方法。如果是的话,有人能提供支持这一理论的文章/书籍的参考吗?


回答:

交叉验证并不是避免使用验证集,它只是使用了多个验证集。换句话说,不是将数据一次性分割成三部分,而是分割成两部分,你现在称为“训练”的部分实际上是之前的训练集和验证集的结合。CV只是关于重复分割(以比随机分割稍微聪明的方式)成训练集和测试集,然后平均结果。支持这一理论的文献在任何好的机器学习书籍中都可以找到;关键问题是“我应该使用它吗”,答案出奇的简单——只有在你没有足够的数据进行一次分割时才使用。CV在你没有足够的数据让每个分割都能代表你感兴趣的分布时使用,然后进行重复分割只是为了减少方差。此外,对于非常小的数据集,人们会使用嵌套CV——一个用于[训练+验证][测试]分割,另一个用于内部的[训练][验证],这样就可以减少模型选择及其最终评估的方差。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注