种1:欧氏距离
我们希望相似度的值在0--1之间变化,并且物品越相似,他们的相似度值也就越大,我们可以用相似度=1/(1+距离)来表示,当距离为0时,相似度为1.0,当距离非常大时,相似度也就趋近于0
种2:皮尔逊相关系数(pearsoncorrelation)
它度量的是两个向量之间的相似度。它相对于欧氏距离的一个优势是:它对用户评级的量级并不敏感。比如:一个狂躁者对所有物品的评分都是5分,而另一个忧郁着对所有物品的评分都是1分,它会认为这两个向量是相等的。在Numpy中,它的计算是由函数corrcoef进行的。可以看代码实现
种3:余弦相似度(cosinesimilarity)
计算的是两个向量夹角的余弦值.如果夹角为90度,则相似度为0;如果两个向量的方向相同,则相似度为1.0。我们采用两个向量的预选相似度的定义如下:
python实现程序:
#coding:utf-8
from numpy import *
from numpy import linalg as la
#欧式距离
def ecludSim(inA, inB):
return 1.0/(1.0 + la.norm(inA - inB))
#皮尔逊相关系数
def pearsSim(inA, inB):
if len(inA) < 3 : return 1.0
return 0.5+0.5*corrcoef(inA,inB,rowvar=0)[0][1]
#余弦相似度
def cosSim(inA, inB):
num = float(inA.T*inB)
denom = la.norm(inA)*la.norm(inB)
return 0.5+0.5*(num/denom)
python2中是实现