Machine learning 如何分割推荐系统的极稀疏数据集的训练/测试?

Machine learning 如何分割推荐系统的极稀疏数据集的训练/测试?,machine-learning,recommendation-engine,svd,collaborative-filtering,Machine Learning,Recommendation Engine,Svd,Collaborative Filtering,我在现实世界的数据集上使用CF算法(SVD)。现在我遇到了一个关于数据稀疏的问题。这意味着用户/项目评级矩阵的稀疏性约为0.01%。我用80/20将数据拆分为训练集/测试集,我发现只有少数用户,测试集中的项目出现在训练集中,所以我可以使用测试集中的一些评分来计算RMSE。你能给我一些建议来修复它吗?对于推荐系统,通常会将每个用户的历史记录分为训练和测试。更详细的信息: 对于每个用户,我们写出他与之交互的项目 最好是,我们通过(增加)时间来解决“时间旅行问题”(用户可以重新访问已经知道的项目,所以

我在现实世界的数据集上使用CF算法(SVD)。现在我遇到了一个关于数据稀疏的问题。这意味着用户/项目评级矩阵的稀疏性约为0.01%。我用80/20将数据拆分为训练集/测试集,我发现只有少数用户,测试集中的项目出现在训练集中,所以我可以使用测试集中的一些评分来计算RMSE。你能给我一些建议来修复它吗?

对于推荐系统,通常会将每个用户的历史记录分为训练和测试。更详细的信息:

  • 对于每个用户,我们写出他与之交互的项目
  • 最好是,我们通过(增加)时间来解决“时间旅行问题”(用户可以重新访问已经知道的项目,所以您不想在早期数据集上进行测试)
  • 通常,使用数据集的第一个(1-k)百分比作为训练集,其余百分比作为测试集

  • 在推荐系统的情况下,通常会将每个用户的历史分为训练和测试。更详细的信息:

  • 对于每个用户,我们写出他与之交互的项目
  • 最好是,我们通过(增加)时间来解决“时间旅行问题”(用户可以重新访问已经知道的项目,所以您不想在早期数据集上进行测试)
  • 通常,使用数据集的第一个(1-k)百分比作为训练集,其余百分比作为测试集

  • 谢谢你的回答。您的意思是我应该将数据重新组织为:{u1:[v11,v12…],u2:[v21,v22,…],…}并使用每个用户项目列表的第一个(1-k)百分比。如果是这样的话,在我的数据中,很多用户对一个项目进行评分,所以如果我将他们分成测试集,我将得不到任何东西(潜在因素vec p_u或q_I)来预测测试集中用户的评分。@littlekid,这些只与一个项目交互的用户太吵了,我怀疑你能为他们提供可靠的建议。这些用户通常在预处理阶段被过滤掉。我的数据集有不同的类型,每个记录不仅包括投票,还包括评论,我认为这就是投票矩阵如此稀疏的原因。如果我过滤这些噪声数据,数据集将太小,无法获得推荐。我已经尝试过过滤你所说的噪声数据,我丢失了大约2/3的数据。我是否应该用这些剩余部分来做推荐?这取决于你的目标。若你们想推出生产就绪的系统,那个么看看过滤后剩下多少用户和项目。如果它们太少,这不是一个选择,我真的不知道该建议什么。如果其中有很多(即使不到一半),并且您可以假设其他用户将很快生成更多数据,那么您可以使用该数量。若你们的兴趣纯粹是学术性的,你们只想玩推荐系统,那个么你们可以尝试任何你们喜欢的方法:-)谢谢你们的回答。您的意思是我应该将数据重新组织为:{u1:[v11,v12…],u2:[v21,v22,…],…}并使用每个用户项目列表的第一个(1-k)百分比。如果是这样的话,在我的数据中,很多用户对一个项目进行评分,所以如果我将他们分成测试集,我将得不到任何东西(潜在因素vec p_u或q_I)来预测测试集中用户的评分。@littlekid,这些只与一个项目交互的用户太吵了,我怀疑你能为他们提供可靠的建议。这些用户通常在预处理阶段被过滤掉。我的数据集有不同的类型,每个记录不仅包括投票,还包括评论,我认为这就是投票矩阵如此稀疏的原因。如果我过滤这些噪声数据,数据集将太小,无法获得推荐。我已经尝试过过滤你所说的噪声数据,我丢失了大约2/3的数据。我是否应该用这些剩余部分来做推荐?这取决于你的目标。若你们想推出生产就绪的系统,那个么看看过滤后剩下多少用户和项目。如果它们太少,这不是一个选择,我真的不知道该建议什么。如果其中有很多(即使不到一半),并且您可以假设其他用户将很快生成更多数据,那么您可以使用该数量。如果你的兴趣纯粹是学术性的,你只想玩推荐系统,那么你可以尝试任何你喜欢的方法:-)