8

我正在设计一个网站,围绕基于用户的口味向用户推荐各种项目的概念而构建。 (即他们评分的项目,添加到收藏夹列表中的项目等)。其中一些例子是Amazon,Movielens和Netflix。构建协作过滤/推荐系统

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

我看过Grouplens.org中的一些出版物,特别是“Towards a Scalable kNN CF Algorithm: Exploring Effective Applications of Clustering”。 (pdf)我很了解所有内容,直到第5页“Prediction Generation”

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

回答

8

Programming Collective Intelligence是一个真正用户友好的介绍,在Python中有很多示例代码。至少,这将有助于为理解关于该主题的学术论文中的数学奠定基础。

+0

感谢您的书籍​​建议! – John 2009-10-04 18:19:57

5

Algorithm of the Intelligent Web(H Marmanis,D Babenko,Manning出版)是subjet的介绍性文字。它也包括搜索概念,但它的主要重点是分类,推荐系统等。这对你的项目应该是一个很好的入门书,让你可以提出正确的问题,并且深入挖掘事情在你的情况下看起来更有前途或更实际的地方。本书还包括相关数学主题(主要是线性代数)的“复习”,但这个复习很少;你会在网上做的更好。

一个愉快的方式来发现或回到线性代数是遵循MIT开放式课件的Prof. Gilbert Strand's 18.06 lecture series

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

+1

谢谢,我会看看这本书。并感谢系列讲座。 – John 2009-10-04 18:23:40

10

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

输入:

  • 训练数据:用户,项目和用户的收视率这些项目(不 个不一定每个用户级别的全 项目)
  • 目标用户:随着一些项目
  • 目标项目一些收视率新用户:不是目标用户评分的项目,我们想 预测评级为了它。

输出:

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

这可以被重复用于一束项,然后我们返回的N顶部项目(最高预测评级)

程序:
该算法非常类似于天真KNN方法(搜索所有培训数据以找到与目标用户具有相似评分的用户,然后合并他们的评分以进行预测[投票])。
随着用户数量增加,这种简单的方法不能很好地扩展。

提出的算法是先训练用户聚类为ķ含量(谁额定项目同样人一组),其中ķ < < ññ是用户的总数)。
然后我们扫描这些集群,找出目标用户最接近哪一个(而不是查看所有的训练用户)。
最后,我们选择l其中,我们做我们的预测作为平均加权的距离这些l集群。

请注意,使用的相似性度量是correlation系数,聚类算法是平分K-Means算法。我们可以简单地使用标准kmeans,我们还可以使用其他相似性度量标准,如Euclidean distance或余弦距离。

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 

希望这澄清了的东西一点点:)

+1

谢谢,这对我来说都是希腊人。有一天我会回来,这将是有道理的。 :) – John 2009-10-04 18:22:10

0

你可能应该知道:

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

很高兴有:

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

这就是说,你可以只用常识炎等。如果你有一个你希望系统满足的属性列表,只需编写满足这些属性的代码就可以做很多事情。

例子可能是:

  • 永远做一个“坏”的建议
  • 得分是几个参数
  • 单调递增把门弄开了X,Y,Z的改进想法,我们有下线。
0

Abracadabra Recommender APIthe official documentation,你开始通过区分:

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

  • 属性:属性是主题特征的通用术语。这可以是任何事情,它取决于你如何定义主题。在主题是电影的例子中,属性可以是流派,例如,冒险,行动,科幻。一个属性也可能是一个关键字,它出现在这部电影的描述中,演员的名字,电影出版年份等等。你的名字!

  • 用户:顾名思义,这是希望收到某些主题推荐的人。用户通过喜欢属性或主题(以及随后的附加属性)来构建用户配置文件。

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

我们总是需要做的第一件事是填充推荐引擎与主题及其相应的属性。通常这只需要做一次,但它也可以动态完成。例如,如果您正在推荐文章,那么您每次将文章添加到您的网站或博客时都可能会这样做。

第二步是输入用户的偏好。加上您用户的唯一ID,您可以通过喜欢或不喜欢某些主题或属性来训练推荐系统。例如,用户可能会看到一个电影列表,他/她可以选择给每部电影一个评级。或者,用户可以通过输入他喜欢的属性(例如,哪些流派,关键词,发布日期等)来建立简档。这部分真的取决于你决定和你的项目的逻辑。

一旦系统经过培训(充满了科目和用户的偏好),那么我们可以通过调用引擎为我们提供建议。你可以做一次,但也是动态的(从用户收到每个反馈后,重新训练模型)。随着用户提供更多的反馈,模型变得更好,并且建议接近用户的实际偏好。

请注意,使用Abracadabra Recommender API您只需要发送HTTP调用API以训练模型并接收建议。可以使用任何语言访问API,从而可以从您的网站或应用程序(Angular,React,Javascript ...)或您的服务器(NodeJS,Curl,Java,Python,Objective-C,Ruby,.NET ...) 。