矩阵分解改进

数据挖掘 Python 推荐系统 矩阵分解
2022-02-17 06:14:32

我正在使用 SGD 矩阵分解 (python) 使用 movielens 数据集来提出建议。我有一个网站,允许用户就某项目是否是对特定电影的好推荐提供正面或负面的反馈。

我想知道是否可以在矩阵分解中使用此反馈。我不是 100% 确定我将如何进行。

所以例如我会有一个像

  m1 m2 m3
m1 0 0  0
m2 5 0 -4
m3 0 0  0

其中 m2-m1 的得分为 5,因此在没有人将其评为负面的示例案例中,有 5 个人认为它很好。m2-m3 的另一个是-4,所以建议很差。

任何帮助将不胜感激。

编辑:来自答案的回应

我目前正在对用户项目评分使用稀疏矩阵,并且正在使用偏差。

我一直在尝试添加其他输入源,并使用以下内容创建包含流派表示的属性矩阵:

for genre in item_genres:
       genres[genre] = 1
       self.attribute_item_matrix[i] = sum(list(genres.values()))


 pred = self.global_mean + self.bias_user[u] + self.bias_item[i] +np.dot(self.P[u, :],(self.Q[:, i]+self.attribute_item_matrix[i]))

但是,我认为这是不正确的,因为它最终会失败并导致 nan 错误。

我一直在关注这篇论文《推荐系统的矩阵分解技术》

谢谢

2个回答

在我看来,你最好去user-movie矩阵,创建一个sparse matrix可以更有意义的。通过这样做,如果您已经知道polarity选择,即positivenegativeneutral,您也可能在 的情况下获得一些类似的intensity分数现在,如果您只想将它​​们分类为您可以分别指定当你有很多电影和很多用户时,这种方法可能更有意义。此外,这也可以帮助您建立建立关系。这些关系可以潜在地帮助您了解和探索更多关于.likedislikeratinglikesneutraldislike10-1user-usermovie-usermovie-movierecommendation engines

     m1 m2 m3 m4
u1 -1   0  -1  1
u2  1   1  -1  0
u3  0   0   1  0
u4  -1  1   1   0

如果您想添加rating而不是polarity仅添加,只需添加缩放的数字0-1我亲自为他们编写hybrid recommendation engines嵌入collaborative filtering和模型的代码。context based filtering我建议您更多地研究人际关系,并尝试更多地探索后续步骤,例如偏见的可能性、like电影dislike信息/演员-导演影响的关联以及电影中的相似性等。我希望这个解释能有所帮助。

有一些像这样工作的分解模型,您可以搜索“基于会话”、“基于篮子”、“顺序”等。但他们往往表现不佳。您还可以使用该数据创建分类或回归模型,然后将其与某些混合模型中的常规用户项目评分三元组混合。