使用Spark mlLib构建协作过滤推荐引擎

时间:2016-03-01 12:43:08

标签: apache-spark pyspark collaborative-filtering

我正在尝试使用apache Spark构建基于协同过滤的推荐引擎。我已经能够在我的数据上运行recommendation_example.py,效果非常好。 (MSE ~0.9)。我的一些具体问题是:

  1. 如何为未在网站上进行过任何活动的用户提供建议。是否有针对热门项目的API调用,这将根据用户操作为我提供最受欢迎的项目。一种方法是自己识别热门项目,并捕获java.util.NoSuchElementException例外,并返回那些受欢迎的项目。
  2. 如何在输入文件中添加一些数据后重新加载模型。我正在尝试使用另一个函数重新加载模型,该函数尝试保存模型,但它给出的错误为org.apache.hadoop.mapred.FileAlreadyExistsException。一种方法是在并行线程上侦听传入数据,使用model.save(sc, "target/tmp/<some target>")保存,然后在收到重要数据后重新加载模型。我迷失在这里,如何实现这一目标。
  3. 如果我能在这里找到方向,那将非常有帮助。

2 个答案:

答案 0 :(得分:1)

对于第一部分,您可以找到item_id,item_id出现的次数。你可以使用spark的map和reduceByKey函数。之后找到具有最大计数的前10/20项。您也可以根据物品的新近程度给出重量。

对于第二部分,您可以每次使用新名称保存模型。我通常使用当前日期和时间创建文件夹名称,并使用相同的名称从保存的文件夹重新加载模型。您将始终必须使用过去的数据和收到的新数据再次训练模型,然后使用模型进行预测。

答案 1 :(得分:1)

独立于使用像Spark这样的平台,链接预测有一些非常好的技术(例如非负矩阵分解),可以预测2组之间的链接。 其他非常有效(和良好)的建议技巧是: - 1.汤普森采样,2.MAB(多臂匪徒)。很大程度上取决于原始数据集。您的原始数据集是如何分布的。我建议在5%原始数据集上应用上述方法,建立假设,使用A / B测试,预测链接并继续前进。

同样,所有这些技术都独立于平台。我还建议从头开始而不是使用像spark这样的平台,这些平台仅对大型数据集有用。您将来可以随时迁移到这些平台以实现可扩展性。

希望它有所帮助!