8

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

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

我查看了Grouplens.org上的一些出版物,特别是“ Towards a Scalable kNN CF Algorithm: Exploring Effective Applications of Clustering ”。(pdf) 在第 5 页“预测生成”之前,我非常擅长理解所有内容

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

4

5 回答 5

11

让我解释一下作者介绍的程序(据我了解):

输入:

  • 训练数据:用户、项目以及用户对这些项目的评分(不一定每个用户都对所有项目评分)
  • 目标用户:对某些商品有一定评分的新用户
  • 目标项目:目标用户未评级的项目,我们希望预测它的评级。

输出:

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

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

过程:该算法与朴素KNN
方法 非常相似(搜索所有训练数据以找到与目标用户评分相似的用户,然后结合他们的评分进行预测 [voting])。 随着用户/项目数量的增加,这种简单的方法不能很好地扩展。

提出的算法是首先将训练用户分成K组(对项目进行相似评分的人的组),其中K << NN是用户总数)。
然后我们扫描这些集群以查找目标用户最接近哪一个(而不是查看所有训练用户)。
最后,我们从中挑选出l个,并将我们的预测作为与这l个集群的距离加权的平均值。

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

第 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

希望这能澄清一点:)

于 2009-10-03T03:18:29.170 回答
8

Programming Collective Intelligence是对该领域的真正用户友好的介绍,其中包含大量 Python 示例代码。至少,它将有助于为理解有关该主题的学术论文中的数学奠定基础。

于 2009-10-03T02:36:55.260 回答
5

智能网络算法(H Marmanis,D Babenko,Manning 出版)是关于 subjet 的介绍性文本。它还涵盖了搜索概念,但主要关注分类、推荐系统等。这应该是您项目的一个很好的入门书,让您可以提出正确的问题,并深入挖掘在您的情况下看起来更有希望或更实用的地方。

本书还包括相关数学主题(主要是线性代数)的“复习”,但这种复习很少;你会在网络上做得更好。

发现或回归线性代数的一种愉快方式是遵循Gilbert Strand 教授的 18.06 讲座系列,可在 MIT OpenCourseWare 上找到。

线性代数不是拯救的唯一方法;-) 你可能会发现复习基本的统计概念很有用,比如分布、协方差、贝叶斯推理......

于 2009-10-03T02:46:28.347 回答
1

你可能应该知道:

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

很高兴有:

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

就是说,您可以仅凭常识走得很远。如果您有一个您希望系统满足的属性列表,您只需编写满足这些属性的代码就可以做很多事情。

示例可能是:

  • 永远不要提出“坏”的建议
  • 分数在几个参数中单调递增
  • 为我们未来的 X、Y、Z 改进理念敞开大门。
于 2011-03-14T05:14:56.550 回答
1

Abracadabra Recommender API的官方文档中,您首先要区分:

  • 主题:这些是您希望向用户推荐的实体。例如,一部电影或一篇文章是一个主题。主题的特点是它们具有某些属性或内容,可以区分不同的主题。

  • 属性:属性是主题特征的通用术语。这可以是任何东西,这实际上取决于您如何定义主题。在主题是电影的示例中,属性可以是类型,例如冒险、动作、科幻。属性也可以是出现在这部电影描述中的关键字、演员姓名、电影出版年份等。你可以命名它!

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

  • 流程 有一个与任何类型的推荐系统相关的通用流程(完成工作的顺序),并且直观地易于理解。

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

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

一旦系统经过训练(填充了主题和用户的偏好),我们就可以调用引擎为我们提供建议。您可以执行一次,也可以动态执行(因此在收到用户的每次反馈后重新训练模型)。随着用户提供更多反馈,模型变得更好,并且推荐更接近用户的实际偏好。

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

于 2017-04-27T17:19:24.537 回答