Apache spark Spark MLLib与新用户协同过滤
我正在试用Spark中实现的协同过滤算法,遇到以下问题: 假设我使用以下数据训练模型:Apache spark Spark MLLib与新用户协同过滤,apache-spark,apache-spark-mllib,collaborative-filtering,Apache Spark,Apache Spark Mllib,Collaborative Filtering,我正在试用Spark中实现的协同过滤算法,遇到以下问题: 假设我使用以下数据训练模型: u1|p1|3 u1|p2|3 u2|p1|2 u2|p2|3 u1|p1|1 u3|p1|2 u3|p2|3 现在,如果我使用以下数据进行测试: u1|p1|3 u1|p2|3 u2|p1|2 u2|p2|3 u1|p1|1 u3|p1|2 u3|p2|3 我从未看到用户“u3”的任何评分,可能是因为该用户没有出现在培训数据中。这是因为冷启动问题吗?我的印象是,这个问题只适用于新产品。在这种情况下,
u1|p1|3
u1|p2|3
u2|p1|2
u2|p2|3
u1|p1|1
u3|p1|2
u3|p2|3
现在,如果我使用以下数据进行测试:
u1|p1|3
u1|p2|3
u2|p1|2
u2|p2|3
u1|p1|1
u3|p1|2
u3|p2|3
我从未看到用户“u3”的任何评分,可能是因为该用户没有出现在培训数据中。这是因为冷启动问题吗?我的印象是,这个问题只适用于新产品。在这种情况下,我会预测“u3”,因为训练数据中的“u1”和“u2”具有与“u3”相似的评级信息。这就是基于模型和基于内存的协同过滤之间的区别吗?我想你说的是ALS算法吧 “u3”不是您的训练集的一对,因此您的模型对该用户一无所知。我们所能做的就是返回所有用户的平均评分
查看Spark 1.3.0 Scala代码:调用
predict()
时,由ALS.train()返回的MatrixFactoryModel
尝试在特征向量中查找用户和产品。当我试图预测未知用户的评级时,我得到了一个NoTouchElementException
。它就是这样实现的。谢谢。我就是这么想的。除了ALS,MLLib还支持其他协同过滤算法吗?ALS似乎是Spark 1.3.0中唯一的算法:您是否能够将用户和产品作为非整数进行培训?当我尝试以这种形式进行训练时,我得到一个错误:Rating,(int(self.user)、int(self.product)、float(self.Rating))看起来我们遇到了类似的问题:如何预测新用户而不必重新训练整个模型?