基于用的推荐程序的一个重要的部分是用户相似度(UserSimilarity)实现基于用户的推荐非常依赖这个组件如果对用户的相似性缺乏可靠有效的定义,这类推荐方法是没有意义的这也适用于用户的推荐的"近亲"------基于物品的推荐程序,它同样依赖相似性,今天小编就来聊一聊关于推荐算法-皮尔逊相关系数,推荐算法-皮尔逊相关系数?接下来我们就一起去研究一下吧!

推荐算法-皮尔逊相关系数,推荐算法-皮尔逊相关系数

推荐算法-皮尔逊相关系数,推荐算法-皮尔逊相关系数

探索相似性度量

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

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

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

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

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

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

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

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

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

。例如,两个看过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 in Action

,