关于类似项目的两个事件的mahout建议

时间:2014-11-06 07:25:02

标签: mahout

我正在尝试解决mahout问题。问题是我们有用户和课程,用户可以查看课程或可以参加课程。如果用户经常查看课程,那么我必须建议参加课程。我有像userid和itemid这样的数据,没有与之相关的偏好。 EX:

1 2

1 7

2 4

2 8

3 5

4 6

其中第一列1是用户ID,第二列2是课程id。第二列中的扭曲可以保持特定课程的查看或/和完成。假设课程A被查看具有id 2和相同的课程A对于用户1,如果用户1以外的用户来观看课程A而不是我必须预测要采取的courceA,那么这里的问题是如果所有用户查看课程但没有接受它,那么用户在mahout的基础推荐将失败。因为从业务角度来看,我们必须给他们他们正在观看的课程。我是否需要在此处对数据集进行分解,或者哪种算法最适合此类问题。

1 个答案:

答案 0 :(得分:0)

一个问题是观看可能无法预测用户想要参加课程(并且当然也不能预测)。你应该看一下Mahout v1中新的交叉共生推荐的东西。它是使用新的Scala DSL和内置的线性代数优化器对Spark上的Mahout进行全面改造的一部分。您正在寻找的命令行作业是 spark-itemsimilarity ,它可以直接摄取您的用户和项ID,而无需将它们转换为基数非负数。

算法采取您想要推荐的行动(用户参加课程)这些是最强大的指标"可以在您的推荐人中使用。然后查找导致用户参加该课程的相关视图和视图。这是通过 spark-itemsimilarity 作业完成的,该作业可以一次采取两个动作来查找相关性,滤除噪声并生成两个"指示符"。从工作中你得到两个稀疏矩阵,每一行都是来自"用户选择一个课程"动作数据集和值是最相似的项目ID的有序列表。第一个输出将是其他人参加课程的类似项目,第二个输出将是其他人观看和参加课程的类似项目。

输入使用特定于应用程序的ID。如果您包含有助于操作的过滤器术语,则可以将数据混合在一起。它看起来像:

user-id-1,item-id1,user-took-class
user-id-1,item-id2,user-viewed-class-page
user-id-1,item-id5,user-viewed-class-page
...

输出是文本分隔的(想想CSV,但你可以控制格式),并且所有item-id标记默认情况下都是这样的:

item-id-1,item-id-100 item-id-200 item-id-250 ...

这是一个项目ID,逗号和由空格分隔的类似项目的有序列表。使用搜索引擎对此进行索引,并使用当前用户的操作历史1来针对次要交叉共生指示符查询主要指标和用户的行动历史2。这些可以作为同一文档的两个字段一起索引,因此对两个字段只有一个查询。这也为您提供了与Solr或Elasticsearch一样可扩展的服务器。您只需使用Mahout创建数据模型,然后索引并使用搜索引擎进行查询。

Mahout docs:http://mahout.apache.org/users/recommender/intro-cooccurrence-spark.html 关于理论以及使用这些技术可以做的其他事情:http://www.slideshare.net/pferrel/unified-recommender-39986309

使用此技术,您几乎可以将整个用户点击流记录为单独的操作,并使用它们进行更好的记录。这些行动甚至不必是相同的项目。例如,您可以使用用户的搜索词历史记录,并获得交叉共生指标。在这种情况下,输出会包含引导用户参加课程的搜索字词,因此您的查询将成为当前用户的搜索字词历史记录。