ALS 算法 Spark MLlib - 我如何获得自己的“个人推荐”(我未排名的电影排名)

问题描述 投票:0回答:1

我在 Azure Databricks 中使用 PySpark。我使用 Sparks MLlib 库 ALS 算法来预测电影评级,效果很成功。但是,我正在尝试添加一个数据框,其中包含我对 10 部随机选择的电影的评分。当我这样做时,我只会获得我已经排名的电影的预测排名。

我希望能够使用该模型根据他们的排名获得推荐。

我有执行以下任务的 Spark 代码:

  • 导入数据(RatingsSmall、MoviesSmall、RatingsLarge、Movies Large)

  • 将小评分与小电影合并,将大评分与大电影合并

  • 一起附加到两个新数据集

  • 删除不相关的列时间戳和流派

我现在有一个干净的表,其中包含 MovieID、标题(电影名称)、UserID 和排名。我将从现在开始展示代码。如果您想要之前的代码,那么我也可以提交。

  • 将数据拆分为训练集和测试集(0.80,0.20)

  • ALS算法

  • 显示预测。

希望上述内容可以帮助您指导我所附的代码。 我只能获得对我已经提交的排名的预测。

我尝试将我的排名加入到训练集中。从这里我想获得数据集中其他电影的推荐或预测。

我的尝试: 导入了一个带有我自己的排名的DF。 将此 (UnionAll) 附加到训练集中。 得到预测(但仅限于我已经排名的电影)

代码:

#Split dataset

    training, test = All_Movies.randomSplit([0.8, 0.2])
    from pyspark.ml.recommendation import ALS

    from pyspark.ml.evaluation import RegressionEvaluator

#Set up model

    ALS = ALS(maxIter=10, regParam=0.01, userCol = "userId",itemCol="movieId", ratingCol="rating",  coldStartStrategy="drop")

#Fit model to Training set and attach personal recomendations


     model = ALS.fit(training.unionAll(PersonalDF)) #PersonalDF is my rankings

#Get Predictions for Test Set
    predictions = model.transform(test).dropna()

#All good up until here.

#Trying to get prediction rankings for my movies
    mySampledMovies = model.transform(PersonalDF) 
    mySampledMovies.registerTempTable("mySampledMovies")

    display(sqlContext.sql("select userId, movieId, rating,title, prediction from mySampledMovies"))

我期望一个数据框显示我的用户ID、电影ID、排名、预测。对于电影,我还没有看到排名为 N/A 或 Null,并且预测具有价值。

非常感谢

python machine-learning pyspark apache-spark-ml
1个回答
0
投票

您需要过滤掉您的 user_id 并获取适合您自己的推荐。

a = user.where(user.user_id == 'your user id') model.recommendForUserSubset(a,5).show(1,False)

有关详细信息,请检查https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.ml.recommendation.ALSModel.html#pyspark.ml.recommendation.ALSModel.recommendForUserSubset

© www.soinside.com 2019 - 2024. All rights reserved.