从Non-Personalize Recommendation到User-User Collaborative Filtering
考虑这样一个最简单的问题:向一个用户
u
推荐商品
ru,i=Σk≠urk,iN
其中,
N
为用户总数。显然,这个模型太过简单,为此,可从以下两个地方加以改进:
- 考虑评分用户与目标用户的相似度
- 考虑用户的评分习惯
对于第一个问题,我们建立一个通用的模型,即:
用户间的相似度
sim(k,u)=Σi(rk,i−rk¯)(ru,i−ru¯)σkσu
该相关系数描述了两个变量之间的线性关系。即若
sim(k,u)=1
,则用户
k
和用户事实上,Pearson系数就是余弦系数去中心化的结果,因此,可以视作余弦相似度的一个 特殊情况。
若用户 u 与用户
第二个问题主要是由于用户评分习惯不同导致的。有些用户习惯打高分,评分均值较高,而有些用户习惯打低分,评分均值较低。为了避免这一情况对预测结果的影响,我们可以用所谓的去中心化来解决。即用评分值减去用户评分均值得出评分偏移代替原评分进行计算,即:
User-User CF使用注意事项及其缺点
加权邻居个数的选择
在User User CF算法中,邻居用户是用来计算加权评分的。一般邻居用户的选择方法有如下几种:
- 所有邻居
- 相似度(或者距离)超出某一阈值的邻居
- 随机选择的邻居
- Top N的邻居
从理论上来说,邻居越多,预测结果越精确,但在实际中,不相似的用户可能会带来大量的噪声,使得预测的精确度变低,因此一般选择25~30个邻居用户较为合适。
评分正则化
正如上文所述,用户评分习惯的不同,导致了用户评分分布的不同,而这种不同会对我们最终的预测结果造成较大的影响。除了上文提到的去中心化这一方法之外,还可以使用Z score进行正则化,z score的定义如下:
z(k,i)=rk,i−rk¯σk
缺点分析
User User CF算法的一个最主要的缺点是计算复杂度。假设现在有
m
个用户,
计算项目 | 时间复杂度 |
---|---|
计算两个用户的相似度 | O(n) |
计算一个用户与所有用户间的相似度 | O(mn) |
计算所有用户间的相似度 | O(m2n) |
进行推荐 | O(mn) |
尽管可以通过缓存或者减少邻居个来尽可能减少计算量,性能问题仍然是User User CF的一个瓶颈。