我正在尝试使用apache Spark构建基于协同过滤的推荐引擎。我已经能够在我的数据上运行recommendation_example.py
,效果非常好。 (MSE
~0.9)。我的一些具体问题是:
java.util.NoSuchElementException
例外,并返回那些受欢迎的项目。 org.apache.hadoop.mapred.FileAlreadyExistsException
。一种方法是在并行线程上侦听传入数据,使用model.save(sc, "target/tmp/<some target>")
保存,然后在收到重要数据后重新加载模型。我迷失在这里,如何实现这一目标。 如果我能在这里找到方向,那将非常有帮助。
答案 0 :(得分:1)
对于第一部分,您可以找到item_id,item_id出现的次数。你可以使用spark的map和reduceByKey函数。之后找到具有最大计数的前10/20项。您也可以根据物品的新近程度给出重量。
对于第二部分,您可以每次使用新名称保存模型。我通常使用当前日期和时间创建文件夹名称,并使用相同的名称从保存的文件夹重新加载模型。您将始终必须使用过去的数据和收到的新数据再次训练模型,然后使用模型进行预测。
答案 1 :(得分:1)
独立于使用像Spark这样的平台,链接预测有一些非常好的技术(例如非负矩阵分解),可以预测2组之间的链接。 其他非常有效(和良好)的建议技巧是: - 1.汤普森采样,2.MAB(多臂匪徒)。很大程度上取决于原始数据集。您的原始数据集是如何分布的。我建议在5%原始数据集上应用上述方法,建立假设,使用A / B测试,预测链接并继续前进。
同样,所有这些技术都独立于平台。我还建议从头开始而不是使用像spark这样的平台,这些平台仅对大型数据集有用。您将来可以随时迁移到这些平台以实现可扩展性。
希望它有所帮助!