关于样本数据的Apache Mahout培训与实际数据的实施

时间:2013-12-12 12:50:56

标签: machine-learning mahout recommendation-engine mahout-recommender

场景是这样的:

我正在尝试使用apache mahaout创建推荐器,并且我有一些样本首选项(用户,项目,偏好值)数据,用于生成相似性矩阵和确定项目项相似性。但实际的偏好数据远远大于样本偏好数据。实际偏好数据中存在的项目ID列表也都存在于样本偏好数据中。但是样本数据中的用户ID比实际数据小得多。

现在,当我尝试在实际数据上运行推荐程序时,它不断给出错误,即用户ID不存在,因为它不存在于示例数据中。如何在mahout的推荐程序中注入新的用户ID及其首选项,以便它可以根据项目项目相似性为任何用户生成推荐?或者,如果有其他方式可以为新用户生成推荐,请建议。

感谢。

1 个答案:

答案 0 :(得分:0)

如果您认为您的样本数据是完整的,用于计算项目项的相似性,为什么不预先计算它们并使用Collection<GenericItemSimilarity.ItemItemSimilarity> corrMatrix = new ArrayList<GenericItemSimilarity.ItemItemSimilarity>();来存储您预先计算的相似性。然后,您可以创建ItemSimilarity,如下所示:ItemSimilarity similarity = new GenericItemSimilarity(correlationMatrix);

我认为使用您的数据样本根据偏好值计算项目项相似性并不是一个好主意,因为您可能缺少大量有用的数据。如果您认为在运行中计算它很慢,您可以随时对其进行预先计算并将其存储在数据库中,并在需要时加载它。

如果您仍然收到此错误,那么您可能会在推荐类中使用示例数据模型,或者使用UserSimilarity来计算项目的相似性。

如果你想添加新用户,可以使用Mahout的FileDataModel并通过包含新用户定期更新文件(我认为你可以用一些后缀创建新文件,我不确定)。您可以在Mahout in Action一书中找到更多相关信息。内存中DataModel实现是不可变的。您可以通过实施方法setPreference()removePreference()来扩展它们。

编辑:我有MutableDataModel的实施,扩展了AbstractDataModel。如果你愿意,我可以和你分享。