我有来自6000名用户评分3900部电影的800.000条记录的培训数据集。
它们存储在逗号分隔文件中,如:userId,movieId,preference
。
我有另一个格式为userId,movieId
的数据集(200.000条记录)。我的目标是使用第一个数据集作为训练集,以确定第二组的缺失偏好。
到目前为止,我设法加载了训练数据集,并生成了基于用户的建议。这非常顺利,并且不会花费太多时间。但是在回复建议时我很挣扎。
我尝试的第一种方法是:
userId,movieId
元组。estimatePreference(userId, movieId)
这个有效,但速度非常慢(我添加了一个计数器来打印每10,000次迭代:几分钟后它只打印一次。我有8GB-RAM带一个i7核...处理200.000行需要多长时间?!)
我的第二个选择是:
FileDataModel
做这样的事情:
newDataModel.setPreference(userId, movieId, recommender.estimatePreference(userId, movieId));
这里我遇到了几个问题:
答案 0 :(得分:1)
你确定问题在于写出结果吗?在我看来,真正的问题是使用基于用户的推荐器。
对于这样一个小型数据集,例如,基于搜索的推荐人将能够在不到一毫秒的时间内提出建议,并行提供多项建议。这应该允许您在一台机器上在几分钟内完成200,000条建议。
使用如此小的数据集,基于指标的方法可能不是最佳选择。要改进这一点,请尝试使用更大的内容,例如百万首歌数据集。见http://labrosa.ee.columbia.edu/millionsong/
此外,如果您想构建真正的推荐人,使用和评估评级并不是一件特别好的事情。
最后,有关Mahout的问题可以更好地解决Mahout邮件列表本身。