Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Machine learning ApacheMahout对样本数据的培训与对实际数据的实现_Machine Learning_Mahout_Recommendation Engine_Mahout Recommender - Fatal编程技术网

Machine learning ApacheMahout对样本数据的培训与对实际数据的实现

Machine learning ApacheMahout对样本数据的培训与对实际数据的实现,machine-learning,mahout,recommendation-engine,mahout-recommender,Machine Learning,Mahout,Recommendation Engine,Mahout Recommender,场景如下: 我正在尝试使用ApacheMahout制作推荐程序,我有一些示例偏好(用户、项目、偏好值)数据,用于生成相似性矩阵和确定项目相似性。但实际偏好数据远大于样本偏好数据。实际首选项数据中存在的项目ID列表也都存在于示例首选项数据中。但是示例数据中的用户ID比实际数据小得多 现在,当我尝试在实际数据上运行recommender时,它总是给我一个错误,即用户id不存在,因为它不存在于示例数据中。如何在mahout的recommender中注入新的用户ID及其首选项,以便它能够根据项目相似性为

场景如下:

我正在尝试使用ApacheMahout制作推荐程序,我有一些示例偏好(用户、项目、偏好值)数据,用于生成相似性矩阵和确定项目相似性。但实际偏好数据远大于样本偏好数据。实际首选项数据中存在的项目ID列表也都存在于示例首选项数据中。但是示例数据中的用户ID比实际数据小得多

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


谢谢。

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

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

如果仍然出现此错误,则可能在推荐类中使用示例数据模型,或者使用
UserSimilarity
计算项目相似性

如果您想添加新用户,您可以使用Mahout的
FileDataModel
,并通过添加新用户定期更新文件(我想您可以创建带有一些后缀的新文件,我不确定)。你可以在书中找到更多关于这方面的信息。内存中的数据模型实现是不可变的。您可以通过实现方法
setPreference()
removePreference()
来扩展它们


EDIT:我有一个
MutableDataModel
的实现,它扩展了
AbstractDataModel
。如果您愿意,我可以与您共享。

由于样本数据中有400个项目和50000个用户,因此生成项目相似性矩阵几乎不需要10毫秒。所以我不想预先计算相似矩阵。setpreference()和removepreference()函数在使用FileDataModel时引发异常java.lang.UnsupportedOperationException。Mahout中的任何类都没有实现这些方法。你应该自己实施。我是说,如果使用FileDataModel,您可以更改文件并添加首选项,然后调用
Recommender.refresh()
,这将强制重新加载数据模型并包含新用户。你真的应该从《这是怎么做到的》一书中读到这一点。我认为对于新用户,您可以使用与原始文件相同的名称和扩展名创建单独的文件,即file001。。差不多吧。从推荐程序调用刷新功能也会刷新所有缓存。非常感谢Dragan。推荐人。刷新()对我来说效果很好。你能告诉我从哪里可以阅读更多关于Recommender.refresh的信息吗?因为我只希望Recommender.refresh刷新更改,而不希望再次加载整个内容。谢谢你的帮助。正如我在回复中提到的,正在行动的收银员是收银员的圣经。如果不想刷新所有内容,可以调用相似性类上的刷新方法,例如ItemSimilarity.refresh()。在这里,您必须提供所有已刷新项目的集合。老实说,我没有使用过它,也不知道它到底是如何工作的,但从文档中可以看出:alreadyRefreshed s已知已被刷新,这是对某个对象的方法进行初始调用的结果。这可确保刷新依赖关系图中的对象不会被不必要地刷新两次。如果您喜欢该答案,则应将其标记为接受,以便其他人可以从中受益,并鼓励其他人帮助您。如果您喜欢该答案,则应将其标记为接受,以便其他人可以从中受益,并鼓励其他人帮助您