我应该使用k-fold-cross验证将我的数据分成训练/测试/验证集吗?

时间:2017-04-05 19:58:21

标签: validation machine-learning

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

我找到了scikit-learn交叉验证(http://scikit-learn.org/stable/modules/cross_validation.html)的文档页面,其中说使用k-fold-cross验证时不需要将数据拆分成三个部分,但只有两个:培训和测试。

  

这个问题的解决方案是一个称为交叉验证的过程(简称CV)。仍应保留测试集以进行最终评估,但在进行CV时不再需要验证集。在称为k-fold CV的基本方法中,训练集被分成k个较小的集合(其他方法在下面描述,但通常遵循相同的原则)。

我想知道这是否是一个好方法。如果是这样,有人可以向我展示一篇支持这一理论的文章/书籍吗?

1 个答案:

答案 0 :(得分:1)

交叉验证不会避免验证集,只需使用多个。换句话说,不是一分为三部分,而是分成两部分,你现在称之为"培训"实际上是以前一直在训练和验证的内容,简单就是重复分割(以稍微更智能的方式而不是随机)进入训练和测试,然后对结果进行平均。支持它的理论在很多任何好的ML书中都可以广泛使用;至关重要的是"我应该使用它"如果您没有足够的数据来进行一次拆分,那么答案很简单 - 。如果您没有足够的数据用于每个拆分以代表您感兴趣的分布,则使用CV,然后重复拆分只会减少差异。此外,对于非常小的数据集,可以嵌套CV - 一个用于[train + val] [test] split,内部用于[train] [val],因此模型选择和最终评估的方差都会降低。