相似度的计算

来源:互联网 发布:服务器带宽测试软件 编辑:程序博客网 时间:2024/05/01 13:15


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中是实现

0 0
原创粉丝点击