构建协同过滤/推荐系统(Building a Collaborative filtering / R

2019-08-17 05:40发布

我在设计是围绕推荐不同的项目,以根据自己的口味用户的概念,建立了一个网站的过程。 (即项目已评,项目添加到他们的收藏列表等)的一些例子是亚马逊,Movielens,和Netflix。

现在,我的问题是,我不知道在哪里的问候开始了系统的数学部分。 我很愿意学习的需要的数学,它只是我不知道需要什么类型的数学。

我已经看了几个在出版物上的Grouplens.org ,特别是“ 建立一个可扩展的kNN CF算法:探索集群的有效应用 。” (PDF),我在理解一切还不错,直到第5页“预测生成”

附言:我不正是在寻找什么事情的解释,尽管这可能会有帮助,但我更感兴趣的是数学,我需要知道。 这样我可以理解这是怎么回事。

Answer 1:

让我来解释,作者介绍了程序(我的理解它):

输入:

  • 训练数据 :用户,项目和用户的收视率这些项目(不一定每个用户评级的所有项目)
  • 目标用户 :与某些项目的一些收视率的新用户
  • 目标项目 :不是目标用户评分的项目,我们想预测评级。

输出:

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

这可以重复一堆物品,然后我们返回的N顶级项目(最高预测评级)

程序:
该算法是非常相似的天真KNN方法(搜索所有训练数据来找到类似评级目标用户的用户,然后结合自己的收视率给预测[投票])。
这个简单的方法不会规模非常好,因为用户数量/项增加。

提出的算法是第一个簇的训练用户分为K组(是谁额定项目同样人一组),其中K << N(N是用户总数)。
然后,我们扫描这些集群找出哪一个目标用户是最接近于(而不是看着所有的用户培训)。
最后,我们挑选L out 输出的那些,我们使我们的预测,通过这些l群集中的距离加权平均值。

注意,所使用的相似性度量是相关系数,并且聚类算法是二等分K-means算法。 我们可以简单地使用标准的K均值 ,我们可以使用其他的相似性指标,以及诸如欧氏距离或余弦距离。

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

corr(x,y) = (x-mean(x))(y-mean(y)) / std(x)*std(y)

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

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

希望这澄清了事情有点:)



Answer 2:

集体智慧编程是一个非常人性化的介绍到外地,有很多在Python示例代码。 最起码,这将有助于设置舞台了关于专题学术论文理解数学。



Answer 3:

智能网的算法 (H Marmanis,d Babenko,曼宁出版)是在subjet的介绍文字。 它也包括搜索的概念,但它的主要焦点是与分类,推荐系统和这样的。 这应该是你的项目好底漆,可以让你提出正确的问题,并在事情出现在您的情况更有前途或实际进行深入分析。

书中还包括相关的数学题目“进修”(主要是线性代数),但这种复习是最小的; 你会做在网络上更好。

发现或重新进入线性代数一个愉快的方法是按照教授吉尔伯特Strand的18.06系列讲座上MIT开放课件可用。

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



Answer 4:

你或许应该知道:

  • 线性代数
  • 人工智能/机器学习/统计

很高兴有:

  • 度量空间
  • 拓扑
  • EDA /鲁棒统计
  • 仿射代数
  • 功能分析
  • 图论

这就是说, 你可以只用常识炎等 。 如果你有你想要你的系统,以满足属性的列表,你可以只通过编写满足这些属性的代码做了很多。

例子可能是:

  • 从来没有做一个“坏”的建议
  • 得分在几个参数单调递增
  • 保持敞开大门,因为我们有向下行X,Y,Z改进意见。


Answer 5:

从官方文档中的胡言乱语导购API ,你开始通过区分:

  • 主题 :这是您要推荐给用户的实体。 电影或文章例如一个主题。 受试者被特征在于它们具有区分它们的各种对象之间的某些属性或内容。

  • 属性 :一个属性是对象的特性的总称。 这可以是任何东西,它真的取决于你如何定义的主题。 在被摄体是电影的例子,属性可以是流派,如冒险,动作,科幻。 属性可能是也存在于这部电影的描述中的关键词,演员名字,全年电影出版等你的名字!

  • 用户 :顾名思义,这是一个希望接收某些科目的建议的人。 用户建立通过喜欢属性或受试者(并且随后将附接属性)的用户简档。

  • 有一个通用流程(顺序的东西做),这是相关的任何类型的推荐系统,并且也直观易懂。

我们总是需要做的第一件事是与主体及其相应的属性填写推荐引擎。 这通常只需要进行一次,但它也可以动态地进行。 举例来说,如果你推荐的文章,那么你可能想这一篇文章被添加到您的网站或博客都必须这样做。

第二步骤是输入一个用户的偏好。 与您的用户的唯一ID一起,你可以喜欢或不喜欢某个科目或属性训练推荐系统。 例如,一个用户可能显示的电影列表和他/她被赋予给每个电影评级的选项。 或者,用户可以建立通过输入个人资料,其中的属性,他更喜欢(例如其类型,关键字,发布日期等)。 这部分是真正由你来决定,你的项目的逻辑。

一旦系统已经训练(充满科目和用户的偏好),那么我们就可以调用引擎为我们提供建议。 你可以这样做一次,而且动态(因此再培训你接收来自用户的每个反馈后的模型)。 随着用户提供更多的反馈,该模型变得更好,建议接近用户的实际偏好。

需要注意的是与胡言乱语导购API ,你只需要HTTP调用发送到API训练您的模型,并接受建议。 该API可以使用任何语言从您的网站或应用(角,反应,使用Javascript ...)或您的服务器进行访问,从而(的NodeJS,卷曲,使用Java,Python,Objective-C中,红宝石,.net等) 。



文章来源: Building a Collaborative filtering / Recommendation System