问题
如何在Spark训练的ALS模型中预测新用户的评分?(新=训练期间未见)
问题
我在这里关注官方的Spark ALS教程:
http://ampcamp.berkeley.edu/big-data-mini-course/movie-recommendation-with-mllib.html
我能够用不错的MSE建立一个很好的推荐者,但是我在为模型输入新数据方面很挣扎。本教程在培训之前会更改第一位用户的评分,但这确实是一个技巧。他们给出以下提示:
9.2。增强矩阵因子:
在本教程中,我们将您的评分添加到训练集中。获得建议的更好方法是先训练矩阵分解模型,然后使用评分来扩充模型。如果您觉得这很有趣,则可以看看MatrixFactorizationModel的实现,并了解如何为新用户和新电影更新模型。
该实现对我完全没有帮助。理想情况下,我正在寻找类似的东西:
predictions = model.predictAllNew(newinput)
但是不存在这种方法。我可以去修改原始的RDD,但是我认为这需要我重新训练模型,因此也不是理想的解决方案。当然必须有一种更优雅的方式吗?
我现在的位置:
我想我需要找到新向量的潜在表示。根据原始论文,我们可以这样计算:
我目前的尝试:
V = model.productFeatures().map(lambda x: (x[1])).collect() #product latent matrix Y
Cui = alpha * np.abs(newinput)
Cui = (1. + Cui) / (Cui)
Cui[np.where(newinput == 0)] = 0
Cui = np.diag(Cui)
lambdaI = len(np.where(newinput!=0)) * regularization_parameter * np.eye(np.shape(V)[1]) #
term = np.dot(np.dot(Vt,Cui),V)+lambdaI
term = np.dot(np.linalg.inv(term),Vt)
term = np.dot(term,Cui)
term = np.dot(term,newinput)
latentinput = term
但这不匹配。