collaborative filtering协同过滤
每次我想看电影的时候,都会去问我的朋友,小健。一般他推荐的电影,我都比较喜欢。显然不是所有人都有小健这样的能力。因为我碰巧和小健有类似的品味。
这个生活中的经验,实际上有着广泛的用途。
当系统需要为某个人做出推荐时,一种机器学习的算法是这样工作的:就是在一大群人中找出一部分与他品味类似的人,把这些人的喜欢的东西排序,然后推荐给他。
自然引出两个问题:
- 谁是与他相近品味的人;
- 怎么对这些人喜欢的东西排序;
对于上述两个问题有多种不同的答案,不同的答案意味着不同的算法。
---
问题1的答案有两种:
- 欧拉距离;给定n个物体,两人分别打分{S1}{S2},那么欧拉距离就是S1和S2的各个元素只差的平方和;
- pearson相关系数。给定n个物理,两个人对他们的评分一致的程度可以通过这个系数进行衡量。下图每个名词所代表的点表示两个人给定分数(x,y),可以看到右图中点的位置更靠近直线,这说明右图中两人的评分的趋势更加接近,虽然分数的绝对值不同。:
可以想象,如果两个人,一个比较刻薄,一个比较慷慨,使用#2比#1更容易发现被评价物体的特征。
-------
问题2的回答是什么呢?
一种常见的办法是对每个推荐物体进行推荐值的加权求和:比如有个人相似度为90%,这个人推荐这个物体的值是80分,那么他贡献了80*0.9=72。
对上图来说,经过排序就能得到最被推荐的物体了。
显然上述的逻辑在于,和你相似的人推荐的东西更符合你的心意。