@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度,意味...