我实现了一个基于矩阵分解技术的推荐系统。我想评估一下。
我想使用10倍交叉验证与所有,但一个协议(https://ai2-s2-pdfs.s3.amazonaws.com/0fcc/45600283abca12ea2f422e3fb2575f4c7fc0.pdf)。
我的数据集有以下结构:
user_id,item_id,rating
1,1,2
1,2,5
1,3,0
2,1,5
...让我困惑的是,数据将如何被分割,因为我不能在测试集中放置一些三元组(用户、项、等级)。例如,如果我选择测试集的三重(2,1,5),而这是用户2所做的唯一评级,那么就不会有任何关于这个用户的其他信息,并且经过训练的模型不会为他预测任何值。
考虑到这种情况,我应该如何进行拆分?
发布于 2017-04-03 16:06:04
您的基本逻辑是非常正确的:如果您在一个类中只有一个观察,您必须将它包含在训练集中,以便该模型在该类中具有任何有效性。
然而,将输入划分为这些类取决于各种观察之间的相互作用。您能否识别数据类别,如您提到的“仅评等”问题?当您找到其他的小班时,您还需要确保在您的培训数据中有足够的这些观察。
不幸的是,这是一个很难自动化的过程。大多数一次性应用程序只需从数据中手工选择这些观测数据,然后将其他数据分发给每个正常的分区。这确实存在一个问题,即特例在训练集中被过度表示,这可能会在某种程度上降低模型训练中的正常情况。
当您遇到以后的数据时,您有能力调优模型吗?这通常是处理稀疏类输入的最佳方法。
发布于 2018-11-15 17:51:11
您没有指定语言或工具集,所以我不能给您一个100%适用于您的简明答案,但是下面是我解决这个问题的方法。
我正在开发一个使用宝藏数据(即Presto)和隐式观察的推荐系统,在我的矩阵中遇到了一些用户和项不存在的问题。我不得不重写算法,将观察结果分割成训练和测试,以便每个用户和每个项目都能在训练数据中得到表示。对于我的算法的描述,我假设用户比条目多。如果这对你来说不是真的,那就换两种。这是我的算法。
正如我前面提到的,我使用的是宝藏数据和Presto,所以我唯一可以使用的工具是SQL、通用表表达式、临时表和宝藏数据工作流。
发布于 2017-03-31 04:56:27
协作过滤(矩阵因式分解)不能对没有反馈的未见用户有很好的推荐。然而,评价应考虑到这一情况并加以考虑。
您可以做的一件事是报告所有测试用户的性能,只需要使用一些反馈来测试用户,而没有反馈的则是看不见的用户。
所以我会说,保留测试,随机地训练分裂,但是对未见的用户分别进行评估。
更多信息,这里。
https://stackoverflow.com/questions/43129764
复制相似问题