微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

推荐系统相似性计算

推荐系统中常用的相似度计算方法

1. pearson correlation coefficient

计算两个变量之间存在的线性关系(积矩相关系数)

\rho_{(X,Y)}=\frac{cov(X,Y)}{\sigma_x \sigma_y}=\frac{\sum(X-\overline{X}(Y-\overline{Y})}{\sqrt{\sum(X-\overline{X})^2\sum(Y-\overline{Y})^2}}~~~~~~(1)

该式计算简单,但必须满足一定的条件(依赖于线性回归模型):

1. 两个变量之间有线性关系;

这个可以通过变量之间的散点图看出来。

2. 变量是连续变量;

3. 变量均符合正态分布,且二元分布也符合正态分布;

这个可以通过R 语言的shapiro.test命令进行检验,P值大于0.05说明数据是正态的。

4. 两个变量独立。

则基于pearson 相关系数的用户之间相似度公式:

sim_{u,v}=\frac{\sum_{i=1}^m(r_{u,i}-\overline{r_u})(r_{v,i}-\overline{r_v})}{\sigma_u\sigma_v}~~~~~~(2)

基于皮尔森相关系数的相似度有两个缺点:

(1) 没有考虑(take into account)用户间重叠的评分项数量对相似度的影响;

(2) 如果两个用户之间只有一个共同的评分项,相似度也不能被计算。

2. spearman rank correlation coefficient

当待分析的数据不满足上述四个条件的时候,可以考虑使用秩相关(rank correlation),也称为等级相关的方法来描述两个变量之间的关联程度。

假设两个随机变量分别为X、Y(也可以看做两个集合),它们的元素个数均为N,两个随即变量取的第

i(1<=i<=N)

个值分别用

X_i,Y_i

表示。对X、Y进行排序(同时为升序或降序),得到两个元素排行集合x、y,其中元素

x_i,y_i

分别为

X_i

在X中的排行以及

Y_i

在Y中的排行。将集合x、y中的元素对应相减得到一个排行差分集合d,其中

d_i=x_i-y_i,1<=i<=N

随机变量X、Y之间的斯皮尔曼等级相关系数可以由x、y或者d计算得到。

由排行差分集合d计算而得:

\rho=1-\frac{\sum_{i=1}^N d_i^2}{N(N^2-1)}~~~~~~(3)


斯皮尔曼相关度的计算舍弃了一些重要信息,即真实的评分值。但它保留了用户喜好值的本质特性——排序(ordering),它是建立在排序(或等级,Rank)的基础上计算的。

基于spearman等级相关系数的用户之间相似度公式为:

sim_{u,v}=\frac{\sum_{i=1}^m(rank_{u,i}-\overline{rank_u})(rank_{v,i}-\overline{rank_v})}{\sigma_u\sigma_v}~~~~~~(4)

上式中,

rank_{u,i}

代表用户u对物品i的评分在该用户所有评分中的排名(正序or逆序),

\overline{rank_u}

代表用户u的平均评分在所有用户平均评分中的排名。

一般来说,对于基于最近邻的相似度计算中,如果近邻用户在(50-100)之间,则pearson相关系数得到的结果与spearman相关系数得到的结果的准确性(MAE)基本一致[1]。

但是它的执行效率不是非常高,因为斯皮尔曼相关性的计算需要花时间计算并存储喜好值的一个排序(Ranks),具体时间取决于数据的数量级大小。正因为这样,斯皮尔曼相关系数一般用于学术研究或者是小规模的计算。
3. vector similarity ``cosine'' measure,即余弦相似度

这种度量标准,使用两个n维向量之间的夹角来计算相似度。在推荐系统中,将两个物品a、b的评分用对应的评分向量(

\overrightarrow{a},\overrightarrow{b}

)来表示,则其相似度可以定义如下:

sim(a,b)=\frac{\overrightarrow{a} \cdot \overrightarrow{b}}{|\overrightarrow{a}|*|\overrightarrow{b}|}~~~~~~(5)

上式,计算出来的相似度,介于[0,1]之间。基本的余弦方法没有考虑用户评分平均分之值之间的差异,因此计算出来的相似度可靠性差异很大。即余弦相似度更多的是从方向上区分差异,而对绝对的数值不敏感。因此没法衡量每个维数值的差异。

比如用户内容评分,5分制,X和Y两个用户对两个内容的评分分别为(1,2)和(4,5),使用余弦相似度得出的结果是0.98,两者极为相似,但从评分上看X似乎不喜欢这2个内容,而Y比较喜欢,余弦相似度对数值的不敏感导致了结果的误差,需要修正这种不合理性,就出现了调整余弦相似度。

在不改变公式(5)的情况下,可以用评分值相对于平均评分值的偏差取代原始值,即

score_{u-i-new}=score_{u-i}-mean(score_u)~~~~~~(6)

在推荐系统中,余弦相似度一般用于基于物品的相似度计算中。
4. entropy-based uncertainty measure

互信息(Mutual information)是信息论里一种有用的信息度量,它可以看成是一个随机变量中包含的关于另一个随机变量的信息量,或者说是一个随机变量由于已知另一个随机变量而减少的不肯定性(百度百科)。

互信息量定义为:

I(X,Y)=H(X)-H(X|Y)~~~~~~(7)

可以理解成知道了Y后对于减少X的不确定性的贡献。

互信息是一种独立性的度量,若随机变量X与Y边缘独立,则

I(X,Y)=0

,否则

I(X,Y)>0

,且互信息越大,说明两个随机变量越相关。
因此可以利用互信息度量用户间的相似度。

主要思路是,在给定用户V的评分后,计算用户U评分信息的熵的减少量,即计算互信息。
5. 其他方法还有基于欧几里得距离的算法、基于马氏距离的算法,基于mean-squared difference的算法[2]等等,基本上都是基于距离的算法。

另外注意,一般的欧氏距离得到的结果取值范围是[0,

+\infty

],而推荐系统中的相似性一般在[0,1]之间,对于这种情况,最好标准化到[0,1]这一区间。

有实验表明,在基于用户的推荐系统中,pearson 相关系数比其他对比用户方法更胜一筹。

而对于基于物品的推荐系统中,余弦相似度方法表现更好一些。

6. 上述各种度量方法存在的问题

1. 修正的余弦相似度计算方法和相关相似度计算方法(pearson之类)可以看做是计算两向量间线性相关的方法,他们忽略了向量的规范,线性相关并不能完全解释用户评分向量的近似程度。

2. 目前的相似度计算方法其复杂度都比较高,不能很好的满足实时计算的需求。

3. 现有的计算方法忽略了一些对相似度计算重要的影响因素,如两用户共同评分的项目数、以及各自的占比等等。

接下来将探讨这些问题的解决办法。

Reference:

[1]An algorithmic Framework for Performing Collaborative Filtering.

[2]Social information Filtering: Algorithms for Automating``Word of Mout''.

[3] 《个性化推荐系统中相似性度量方法研究》

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐