Mahout :(快速表现)如何写文件的偏好?

时间:2015-04-02 22:54:16

标签: java performance mahout recommendation-engine

我有来自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));

这里我遇到了几个问题:

  1. 在运行时:java.lang.UnsupportedOperationException(因为我发现hereFileDataModel实际上无法更新。我不知道为什么函数setPreference存在于第一位......)
  2. setPreference个州的API"此方法也应该被视为相对较慢。"
  3. 我读到一个解决方案是使用 delta文件,但我无法找出实际意味着什么。关于如何加快我的写作偏好过程的任何建议?

    请注意,我是Mahout和推荐系统的新手,所以请使用外行术语;)

1 个答案:

答案 0 :(得分:1)

你确定问题在于写出结果吗?在我看来,真正的问题是使用基于用户的推荐器。

对于这样一个小型数据集,例如,基于搜索的推荐人将能够在不到一毫秒的时间内提出建议,并行提供多项建议。这应该允许您在一台机器上在几分钟内完成200,000条建议。

使用如此小的数据集,基于指标的方法可能不是最佳选择。要改进这一点,请尝试使用更大的内容,例如百万首歌数据集。见http://labrosa.ee.columbia.edu/millionsong/

此外,如果您想构建真正的推荐人,使用和评估评级并不是一件特别好的事情。

最后,有关Mahout的问题可以更好地解决Mahout邮件列表本身。