没有评级的推荐引擎

Recommendation engine without ratings

我已经找到了很多关于 Towards Data Science/ medium/ 等人的文章,他们用 imdb 数据制作推荐引擎(根据用户对电影的评分,我们应该向这些用户推荐什么电影) . 这些文章以 'memory based approaches' 基于用户的内容过滤和基于项目的内容过滤开始。 我的任务是制作一个推荐引擎,因为 none 的西装 真的 关心或知道这件事,我想做最少的事情(这似乎是基于用户的内容过滤)。

问题是,我所有的数据都是二元的(没有评分,只是根据其他用户购买的商品,我们是否应该向类似用户推荐商品 - 这实际上类似于所有媒体文章都有的卡通从彼此那里偷来的,但是 none 的媒体文章给出了如何做到这一点的示例)。

所有文章都使用 Pearson Correlation 或余弦相似度来确定用户相似度,我可以将这些方法与二进制维度(购买或未购买)一起使用吗?如果可以,如何使用,如果不能,是否有不同的方法衡量用户相似度的方法?

我正在与 python 顺便说一句。我在考虑也许使用汉明距离(有什么不好的原因)

看来,在您的情况下,最好的方法是 collaborative filtering. You don't need scores, everything that you need is a user-item interaction matrix. The simplest algorithm, in this case, is Alternating Least Square (ALS)

python 中已经有一些实现。例如,this one。还, PySpark recommendation module.

中有一个实现
  • 基于相似度分数的方法即使在二元维度上也能奏效。当你有分数时,两个相似的用户可能看起来像 [5,3,3,0,1] 和 [4,3,3,0,0],而在你的情况下它会像 [1,1, 1,0,1] 和 [1,1,1,0,0]。
from scipy.spatial.distance import cosine
1 - cosine([5,3,2,0,1],[4,3,3,0,0])
0.961161313666907
1 - cosine([1,1,1,0,1],[1,1,1,0,0]) 
0.8660254037844386
  • 另一种方法是,如果你能得到用户购买产品的次数,这个次数就可以作为评分,然后计算相似度

您拥有的数据是隐式数据,这意味着交互不一定表示用户的兴趣,它只是交互。交互值 1 和交互值 1000 在这种情况下没有区别,它们都没有显示交互,因此基于内存的算法在这里是无用的。如果你不熟悉神经网络,那么你至少要使用矩阵分解技术来使用这些数据做出有意义的推荐,你可以从 surprise library 开始 here 其中有一堆矩阵分解模型。

如果使用 ALS 作为优化技术会更好,但 SGD 也可以完成这项工作。如果你对深度学习没问题,我可以参考迄今为止最好的作品的来源。

我曾经对你这样的数据使用过非负矩阵分解(简称NNMF)算法,结果很不错。