collaborative filtering协同过滤

每次我想看电影的时候,都会去问我的朋友,小健。一般他推荐的电影,我都比较喜欢。显然不是所有人都有小健这样的能力。因为我碰巧和小健有类似的品味。

这个生活中的经验,实际上有着广泛的用途。

当系统需要为某个人做出推荐时,一种机器学习的算法是这样工作的:就是在一大群人中找出一部分与他品味类似的人,把这些人的喜欢的东西排序,然后推荐给他。

自然引出两个问题:

  1. 谁是与他相近品味的人;
  2. 怎么对这些人喜欢的东西排序;

对于上述两个问题有多种不同的答案,不同的答案意味着不同的算法。

---

问题1的答案有两种:

  1. 欧拉距离;给定n个物体,两人分别打分{S1}{S2},那么欧拉距离就是S1和S2的各个元素只差的平方和;
  2. pearson相关系数。给定n个物理,两个人对他们的评分一致的程度可以通过这个系数进行衡量。下图每个名词所代表的点表示两个人给定分数(x,y),可以看到右图中点的位置更靠近直线,这说明右图中两人的评分的趋势更加接近,虽然分数的绝对值不同。:

image  image

可以想象,如果两个人,一个比较刻薄,一个比较慷慨,使用#2比#1更容易发现被评价物体的特征。

-------

问题2的回答是什么呢?

一种常见的办法是对每个推荐物体进行推荐值的加权求和:比如有个人相似度为90%,这个人推荐这个物体的值是80分,那么他贡献了80*0.9=72。

image

对上图来说,经过排序就能得到最被推荐的物体了。

显然上述的逻辑在于,和你相似的人推荐的东西更符合你的心意。

原文地址:https://www.cnblogs.com/alphablox/p/5366164.html