首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据集拆分为推荐系统上的培训和测试集

将数据集拆分为推荐系统上的培训和测试集
EN

Stack Overflow用户
提问于 2017-03-30 23:03:42
回答 3查看 6.1K关注 0票数 6

我实现了一个基于矩阵分解技术的推荐系统。我想评估一下。

我想使用10倍交叉验证与所有,但一个协议(https://ai2-s2-pdfs.s3.amazonaws.com/0fcc/45600283abca12ea2f422e3fb2575f4c7fc0.pdf)。

我的数据集有以下结构:

代码语言:javascript
复制
user_id,item_id,rating
1,1,2
1,2,5
1,3,0
2,1,5
...

让我困惑的是,数据将如何被分割,因为我不能在测试集中放置一些三元组(用户、项、等级)。例如,如果我选择测试集的三重(2,1,5),而这是用户2所做的唯一评级,那么就不会有任何关于这个用户的其他信息,并且经过训练的模型不会为他预测任何值。

考虑到这种情况,我应该如何进行拆分?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-04-03 16:06:04

您的基本逻辑是非常正确的:如果您在一个类中只有一个观察,您必须将它包含在训练集中,以便该模型在该类中具有任何有效性。

然而,将输入划分为这些类取决于各种观察之间的相互作用。您能否识别数据类别,如您提到的“仅评等”问题?当您找到其他的小班时,您还需要确保在您的培训数据中有足够的这些观察。

不幸的是,这是一个很难自动化的过程。大多数一次性应用程序只需从数据中手工选择这些观测数据,然后将其他数据分发给每个正常的分区。这确实存在一个问题,即特例在训练集中被过度表示,这可能会在某种程度上降低模型训练中的正常情况。

当您遇到以后的数据时,您有能力调优模型吗?这通常是处理稀疏类输入的最佳方法。

票数 1
EN

Stack Overflow用户

发布于 2018-11-15 17:51:11

您没有指定语言或工具集,所以我不能给您一个100%适用于您的简明答案,但是下面是我解决这个问题的方法。

我正在开发一个使用宝藏数据(即Presto)和隐式观察的推荐系统,在我的矩阵中遇到了一些用户和项不存在的问题。我不得不重写算法,将观察结果分割成训练和测试,以便每个用户和每个项目都能在训练数据中得到表示。对于我的算法的描述,我假设用户比条目多。如果这对你来说不是真的,那就换两种。这是我的算法。

  1. 为每个用户选择一个观察
  2. 对于每个只有一个观察且尚未从上一步中选择的项,请选择一个观察
  3. 将前两个步骤的结果合并在一起。这将产生一套涵盖所有用户和所有项目的观察。
  4. 计算您需要填充培训集的观察次数(通常是观察总数的80% )。
  5. 从步骤3开始,计算合并集合中有多少观测值。步骤4和步骤5之间的差异是填充训练集所需的剩余观察数。
  6. 随机选择足够的剩余观察来填充训练集。
  7. 将步骤3和步骤6中的集合合并:这是您的培训集。
  8. 剩下的观察是您的测试集。

正如我前面提到的,我使用的是宝藏数据和Presto,所以我唯一可以使用的工具是SQL、通用表表达式、临时表和宝藏数据工作流。

票数 3
EN

Stack Overflow用户

发布于 2017-03-31 04:56:27

协作过滤(矩阵因式分解)不能对没有反馈的未见用户有很好的推荐。然而,评价应考虑到这一情况并加以考虑。

您可以做的一件事是报告所有测试用户的性能,只需要使用一些反馈来测试用户,而没有反馈的则是看不见的用户。

所以我会说,保留测试,随机地训练分裂,但是对未见的用户分别进行评估。

更多信息,这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43129764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档