2017-04-05 62 views
-1

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

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

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

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

+0

恐怕你的问题在这里不太合适。您应该在http://datascience.stackexchange.com/上发布它 – tagoma

回答

1

交叉验证不避免验证集,它只是使用很多。换句话说,不是一分为三,而是一分为二,而现在你所称的“训练”实际上是以前一直在训练和验证的内容,简历就是重复的分裂(以更聪明的方式随机)进入训练和测试,然后对结果进行平均。支持它的理论在几乎任何优秀的ML书中都是广泛可用的;至关重要的一点是“我应该使用它”,而且答案很简单 - 如果你没有足够的数据来做一次拆分,只需要。如果您没有足够的数据表示您感兴趣的分销代表了每个分组,则使用CV,然后重复分组可以简单地减少差异。此外,对于非常小的数据集,其中一个嵌套CV - 一个用于[train + val] [测试]分割和[train] [val]内部,因此两个模型选择及其最终评估的方差都会降低。