推荐算法-皮尔逊相关系数的相似度

探索相似性度量

  基于用的推荐程序的一个重要的部分是用户相似度(UserSimilarity)实现。基于用户的推荐非常依赖这个组件。如果对用户的相似性缺乏可靠有效的定义,这类推荐方法是没有意义的。这也适用于用户的推荐的“近亲”------基于物品的推荐程序,它同样依赖相似性。

基于皮尔逊相关系数的相似度

皮尔逊相关系数是一个介于-1和1之间的数,它度量 两个一一对应数列之间的线性相关程度。也就是说,它表示两个数列中对应数字一起增大或者一起减小的可能性。它度量数字一起按比例改变的倾向性,也就是说两个数列中的数字存在一个大致的线性关系。当该倾向性强时,相关值趋于1。当相关性很弱时,相关值趋于0。在负相关的情况下一个序列的值很高而另一个序列的值低---相关趋势趋于-1

 

 注意: 1、皮尔逊相关系数是两个序列协方差与两者方差乘积的比值。

        2、协方差计算的是两个序列变化趋势一致的绝对量。当两个序列相对于各自的均值点向同一个方向移动得越远,协方差就越大。除以方差则是为了对这一变化进行归一化。

这一统计学中广泛使用的概念,同样可以用于度量用户之间的相似性。它度量两个用户针对同一物品的偏好值变化趋势的一致性(都偏高或者都偏低)。

例如:

1,101,5.0

1,102,3.0

1,103,2.5

 

2,101,2.0

2,102,2.5

2,103,5.0

2,104,2.0

 

 

3,101,2.5

3,104,4.0

3,105,4.5

3,107,5.0

 

4,101,5.0

4,103,3.0

4,104,2.5

4,106,4.0

 

5,101,4.0

5,102,3.0

5,103,2.0

5,104,4.0

5,105,3.5

5,106,4.0

我们注意到用户1和用户5看起来相似,因为他们的偏好值一同改变。对于物品101,102,103他们大体一致,101最好,102略差,103不理想。类似的用户1和用户2不那么相似。注意关于用户1的分析不包括104-106,因为用户对他们的偏好是未知的。相似度的计算仅能在用户都表达了偏好的物品上进行。

在用户1和其它用户之间基于3个共有物品的皮尔逊相关系数

 

101

102

103

与用户1的相关性

用户1

5.0

3.0

2.5

1.000

用户2

2.0

2.5

5.0

-0.764

用户3

2.5

-

-

-

用户4

5.0

-

3.0

1.000

用户5

4.0

3.0

2.0

0.945

 

皮尔逊相关系数存在的问题

尽管结果很直观,但某些情况下皮尔逊相关系数在推荐引擎中表现的很奇怪。

首先,它没有考虑两个用户同时给出偏好值得物品数目,在推荐引擎中可能不太可靠

。例如,两个看过200部相同的电影的用户,即便他们给出的评分偶尔不一致,但可能要比两个尽看过两部相同的用户更相似。这在上面的数据中有体现;注意用户1和5对三个共同商品表达了偏好,他们的品味看似比较相近。但是,用户1和4的交集仅包含两个物品,却得到了1.0这个更高的相关值。这有点不符合常规。

      其次,基于该计算的定义,如果两个用户的交集仅包含一个物品,则无法计算相关性。这也是没有计算用户1和3之间的相关性的原因。在小的或稀疏的数据集上,这个问题就凸显出来了。因为其中用户的物品集很少重叠。当然,这可能也是一种优点,直观上讲,如果两个用户的交集仅有一个物品的话,他们可能并不太相似。

最后,只要任何一个序列中出现偏好值相同的情况(此时该序列方差为0,导致皮尔逊相关计算公式的分母为0)。相关系数都是未定义(undefined).这种情况并不需要两个序列中的偏好值都完全一样。例如,若用户5对所有三个物品的偏好值都是3.0。即使用户1有3.0以外的偏好值,也无法计算用户1和用户5之间的相似度(因为皮尔逊相关系数将是未定义的)。这一问题同样很可能出现在两个用户的偏好交集很小的情形。

尽管皮尔逊相关系数在早期关于推荐系统的论文中很常见,并且在很多介绍推荐系统的书中被提及,但它未必是最优的。当然,它不差;你只需理解它是如何工作打的。

引入权重

为了解决上述的问题,我们可以在计算的基础上提供扩展,即加权

皮尔逊相关系数并不直接反映其用到的物品数目。而我们是需要这个数字的。考虑的信息越多,所得到的相关结果越可靠。为了体现这一点,最好在基于较多物品计算相关系数时,使正相关值向1.0偏移,而使负相关向-1.0偏移。或者在基于较少物品计算相关系数时,可以让相关值向偏好值的均值偏移;这与前面的效果类似但实现会比较复杂,因为它需要记录用户对的平均偏好值。

 

你可能感兴趣的:(Mahout)