关于相似度的计算,是基于向量的计算,也就是计算两个向量的距离,距离越近相似度越大。在推荐系统中,在构建好的“用户_物品”偏好的二维矩阵中,可以将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度,也就是距离,也可以将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度。相似度的计算方法包括:基于余弦相似度、欧几里得距离、皮尔逊相关系数、曼哈顿距离和对数似然相似度等方法。
欧几里得距离(又称欧式距离)指在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。欧式距离公式如下:
欧几里得距离计算相似度很简单,容易理解。用户u和用户v对物品的评分分别为xi、yi,计算欧式距离用公式带入即可。计算出来的欧几里得距离是一个大于0的数,为了使其更能体现用户之间的相似度,可以把它规约到(0,1]之间,具体做法为:1/(1+d)。只要至少有一个共同评分项,就能用欧几里得距离计算相似度。欧几里得距离计算出来的值越小表示越相似,如果两者之间没有共同评分,那么欧几里得距离也就失去了作用。同时在处理一些受主观影响太大的评分数据时,效果会不太好。因此,当用户评价较少或者相对于平均水平偏离很大的时候,不适合使用基于欧几里得算法揭示出来的真实相似度。
欧几里得距离是解析几何中最常用的一种计算方法,但是计算起来相对比较复杂,需要经过平方、加和,再开方。曼哈顿距离的相似度计算公式比欧式计算公式看起来简单很多,只需要把两个点坐标的x坐标相减取绝对值,y坐标相减取绝对值,再加和即可。曼哈顿距离公式如下:
曼哈顿距离是欧几里得距离的简化,因此当用户偏好数据集中某些特征值很大时,如果用曼哈顿距离计算相似度,这些特征会掩盖其他特征间的邻近关系。
用户u和用户v之间的相似性通过向量间的余弦夹角度量,余弦值越大表明两个用户的相似程度越高。通过用户对资源的评分计算用户相似度过程如下:用户u和用户v对项目的评分可以由向量 、 分别表示,rui表示用户u对项目i的评分,若用户对项目没有进行评分,则将用户对该项目的评分设为0,则用户u、v对资源的评分之间的相似性Sim( , )可以用下面的公式计算:
余弦相似度用向量夹角的余弦值作为度量两个个体间差异的大小。余弦相似度是从方向上区分差异,而对绝对值不敏感,更多地用于使用用户对内容评分来区分兴趣的相似度和差异上,同时修正了用户间可能存在的度量标准不统一的问题。
以一个实际的例子来介绍一下其中的计算过程:假设有商品全集I={ a,b,c,d,e,f },其中A用户偏好商品{ a,b,c },B用户偏好商品{ b,d },那么有如图2-5矩阵。
图 2-5 对数似然相似性度量矩阵图
k 11 表示用户A和用户B的共同偏好的商品数量,显然只有商品 b ,因此值为 1。
k 12 表示用户A的特有偏好,即商品{ a,c },因此值为 2。
k 21 表示用户B的特有偏好,即商品 d ,因此值为 1。
k 22 表示用户A、B的共同非偏好,有商品{ e,f },值为 2。
此外我们还定义以下变量 N = k 11 + k 12 + k 21 + k 22 ,即总商品数量。
计算步骤如下:
(1)计算行熵
(2)计算列熵
(3)计算矩阵熵
(4)计算相似度
对数似然相似度处理无打分的偏好数据时,效果较好。
由于华东师范大学图书馆数据存在数据稀疏性问题,系统使用无偏好值的协同过滤推荐算法。针对无偏好值的推荐,最好的相似度量是对数似然相似性度量。Apache Mahout对数似然相似性度量源码如下所示:
系统需要使用Apache Mahout提供的推荐系统工具库,它主要面向开发人员,以API调用的方式提供服务。Apache Mahout能够为开发个性化推荐应用提供基础的、高效的代码库支持,降低应用开发的风险。