读书笔记《集体智慧编程》Chapter 2 : Make Recommendations

本章概要
本章主要介绍了两种协同过滤(Collaborative Filtering)算法,用于个性化推荐:
  • 基于用户的协同过滤(User-Based Collaborative Filtering,又称 K-Nearest Neighbor Collaborative Filtering)
  • 基于条目的协同过滤(Item-Based Collaborative Filtering)
本章还介绍两种向量相似性算法:
  • 欧氏距离(Euclidean Distance)
  • 皮尔斯稀疏(Pearson Coefficient)
 
协同过滤
协同过滤是在一大群用户中寻找一些与你的用户相似的用户,然后将这些找到的用户使用过但是你没有使用过的物品(如电影,书籍,商品)推荐给你的用户,因为你与这些用户具有类似的爱好。
 
相似度算法
欧氏距离是平面几何距离的n维扩展,值越大,越不相似,为了使得当距离越大时,越相似,需要对其欧氏距离转换,转换方式如下:
euc-dist(x,y)  ===>    1/(1+euc-dist(x,y))
皮尔斯系数可以描述两个向量的相关性,表示的两个向量在二维坐标上分布为一条直线的程度,值在-1~1之间,越大,越相关。皮尔斯稀疏可以修复分数通胀(grade inflation)问题,举个例子,A,B两个用户具有集齐相似的兴趣,只是A打分相对较严格,一般比平均分低一分,但是A与B的pearson系数却可以完美的为1.这种特性根据你的应用而定,可能会需要,至少在电影推荐的例子上是需要的,但是其他例子里面可能不需要.
 
User-Based Collaborative Filtering (or the K-Nearest Neighbor Collaborative Filtering)
计算你其他人所有人相似度,取前k个。
在k个人中,取出我没有看过的电影,然后根据相似度与对应用户对电影的打分成绩,作加权平均值,分值越大,代表我可能越有兴趣额。
这是一个通用算法,可以讲商品,替换电影打分,那么就可以推断我可能感兴趣的商品。返回来也可以,可以根据商品推断潜在购买者。抽象为下面的关系:
  • 用户:影评 --> 推荐电影
  • 影评:用户 --> 预测其他用户影评(没多大意义)
  • 用户:商品 --> 推荐商品
  • 商品:用户 --> 潜在购买用户    商品之间的关系相对stable,相比于人之间的关系
 
 
Item-Based Collaborative Filtering(基于条目的系统过滤)
基于用户的协同过滤最大的问题在于性能,计算量太大,当用户陡增时无法做到实时推荐。因为每次推荐都要计算k个最近的用户,开销很大。
 
基本条目过滤的思路:计算出条目之间的相似性(相对稳定,可以在空闲时间计算),然后将根据用户用过的条目和该条目对应用户没有用过的条目,计算加权平均值,推荐给用户。
最大的好处是条目之间的关系相对稳定,可以提前计算。而且条目计算的结果可以优化,只计算每个条目最相似的k个条目,k << n(总体条目数)。
相比于基于用户的协同顾虑,它更适合于稀疏矩阵。
基于条目的协同过滤,可以参见论文《Item-Based Collaborative Filtering Recommendation Algorithms
更具此问题,基于条目的协同过滤比基于用户的系统过滤更准确。
 
posted @ 2012-11-11 18:33  bourneli  阅读(554)  评论(0编辑  收藏  举报