相似度的計算



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中是實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章