相似度計算

2021-09-20 21:11:31 字數 2543 閱讀 4738

@author:wepon

@blog:

《machine learning in action》筆記,相似度計算,基於python+numpy。

假如我們希望相似度的值在0~1之間,並且越相似,值越大,有哪些辦法?

1、計算歐式距離,然後根據「相似度=1/(1+距離)」計算相似度。

2、皮爾遜相關係數,在numpy中可以用線性代數模組linalg中的corrcoef()來計算相關係數(correlation coefficient)。得出結果的取值範圍是-1~1,可通過「0.5+0.5*corrcoef()」將其縮放到0~1之間。

3、余弦相似度,計算的是兩個向量的夾角的余弦值。余弦值=a*b/(||a||*||b||)。||a||表示a的2範數,可以用linalg模組中的norm()計算。余弦值在-1~1之間,同樣需要縮放。

**:

"""created on sun dec 28 10:33:42 2014@author: wepon"""

#相似度計算,ina、inb都是行向量

import numpy as npfrom numpy import linalg as la#歐式距離

defeuclidsimilar

(ina,inb):

return

1.0/(1.0+la.norm(ina-inb))#皮爾遜相關係數

defpearsonsimilar

(ina,inb):

if len(ina)<3:        return

1.0return

0.5+0.5*np.corrcoef(ina,inb,rowvar=0)[0][1]#余弦相似度

defcossimilar

(ina,inb):    ina=np.mat(ina)    inb=np.mat(inb)    num=float(ina*inb.t)    denom=la.norm(ina)*la.norm(inb)    return

0.5+0.5*(num/denom)

測試:

>>> ina=array([1,2,3])>>> inb=array([2,4,6])>>> euclidsimilar(ina,inb)0.21089672205953397

>>> pearsonsimilar(ina,inb)1.0

>>> cossimilar(ina,inb)1.0

感覺這幾種度量方法都比較粗糙,最終選擇哪種相似度度量方式還是得看具體問題吧。

@author:wepon

@blog:

《machine learning in action》筆記,相似度計算,基於python+numpy。

假如我們希望相似度的值在0~1之間,並且越相似,值越大,有哪些辦法?

1、計算歐式距離,然後根據「相似度=1/(1+距離)」計算相似度。

2、皮爾遜相關係數,在numpy中可以用線性代數模組linalg中的corrcoef()來計算相關係數(correlation coefficient)。得出結果的取值範圍是-1~1,可通過「0.5+0.5*corrcoef()」將其縮放到0~1之間。

3、余弦相似度,計算的是兩個向量的夾角的余弦值。余弦值=a*b/(||a||*||b||)。||a||表示a的2範數,可以用linalg模組中的norm()計算。余弦值在-1~1之間,同樣需要縮放。

**:

"""created on sun dec 28 10:33:42 2014@author: wepon"""

#相似度計算,ina、inb都是行向量

import numpy as npfrom numpy import linalg as la#歐式距離

defeuclidsimilar

(ina,inb):

return

1.0/(1.0+la.norm(ina-inb))#皮爾遜相關係數

defpearsonsimilar

(ina,inb):

if len(ina)<3:        return

1.0return

0.5+0.5*np.corrcoef(ina,inb,rowvar=0)[0][1]#余弦相似度

defcossimilar

(ina,inb):    ina=np.mat(ina)    inb=np.mat(inb)    num=float(ina*inb.t)    denom=la.norm(ina)*la.norm(inb)    return

0.5+0.5*(num/denom)

測試:

>>> ina=array([1,2,3])>>> inb=array([2,4,6])>>> euclidsimilar(ina,inb)0.21089672205953397

>>> pearsonsimilar(ina,inb)1.0

>>> cossimilar(ina,inb)1.0

感覺這幾種度量方法都比較粗糙,最終選擇哪種相似度度量方式還是得看具體問題吧。

相似度計算

從多個維度分析兩組資料的相似度,比如大的文字使用word2vec轉成向量,類別根據最大的類別數量n拆成n維0或1表示的vector,數值型別歸一化之後表示乙個維度,然後根據cos l1 l2等方式計算相似度 可以用於推薦系統 協同過濾等演算法 注意double值的精度處理 將向量根據座標值,繪製到向...

相似度計算之余弦相似度

一 定義及概念 余弦取值範圍為 1,1 求得兩個向量的夾角,並得出夾角對應的余弦值,此余弦值就可以用來表徵這兩個向量的相似性。夾角越小,趨近於0度,余弦值越接近於1,它們的方向更加吻合,則越相似。當兩個向量的方向完全相反夾角余弦取最小值 1。當余弦值為0時,兩向量正交,夾角為90度。因此可以看出,余...

計算向量相似度 余弦相似度

1.余弦相似度可用來計算兩個向量的相似程度 對於如何計算兩個向量的相似程度問題,可以把這它們想象成空間中的兩條線段,都是從原點 0,0,出發,指向不同的方向。兩條線段之間形成乙個夾角,如果夾角為0度,意味著方向相同 線段重合 如果夾角為90度,意味著形成直角,方向完全不相似 如果夾角為180度,意味...