python 學習筆記(相似性計算方法)

2021-07-08 11:22:53 字數 2381 閱讀 9118

實在不能理解為啥搜狗輸入法每次我打biji的時候總是給我跳出荸薺(qi) (づ ̄ 3 ̄)づ,還有biaoshi,總是出標識(zhi)..╭(╯^╰)╮哼

我們要計算兩個人的品味相似程度,首先要找到有沒有相同的item,如果沒有,那麼則返回0

si={}

foritem

in prefs[person1]:

ifitem

in prefs[person2]:

si[item]=1

iflen(si)==0:

return

0

如果有相同的item,我們得到相應的score,可以計算其歐式距離:

totalsum=sum([pow(prefs[person1][item]-prefs[person2][item],2) for item in prefs[person1] if item in prefs[person]])
因為要返回乙個0-1值的函式,0代表很差,1代表口味完全相同,而上述的歐式距離是距離越小口味越相近,距離為0時口味相同

return

1/(1+sqrt(totalsum))

def pearson_distance(prefs,p1,p2):

si={}

foritem

in prefs[p1]:

ifitem

in prefs[p2]:

si[item]=1

n=len(si)

if n==0:

return

0 sum1=sum([prefs[p1][it] for

itin si])

sum2=sum([prefs[p2][it] for

itin si])

sum1sq=sum([pow(prefs[p1][it],2) for

itin si])

sum2sq=sum([pow(prefs[p2][it],2) for

itin si])

sumco=sum([prefs[p1][it]*prefs[p2][it] for

itin si])

num=sumco-sum1*sum2/n

num2=sqrt((sum1sq-pow(sum1,2)/n)*(sum2sq-pow(sum2,2)/n))

r=num/num2

return r

def

jaccard_distance

(prefs,p1,p2):

si={}

for item in prefs[p1]:

if item in prefs[p2]:

si[item]=1

n=len(si)

if n==0:

return

0return n/(len(prefs[p1])+len(prefs[p2])-n)

def tanimoto_distance(prefs,p1,p2):

si={}

foritem

in prefs[p1]:

ifitem

in prefs[p2]:

si[item]=1

n=len(si)

if n==0:

return

0 sum1=sum([pow(prefs[p1][it],2) for

itin prefs[p1]])

sum2=sum([pow(prefs[p2][it],2) for

itin prefs[p2]])

sumco=sum([prefs[p1][it]*prefs[p2][it] for

itin si])

return sumco/(sum1+sum2-sumco)

余弦:0.294298055086

pearson: 0.396059017191

jaccard: 1

tanimoto:0.911877394636

summary

相似度和距離成反相關,相似度為0,則距離最大,相似度為1,則距離為0,相似度和距離可以互相轉換。

question

q:在何種情況下,用何種相似度度量方法?

references

《programming collective intelligence》

皮爾遜相關係數評價演算法(集體智慧型程式設計)

文字相似度計算–餘弦定理和廣義jaccard係數

metric (mathematics)

基於Python計算余弦相似性

在我們計算相似度時,常常用到余弦夾角來判斷兩個向量或者矩陣之間的相似度,cosine 余弦相似度 取值範圍 1,1 當兩個向量的方向重合時夾角余弦取最大值1,當兩個向量的方向完全相反夾角余弦取最小值 1,兩個方向正交時夾角余弦取值為0。x 1x 1 x1 和 x 2x 2 x2 分別是輸入的兩個向量...

資料探勘學習筆記 余弦相似性

余弦相似性 余弦相似度 通過計算兩個向量的夾角余弦值來評估他們的相似性。令x,y是兩個待比較的向量,使用余弦度量作為相似性函式 其中,0度角的余弦值是1,而其他任何角度的余弦值都不大於1 並且其最小值是 1。從而兩個向量之間的角度的余弦值確定兩個向量是否大致指向相同的方向。兩個向量有相同的指向時,余...

相似性度量

二元向量的相似性度量 每一維都少的資訊量,主要是0,1等有 or 沒有屬性 dice 2 x y x y 2保證 0,1 維數不一致時,差別大。jaccard x y x y 交疊程度小時,值較低 交疊係數 x y min 互相之間的包含性,1 cosine x y 根號 x y 對於實值 只有co...