首页 > 解决方案 > 从 Python 中的预测 DataFrame 中选择项目预测

问题描述

一般来说,我对 DataScience/Pandas 很陌生。我主要遵循这个关于推荐系统的指南。

我的主要区别是我的电影数据从一个表开始,我想从该列表中找到与特定电影最相似的电影。

初始数据框如下所示: 在此处输入图像描述

然后我将其转换为稀疏数据框,其中可以显示用户对每部电影的评分:

rating_with_totalRatingCount = rating_with_totalRatingCount.drop_duplicates(['userID', 'movieTitle'])
ratingPivot = rating_with_totalRatingCount.pivot(index = 'movieTitle', columns = 'userID', values = 'userRatingScore').fillna(0).T

在此处输入图像描述

最后,我应用点积规则来获取预测数据框:

U, sigma, Vt = svds(ratingPivot, k = 50)

sigma = np.diag(sigma)

all_user_predicted_ratings = np.dot(np.dot(U, sigma), Vt) + user_ratings_mean.values.reshape(-1, 1)
preds_df = pd.DataFrame(all_user_predicted_ratings, columns = ratingPivot.columns)

在此处输入图像描述

我的问题是,我如何使用这个预测数据框为某人提供与 Python 中的特定电影最相似的电影?

标签: pythonnumpymatrixpredictionrecommender-systems

解决方案


所以,理论上,这就是它的工作原理——

  1. 您首先创建所谓的效用矩阵。此实用程序矩阵是(用户 X 项)大小矩阵(在您的情况下,您使用枢轴创建它)。效用矩阵可以有不同的值作为度量。例如,它可能是电影评分

  2. 效用矩阵通常可以有很多空值(如果用户没有看过电影,那么他们对该电影的评分将不存在)

  3. 现在,您通过使用矩阵分解方法估计评级本身来重新构建效用矩阵来处理这个问题。基本上,使用现有评级作为训练数据来找出哪些矩阵相乘时可以最小化损失(即实际评级和预测评级之间的差异)。这样做会估计训练数据中不存在的评分。

  4. 现在您已经估计了一个效用矩阵(用户 x 项目),您所要做的就是得到一个项目-项目相似度矩阵(项目 x 项目)或一个用户-用户相似度矩阵(用户 x 用户)。您可以通过将 (item x user) 与 (user x item) 矩阵相乘的点积来实现,该矩阵是重构效用矩阵的转置。这将导致(项目 x 项目)相似度矩阵(更好的方法是将余弦相似度作为其归一化)。

  5. 获取点积后,获取单个项目(相似度矩阵中的行)并找到前 10 个值以获得前 10 个最相似的项目。

  6. “相似性”首先基于您在效用矩阵中使用的度量,在本例中为评级。


推荐阅读