构建协作过滤/推荐系统
我正在设计一个网站,围绕基于用户的口味向用户推荐各种项目的概念而构建。 (即他们评分的项目,添加到收藏夹列表中的项目等)。其中一些例子是Amazon,Movielens和Netflix。构建协作过滤/推荐系统
现在,我的问题是,我不知道从哪里开始关于这个系统的数学部分。我愿意学习所需的数学,只是我不知道需要什么类型的数学。
我看过Grouplens.org中的一些出版物,特别是“Towards a Scalable kNN CF Algorithm: Exploring Effective Applications of Clustering”。 (pdf)我很了解所有内容,直到第5页“Prediction Generation”
p.s.虽然这可能会有所帮助,但我并不完全在寻找对发生的事情的解释,但我对我需要知道的数学更感兴趣。这样我就能理解发生了什么。
Algorithm of the Intelligent Web(H Marmanis,D Babenko,Manning出版)是subjet的介绍性文字。它也包括搜索概念,但它的主要重点是分类,推荐系统等。这对你的项目应该是一个很好的入门书,让你可以提出正确的问题,并且深入挖掘事情在你的情况下看起来更有前途或更实际的地方。本书还包括相关数学主题(主要是线性代数)的“复习”,但这个复习很少;你会在网上做的更好。
一个愉快的方式来发现或回到线性代数是遵循MIT开放式课件的Prof. Gilbert Strand's 18.06 lecture series。
线性代数是不是救赎的唯一途径;-)你会发现它很有用刷上基本统计概念,如分布,协方差,贝叶斯推理...
谢谢,我会看看这本书。并感谢系列讲座。 – John 2009-10-04 18:23:40
让我解释的程序是,作者介绍(我的理解它):
输入:
- 训练数据:用户,项目和用户的收视率这些项目(不 个不一定每个用户级别的全 项目)
- 目标用户:随着一些项目
- 目标项目一些收视率新用户:不是目标用户评分的项目,我们想 预测评级为了它。
输出:
- 预测为目标项目由目标用户
这可以被重复用于一束项,然后我们返回的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
希望这澄清了的东西一点点:)
谢谢,这对我来说都是希腊人。有一天我会回来,这将是有道理的。 :) – John 2009-10-04 18:22:10
你可能应该知道:
- 线性代数
- 人工智能/机器学习/统计
很高兴有:
- 度量空间
- 拓扑
- EDA /稳健统计
- 仿射代数
- 功能分析
- 图论
这就是说,你可以只用常识炎等。如果你有一个你希望系统满足的属性列表,只需编写满足这些属性的代码就可以做很多事情。
例子可能是:
- 永远做一个“坏”的建议
- 得分是几个参数
- 单调递增把门弄开了X,Y,Z的改进想法,我们有下线。
从Abracadabra Recommender API的the official documentation,你开始通过区分:
主题:这是您要推荐给用户的实体。例如电影或文章是一个主题。受试者的特征是它们具有某些属性或内容,以区分它们在各个主题之间。
属性:属性是主题特征的通用术语。这可以是任何事情,它取决于你如何定义主题。在主题是电影的例子中,属性可以是流派,例如,冒险,行动,科幻。一个属性也可能是一个关键字,它出现在这部电影的描述中,演员的名字,电影出版年份等等。你的名字!
用户:顾名思义,这是希望收到某些主题推荐的人。用户通过喜欢属性或主题(以及随后的附加属性)来构建用户配置文件。
流量 有一个通用流程(顺序的东西做),这是相关的任何类型的推荐系统,并且也直观易懂。
我们总是需要做的第一件事是填充推荐引擎与主题及其相应的属性。通常这只需要做一次,但它也可以动态完成。例如,如果您正在推荐文章,那么您每次将文章添加到您的网站或博客时都可能会这样做。
第二步是输入用户的偏好。加上您用户的唯一ID,您可以通过喜欢或不喜欢某些主题或属性来训练推荐系统。例如,用户可能会看到一个电影列表,他/她可以选择给每部电影一个评级。或者,用户可以通过输入他喜欢的属性(例如,哪些流派,关键词,发布日期等)来建立简档。这部分真的取决于你决定和你的项目的逻辑。
一旦系统经过培训(充满了科目和用户的偏好),那么我们可以通过调用引擎为我们提供建议。你可以做一次,但也是动态的(从用户收到每个反馈后,重新训练模型)。随着用户提供更多的反馈,模型变得更好,并且建议接近用户的实际偏好。
请注意,使用Abracadabra Recommender API您只需要发送HTTP调用API以训练模型并接收建议。可以使用任何语言访问API,从而可以从您的网站或应用程序(Angular,React,Javascript ...)或您的服务器(NodeJS,Curl,Java,Python,Objective-C,Ruby,.NET ...) 。
感谢您的书籍建议! – John 2009-10-04 18:19:57