建立协作过滤/推荐系统

Joh*_*ohn 8 math coldfusion recommendation-engine collaborative-filtering

我正在设计一个网站,该网站围绕着根据用户的口味向用户推荐各种商品的概念而构建.(即他们评价的项目,添加到收藏夹列表中的项目等).这方面的一些例子是亚马逊,Movielens和Netflix.

现在,我的问题是,我不知道从这个系统的数学部分开始.我愿意学习所需的数学,只是我不知道需要什么类型的数学.

我查看了Grouplens.org上的一些出版物,特别是" 迈向可扩展的kNN CF算法:探索群集的有效应用".(pdf)我很擅长理解所有内容,直到第5页"预测生成"

ps我不是在寻找对正在发生的事情的解释,虽然这可能会有所帮助,但我对我需要知道的数学更感兴趣.这样我就可以理解发生了什么.

Amr*_*mro 11

让我解释作者介绍的程序(据我理解):

输入:

  • 培训数据:这些项目的用户,项目和用户评级(不一定每个用户评定所有项目)
  • 目标用户:具有某些项目评级的新用户
  • 目标项目:目标用户未评级的项目,我们希望预测其评级.

输出:

  • 目标用户对目标项目的预测

这可以针对一堆项目重复,然后我们返回N-top项目(最高预测评级)

程序:
该算法与天真的KNN方法非常相似(搜索所有训练数据以找到对目标用户具有相似评级的用户,然后将他们的评级结合起来给出预测[投票]).
随着用户/项目数量的增加,这种简单的方法不能很好地扩展.

所提出的算法是首先将训练用户聚类成K组(类似地对项目进行评级的人群),其中K << N(N是用户的总数).
然后我们扫描这些集群以找出目标用户最接近哪一个(而不是查看所有培训用户).
最后我们挑出者,我们使我们的预测由那些距离加权平均集群.

注意,使用的相似性度量是相关系数,并且聚类算法是二等分K-Means算法.我们可以简单地使用标准kmeans,我们也可以使用其他相似性度量,例如欧几里德距离或余弦距离.

第5页的第一个公式是相关性的定义:

corr(x,y) = (x-mean(x))(y-mean(y)) / std(x)*std(y)
Run Code Online (Sandbox Code Playgroud)

第二个公式基本上是加权平均值:

predRating = sum_i(rating_i * corr(target,user_i)) / sum(corr(target,user_i))
               where i loops over the selected top-l clusters
Run Code Online (Sandbox Code Playgroud)

希望这能澄清一点点:)


dcr*_*sta 8

编程集体智能是一个真正用户友好的介绍,在Python中有很多示例代码.至少,它将有助于为理解关于该主题的学术论文中的数学奠定基础.


mjv*_*mjv 5

智能网的算法(H Marmanis,D Babenko,Manning publishing)是关于子喷射的介绍性文本.它还涉及搜索概念,但其主要重点是分类,推荐系统等.这应该是您的项目的一个很好的入门,让您可以提出正确的问题,并深入挖掘在您的情况下看起来更有前途或更实际的事情.

这本书还包括相关数学主题(主要是线性代数)的"复习",但这个复习是最小的; 你会在网上做得更好.

一个愉快的发现或回到线性代数的方法是跟随吉尔伯特斯特兰德教授在麻省理工学院开放式课程中提供的18.06系列讲座.

线性代数不是获得救赎的唯一途径;-)你可能会发现有用的是了解基本的统计概念,如分布,协方差,贝叶斯推理......