相关疑难解决方法(0)

如何在Spark ALS推荐器中增加矩阵因子?

我是机器学习世界的初学者和Apache Spark的使用者.
我已经按照https://databricks-training.s3.amazonaws.com/movie-recommendation-with-mllib.html#augmenting-matrix-factors上的教程进行了操作,并成功开发了该应用程序.现在,由于需要今天的Web应用程序需要由实时建议提供支持,我希望我的模型能够为不断出现在服务器上的新数据做好准备.该网站引用了:

获得推荐的更好方法是首先训练矩阵分解模型,然后使用您的评级来扩充模型.

我怎么做?我正在使用Python来开发我的应用程序.另外,请告诉我如何让模型再次使用它,或者我如何将其与Web服务进行交互.感谢您

python machine-learning apache-spark

18
推荐指数
1
解决办法
546
查看次数

ALS模型 - 预测full_u*v ^ t*v等级非常高

我正在预测批量训练模型的流程之间的评级.我正在使用此处概述的方法:ALS模型 - 如何生成full_u*v ^ t*v?

! rm -rf ml-1m.zip ml-1m
! wget --quiet http://files.grouplens.org/datasets/movielens/ml-1m.zip
! unzip ml-1m.zip
! mv ml-1m/ratings.dat .

from pyspark.mllib.recommendation import Rating

ratingsRDD = sc.textFile('ratings.dat') \
               .map(lambda l: l.split("::")) \
               .map(lambda p: Rating(
                                  user = int(p[0]), 
                                  product = int(p[1]),
                                  rating = float(p[2]), 
                                  )).cache()

from pyspark.mllib.recommendation import ALS

rank = 50
numIterations = 20
lambdaParam = 0.1
model = ALS.train(ratingsRDD, rank, numIterations, lambdaParam)
Run Code Online (Sandbox Code Playgroud)

然后提取产品功能......

import json
import numpy as np

pf = model.productFeatures()

pf_vals = pf.sortByKey().values().collect()
pf_keys …
Run Code Online (Sandbox Code Playgroud)

apache-spark apache-spark-ml apache-spark-mllib

9
推荐指数
1
解决办法
1260
查看次数

ALS 模型 - 如何生成 full_u * v^t * v?

我试图弄清楚 ALS 模型如何预测新用户在批处理更新之间的值。在我的搜索中,我遇到了这个stackoverflow answer。为方便读者,我复制了以下答案:

您可以使用经过训练的模型(无需更新)获取对新用户的预测:

要获得模型中用户的预测,您可以使用其潜在表示(大小为 f(因子数)的向量 u),乘以乘积潜在因子矩阵(由所有产品的潜在表示组成的矩阵,一堆大小为 f) 的向量,并为您提供每个产品的分数。对于新用户,问题在于您无法访问他们的潜在表示(您只有大小 M(不同产品的数量)的完整表示,但您可以做的是使用相似度函数来计算相似的潜在通过乘以乘积矩阵的转置来表示这个新用户。

即,如果您的用户潜在矩阵是 u 并且您的产品潜在矩阵是 v,对于模型中的用户 i,您可以通过执行以下操作获得分数: u_i * v 对于新用户,您没有潜在表示,因此请使用完整表示 full_u 并执行: full_u * v^t * v 这将近似于新用户的潜在因素,并应该给出合理的建议(如果模型已经为现有用户提供了合理的建议)

为了回答训练问题,这允许您为新用户计算预测,而无需对模型进行繁重的计算,而您现在只能偶尔进行一次。因此,您可以在晚上进行批处理,并且仍然可以在白天对新用户进行预测。

注意:MLLIB 允许您访问矩阵 u 和 v

上面引用的文字是一个很好的答案,但是,我很难理解如何以编程方式实现这个解决方案。例如,矩阵 u 和 v 可以通过以下方式获得:

# pyspark example

# ommitted for brevity ... loading movielens 1M ratings

model = ALS.train(ratings, rank, numIterations, lambdaParam)

matrix_u = model.userFeatures()

print(matrix_u.take(2)) # take a look at the dataset
Run Code Online (Sandbox Code Playgroud)

这将返回:

[
  (2, array('d', [0.26341307163238525, 0.1650490164756775, 0.118405282497406, -0.5976635217666626, -0.3913084864616394, -0.1379186064004898, …
Run Code Online (Sandbox Code Playgroud)

apache-spark apache-spark-ml apache-spark-mllib

8
推荐指数
1
解决办法
2694
查看次数

Apache Spark ALS - 如何执行实时建议/折叠匿名用户

我正在使用Apache Spark(Pyspark API for Python)ALS MLLIB开发一项服务,为我的站点中的匿名用户(不在训练集中的用户)执行实时推荐.在我的用例中,我以这种方式在用户评级上训练模型:

from pyspark.mllib.recommendation import ALS, MatrixFactorizationModel, Rating
ratings = df.map(lambda l: Rating(int(l[0]), int(l[1]), float(l[2])))
rank = 10 
numIterations = 10
model = ALS.trainImplicit(ratings, rank, numIterations)
Run Code Online (Sandbox Code Playgroud)

现在,每次匿名用户选择目录中的项目时,我想在ALS模型中折叠其向量并获得建议(就像recommendedProducts()调用一样),但避免重新训练整个模型.

在Apache Spark中训练ALS模型后,有没有办法轻松完成新匿名用户向量的折叠

提前致谢

python collaborative-filtering apache-spark pyspark apache-spark-mllib

6
推荐指数
1
解决办法
800
查看次数

Apache Spark ALS协同过滤结果.它们没有意义

我想尝试Spark使用MLlib进行协同过滤,如本教程中所述:https://databricks-training.s3.amazonaws.com/movie-recommendation-with-mllib.html 该算法基于"协作过滤"一文对于隐式反馈数据集",进行矩阵分解.

使用1000万个Movielens数据集,一切都正常运行.数据集分为80%培训10%测试和10%验证.

  • RMSE基线:1.060505464225402
  • RMSE(train)= 0.7697248827452756
  • 对于训练的模型,RMSE(验证)= 0.8057135933012889,等级= 24,λ= 0.1,迭代次数= 10.
  • 最佳模型将基线提高了23.94%.

虽然具有不同的训练参数,但这些值与教程类似.

我尝试了几次运行算法,总是得到对我没有任何意义的建议.即使只评价儿童电影,我也会得到以下结果:

对于评级:

  • 个人评价:玩具总动员(1995)评级:4.0
  • 个人评价:Jungle Book,The(1994)评级:5.0
  • 个人评价:Lion King,The(1994)评级:5.0
  • 个人评价:Mary Poppins(1964)评级:4.0
  • 个人评价:爱丽丝梦游仙境(1951)评级:5.0

结果:

推荐给你的电影:

  1. Oharu的生活,(Saikaku ichidai onna)(1952)
  2. 更多(1998)
  3. 谁在那边唱歌?(又名谁在那里唱歌)(Ko to tamo peva)(1980)
  4. 星期日和西布莱(Dimanches de Ville d'Avray,Les)(1962)
  5. 蓝光,(Das Blaue Licht)(1932)
  6. Harvey Milk的时代,(1984)
  7. 请投票给我(2007)
  8. 种植树木的人,(Homme qui plantait des arbres,L')(1987)
  9. Shawshank Redemption,The(1994)
  10. 只有昨天(Omohide poro poro)(1991)

除了昨天以外似乎没有任何意义.

如果有人知道如何解释这些结果或获得更好的结果,我将非常感谢您分享您的知识.

最好的祝福

编辑:

如我所建议的那样,我训练了另

  • 基线错误:1.0587417035872992
  • RMSE(火车)= 0.7679883378412548
  • 对于以rank = 100,lambda = 0.1和numIter = 10训练的模型,RMSE(验证)= 0.8070339258049574.

不同的个人评分:

  • 个人评价:星球大战:第六集 - 绝地归来(1983)评级:5.0
  • 个人评价:Mission:Impossible(1996)评级:4.0
  • 个人评价:Die Hard:复仇(1995)评级:4.0
  • 个人评价:Batman Forever(1995)评级:5.0 …

machine-learning collaborative-filtering matrix-factorization apache-spark

5
推荐指数
1
解决办法
5000
查看次数