Collaborative Filtering Recommendation

向量之间的相似度

度量向量之间的相似度方法很多了,你可以用距离(各种距离)的倒数,向量夹角,Pearson相关系数等。
皮尔森相关系数计算公式如下:
协同过滤推荐算法 - 西格玛 - 在数据中徜徉
 
 分子是协方差,分子是两个变量标准差的乘积。显然要求X和Y的标准差都不能为0。

因为μX=E(X),σ2X=E(XμX)2=E(X2)E2(X)所以皮尔森相关系数计算公式还可以写成:

协同过滤推荐算法 - 西格玛 - 在数据中徜徉

 当两个变量的线性关系增强时,相关系数趋于1或-1。

 

Pearson相关系数有个特点,它在计算两个数列的相似度时忽略其平均值的差异。比如说有的用户对商品评分普遍偏低,有的用户评分普遍偏高,而实际上他们具有相同的爱好,他们的Pearson相关系数会比较高。用户1对某一个商品的评分是X=(1,2,3),用户2对这三个商品的评分是Y=(4,5,6),则X和Y的Pearson相关系数是0.865,相关性还是挺高的。

  iterm1 ………… itemn
user1 R11   R1n
……   Rij  
userm Rm1   Rmn

用户评分数据矩阵

 

 

基于用户的协同过滤

step1.如果用户i对项目j没有评过分,就找到与用户i最相似的K个邻居(采用Pearson相关系数)

step2.然后用这K个邻居对项目j的评分的加权平均来预测用户i对项目j的评分。 

 

 则
 
 
 
  这各预测方法充分考虑了用户一向的评分习惯是偏高还是偏低,因为用户u的近邻对u产生影响时已经减去了各自的平均值。

 

 

计算用户U1和U2的相似度时并不是去拿原始的评分向量去计算,而是只关注他们的评交集Ix,y,这是因为一个用户只对很少的物品有过评分,这样用户评分向量是个高度稀疏的向量,采用Pearson相关系数计算两个用户的相似度时很不准。

 

基于物品的协同过滤

step1.如果用户i对项目j没有评过分,就把ri,j置为0。找到与物品j最相似的k个近邻(采用余弦距离)

step2.然后用这K个邻居对项目j的评分的加权平均来预测用户i对项目j的评分。

 

商品i和j之间的相似度采用余弦计算: 

 
 预测用户u对商品i的评分:
 
 

其中N是商品i的近邻。

 

由于物品之间的相似度比较稳定,可以离线先算好,定期更新即可。在电商行业这种算法用的比较多。

 

混合协同过滤

所谓的混合算法,主体思路还是基于用户的协同过滤,只是在计算两个用户的相似度时又嵌套了item-based CF思想。

度量用户i和用户j相似度更好的方法是:

1.用户i参与评分的项目集合为I ,用户j参与评分的项目集合为I   ,找到它们的并集Uij=IiIj

2.在集合Uij中用户i未评分的项目是Ni=Uij I,采用item-based CF方法重新估计用户i对Ni中每个项目的评分。

3.这样用户i和j对Uij的评分就都是非0值了,在此情况下计算他们的相似度。

 

 

posted on 2015-08-11 15:37  SigmaZ  阅读(938)  评论(0)    收藏  举报