Mahout:(快速性能)如何将首选项写入文件?
Mahout: (fast performance) how to write preferences to file?
我有一个训练数据集,其中包含来自 6000 名用户对 3900 部电影的评分的 800.000 条记录。
这些存储在逗号分隔的文件中,例如:userId,movieId,preference
。
我有另一个数据集(200.000 条记录),格式为:userId,movieId
。我的目标是使用第一个数据集作为训练集,以确定第二个数据集缺失的偏好。
到目前为止,我成功加载了训练数据集并生成了基于用户的推荐。这非常顺利,不会花费太多时间。但是在写回建议时我很挣扎。
我尝试的第一个方法是:
- 从文件中读取一行并获取
userId,movieId
元组。
- 使用
estimatePreference(userId, movieId)
检索计算出的偏好
- 将首选项附加到该行并将其保存在新文件中
这 有效,但速度非常慢 (我添加了一个计数器以每 10.000 次迭代打印一次:几分钟后它只打印一次。我有 8GB-RAM使用 i7 核...处理 200.000 行需要多长时间?!)
我的第二个选择是:
- 使用第二个数据集
创建一个新的FileDataModel
做这样的事情:
newDataModel.setPreference(userId, movieId, recommender.estimatePreference(userId, movieId));
这里我遇到了几个问题:
- 在运行时:java.lang.UnsupportedOperationException(我发现here,
FileDataModel
实际上无法更新。我不知道为什么函数setPreference
存在于第一名...)
setPreference
的 API 表示 "This method should also be considered relatively slow."
我读到一个解决方案是使用 delta 文件,但我无法找出它的实际含义。关于如何加快编写首选项过程的任何建议?
请注意,我是 Mahout 和推荐系统的新手,所以请使用外行术语 ;)
您确定问题出在写入结果上吗?在我看来,真正的问题是使用基于用户的推荐系统。
例如,对于如此小的数据集,基于搜索的推荐系统将能够在不到一毫秒的时间内提出建议,并且可以并行提供多个建议。这应该可以让您在几分钟内在一台机器上完成 200,000 个推荐。
对于如此小的数据集,基于指标的方法可能不是最佳选择。要改进这一点,请尝试使用更大的数据集,例如百万歌曲数据集。参见 http://labrosa.ee.columbia.edu/millionsong/
此外,如果您想建立一个真正的推荐系统,使用和估计评级并不是一件特别好的事情。
最后,有关 Mahout 的问题最好发给 Mahout 邮件列表本身。
我有一个训练数据集,其中包含来自 6000 名用户对 3900 部电影的评分的 800.000 条记录。
这些存储在逗号分隔的文件中,例如:userId,movieId,preference
。
我有另一个数据集(200.000 条记录),格式为:userId,movieId
。我的目标是使用第一个数据集作为训练集,以确定第二个数据集缺失的偏好。
到目前为止,我成功加载了训练数据集并生成了基于用户的推荐。这非常顺利,不会花费太多时间。但是在写回建议时我很挣扎。
我尝试的第一个方法是:
- 从文件中读取一行并获取
userId,movieId
元组。 - 使用
estimatePreference(userId, movieId)
检索计算出的偏好
- 将首选项附加到该行并将其保存在新文件中
这 有效,但速度非常慢 (我添加了一个计数器以每 10.000 次迭代打印一次:几分钟后它只打印一次。我有 8GB-RAM使用 i7 核...处理 200.000 行需要多长时间?!)
我的第二个选择是:
- 使用第二个数据集 创建一个新的
做这样的事情:
newDataModel.setPreference(userId, movieId, recommender.estimatePreference(userId, movieId));
FileDataModel
这里我遇到了几个问题:
- 在运行时:java.lang.UnsupportedOperationException(我发现here,
FileDataModel
实际上无法更新。我不知道为什么函数setPreference
存在于第一名...) setPreference
的 API 表示 "This method should also be considered relatively slow."
我读到一个解决方案是使用 delta 文件,但我无法找出它的实际含义。关于如何加快编写首选项过程的任何建议?
请注意,我是 Mahout 和推荐系统的新手,所以请使用外行术语 ;)
您确定问题出在写入结果上吗?在我看来,真正的问题是使用基于用户的推荐系统。
例如,对于如此小的数据集,基于搜索的推荐系统将能够在不到一毫秒的时间内提出建议,并且可以并行提供多个建议。这应该可以让您在几分钟内在一台机器上完成 200,000 个推荐。
对于如此小的数据集,基于指标的方法可能不是最佳选择。要改进这一点,请尝试使用更大的数据集,例如百万歌曲数据集。参见 http://labrosa.ee.columbia.edu/millionsong/
此外,如果您想建立一个真正的推荐系统,使用和估计评级并不是一件特别好的事情。
最后,有关 Mahout 的问题最好发给 Mahout 邮件列表本身。