幾種相似性/距離(傑卡德距離和余弦距離)與其matlab實現


 

 1. 幾種相似度

 1.1 Jaccard系數

傑卡德系數(Jaccard index) , 又稱為Jaccard相似系數(Jaccard similarity coefficient),用於比較有限樣本集之間的相似性與差異性。

 

1.2 余弦相似度

余弦相似度,又稱為余弦相似性,是通過計算兩個向量的夾角余弦值來評估他們的相似度。

對於二維空間,根據向量點積公式,顯然可以得知:

 

設向量 A = (A1,A2,...,An),B = (B1,B2,...,Bn) :

 

 2. 相似度與距離

2.1 傑卡德距離和余弦距離的對比

傑卡德距離Jaccard distance(‘jaccard’)
Jaccard距離常用來處理僅包含非對稱的二元(0-1)屬性的對象。很顯然,Jaccard距離不關心0-0匹配[1]。

夾角余弦距離Cosine distance(‘cosine’)
與Jaccard距離相比,Cosine距離不僅忽略0-0匹配,而且能夠處理非二元向量,即考慮到變量值的大小。

對這兩者,距離與相似度和為一。

 

2.2 余弦距離和歐氏距離的對比

借助三維坐標系來看下歐氏距離和余弦距離的區別:

 

由圖可知,相比歐氏距離,余弦距離更加注重兩個向量在方向上的差異[2]。

 更多距離參照[1]

 

2.3 以一例講傑卡德距離。

有二物品A, B[3]。調查7為用戶是否購買了這兩樣物品,得以下向量:

向量A:(0,0,1,1,1,0,1)

向量B:(1,0,1,0,1,0,0)

A∩B = 2

 

A∪B = 5

 注意,因為忽略忽略0-0匹配。所以A∪B ≠ 7

 

3. 距離計算的MATLAB實現

matlab中自帶的計算距離矩陣的函數有兩個pdist和pdist2。

前者計算一個向量自身的距離矩陣,返回距離矩陣的下三角串聯形式;后者計算兩個向量之間的距離矩陣,返回是n*n的距離矩陣[4]。基本調用形式如下:

              D = pdist(X,distance)

              D = pdist2(X,Y,distance)

 

這兩個函數都提供多種距離度量形式,非常方便,還可以調用自己編寫的距離函數(distance可以用來表示其他距離,如果不寫,默認的是歐式距離。)。

注意:計算的是行向量間的相互距離[5]

 

4. 兩種距離的比較

對於行為相關性的度量,Jaccard一般效果更好;而對於文本相關性的度量,Cosine效果略好於Jaccard;但是Jaccard利於map/red計算。

更詳細的介紹可以看文檔[6]

 

[1] 使用Matlab計算各種距離Distance http://jacoxu.com/使用matlab計算各種距離distance/

[2] 余弦距離、歐氏距離和傑卡德相似性度量的對比分析 https://www.cnblogs.com/chaosimple/archive/2013/06/28/3160839.html

[3] 分別用matlab和python計算物品相似度矩陣(Jaccard系數) http://blog.csdn.net/appleyuchi/article/details/71758783

[4]paper 120:計算距離矩陣的函數的pdist和pdist2函數 https://www.cnblogs.com/molakejin/p/5867255.html

[5]求5個向量兩兩之間的歐式距離 http://www.ilovematlab.cn/thread-308220-1-1.html

[6]推薦算法之Jaccard相似度與Consine相似度  http://blog.csdn.net/u010700335/article/details/72626997?locationNum=3&fps=1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM