相似性度量總結


整理自 《機器學習中的相似性度量》《餘弦距離、歐氏距離和傑卡德相似性度量的對比分析》


在做分類時常常需要估算不同樣本之間的相似性度量(Similarity Measurement),這時通常採用的方法就是計算樣本間的“距離”(Distance)。採用什麼樣的方法計算距離是很講究,甚至關係到分類的正確與否。本文的目的就是對常用的相似性度量作一個總結。

本文目錄:
1. 歐氏距離
2. 曼哈頓距離
3. 切比雪夫距離
4. 閔可夫斯基距離
5. 標準化歐氏距離
6. 馬氏距離
7. 夾角餘弦
8. 漢明距離
9. 傑卡德距離 & 傑卡德相似係數
10. 相關係數 & 相關距離
11. 信息熵


1. 歐氏距離(Euclidean Distance)
歐氏距離是最易於理解的一種距離計算方法,源自歐氏空間中兩點間的距離公式。歐氏距離能夠體現個體數值特徵的絕對差異,所以更多的用於需要從維度的數值大小中體現差異的分析,如使用用戶行爲指標分析用戶價值的相似度或差異。

(1)二維平面上兩點a(x1,y1)與b(x2,y2)間的歐氏距離:

這裏寫圖片描述

(2)三維空間兩點a(x1,y1,z1)與b(x2,y2,z2)間的歐氏距離:

這裏寫圖片描述

(3)兩個n維向量a(x11,x12,…,x1n)與 b(x21,x22,…,x2n)間的歐氏距離:

這裏寫圖片描述
也可以用表示成向量運算的形式:這裏寫圖片描述

(4)Matlab計算歐氏距離

Matlab計算距離主要使用pdist函數。若X是一個M×N的矩陣,則pdist(X)將X矩陣M行的每一行作爲一個N維向量,然後計算這M個向量兩兩間的距離。
例子:計算向量(0,0)、(1,0)、(0,2)兩兩間的歐式距離
X = [0 0 ; 1 0 ; 0 2]
D = pdist(X,’euclidean’)
結果: 1.0000 2.0000 2.2361


2. 曼哈頓距離(Manhattan Distance)
從名字就可以猜出這種距離的計算方法了。想象你在曼哈頓要從一個十字路口開車到另外一個十字路口,駕駛距離是兩點間的直線距離嗎?顯然不是,除非你能穿越大樓。實際駕駛距離就是這個“曼哈頓距離”。而這也是曼哈頓距離名稱的來源, 曼哈頓距離也稱爲城市街區距離(City Block distance)。

(1)二維平面兩點a(x1,y1)與b(x2,y2)間的曼哈頓距離

這裏寫圖片描述

(2)兩個n維向量a(x11,x12,…,x1n)與 b(x21,x22,…,x2n)間的曼哈頓距離

這裏寫圖片描述

(3) Matlab計算曼哈頓距離

例子:計算向量(0,0)、(1,0)、(0,2)兩兩間的曼哈頓距離
X = [0 0 ; 1 0 ; 0 2]
D = pdist(X, ‘cityblock’)
結果:D = 1 2 3


3. 切比雪夫距離 ( Chebyshev Distance )
國際象棋玩過麼?國王走一步能夠移動到相鄰的8個方格中的任意一個。那麼國王從格子(x1,y1)走到格子(x2,y2)最少需要多少步?自己走走試試。你會發現最少步數總是max( | x2-x1 | , | y2-y1 | ) 步 。有一種類似的一種距離度量方法叫切比雪夫距離。

(1)二維平面兩點a(x1,y1)與b(x2,y2)間的切比雪夫距離

這裏寫圖片描述

(2)兩個n維向量a(x11,x12,…,x1n)與 b(x21,x22,…,x2n)間的切比雪夫距離

這裏寫圖片描述 這個公式的另一種等價形式是 這裏寫圖片描述 看不出兩個公式是等價的?提示一下:試試用放縮法和夾逼法則來證明。

(3)Matlab計算切比雪夫距離

例子:計算向量(0,0)、(1,0)、(0,2)兩兩間的切比雪夫距離
X = [0 0 ; 1 0 ; 0 2]
D = pdist(X, ‘chebychev’)
結果:D = 1 2 2


4. 閔可夫斯基距離(Minkowski Distance)
閔氏距離不是一種距離,而是一組距離的定義。

(1) 閔氏距離的定義

兩個n維變量a(x11,x12,…,x1n)與 b(x21,x22,…,x2n)間的閔可夫斯基距離定義爲:這裏寫圖片描述
其中p是一個變參數。
當p=1時,就是曼哈頓距離
當p=2時,就是歐氏距離
當p→∞時,就是切比雪夫距離
根據變參數的不同,閔氏距離可以表示一類的距離。

(2)閔氏距離的缺點

  閔氏距離,包括曼哈頓距離、歐氏距離和切比雪夫距離都存在明顯的缺點。
  舉個例子:二維樣本(身高,體重),其中身高範圍是150~190,體重範圍是50~60,有三個樣本:a(180,50),b(190,50),c(180,60)。那麼a與b之間的閔氏距離(無論是曼哈頓距離、歐氏距離或切比雪夫距離)等於a與c之間的閔氏距離,但是身高的10cm真的等價於體重的10kg麼?因此用閔氏距離來衡量這些樣本間的相似度很有問題。簡單說來,閔氏距離的缺點主要有兩個:
  (1)將各個分量的量綱(scale),也就是“單位”當作相同的看待了。
  (2)沒有考慮各個分量的分佈(期望,方差等)可能是不同的。
  

(3)Matlab計算閔氏距離

例子:計算向量(0,0)、(1,0)、(0,2)兩兩間的閔氏距離(以變參數爲2的歐氏距離爲例)
X = [0 0 ; 1 0 ; 0 2]
D = pdist(X,’minkowski’,2)
結果:D = 1.0000 2.0000 2.2361


5. 標準化歐氏距離 (Standardized Euclidean distance )

(1)標準歐氏距離的定義

  標準化歐氏距離是針對簡單歐氏距離的缺點而作的一種改進方案。標準歐氏距離的思路:既然數據各維分量的分佈不一樣,好吧!那我先將各個分量都“標準化”到均值、方差相等吧。均值和方差標準化到多少呢?這裏先複習點統計學知識吧,假設樣本集X的均值(mean)爲m,標準差(standard deviation)爲s,那麼X的“標準化變量”表示爲:
  而且標準化變量的數學期望爲0,方差爲1。因此樣本集的標準化過程(standardization)用公式描述就是:
這裏寫圖片描述 標準化後的值 = ( 標準化前的值 - 分量的均值 ) /分量的標準差
  經過簡單的推導就可以得到兩個n維向量a(x11,x12,…,x1n)與 b(x21,x22,…,x2n)間的標準化歐氏距離的公式:
這裏寫圖片描述
  如果將方差的倒數看成是一個權重,這個公式可以看成是一種加權歐氏距離(Weighted Euclidean distance)。

(2)Matlab計算標準化歐氏距離

例子:計算向量(0,0)、(1,0)、(0,2)兩兩間的標準化歐氏距離 (假設兩個分量的標準差分別爲0.5和1)
X = [0 0 ; 1 0 ; 0 2]
D = pdist(X, ‘seuclidean’,[0.5,1])
結果:D = 2.0000 2.0000 2.8284


6. 馬氏距離(Mahalanobis Distance)

(1)馬氏距離定義

有M個樣本向量X1~Xm,協方差矩陣記爲S,均值記爲向量μ,則其中樣本向量X到u的馬氏距離表示爲:
這裏寫圖片描述
而其中向量Xi與Xj之間的馬氏距離定義爲:
這裏寫圖片描述
若協方差矩陣是單位矩陣(各個樣本向量之間獨立同分布),則公式就成了:
這裏寫圖片描述
也就是歐氏距離了。
若協方差矩陣是對角矩陣,公式變成了標準化歐氏距離。

(2)馬氏距離的優缺點

量綱無關,排除變量之間的相關性的干擾。

(3) Matlab計算

例子:計算向量(1 2),( 1 3),( 2 2),( 3 1)兩兩之間的馬氏距離
X = [1 2; 1 3; 2 2; 3 1]
Y = pdist(X,’mahalanobis’)
結果:Y = 2.3452 2.0000 2.3452 1.2247 2.4495 1.2247


7. 夾角餘弦(Cosine)
幾何中夾角餘弦可用來衡量兩個向量方向的差異,機器學習中借用這一概念來衡量樣本向量之間的差異。餘弦距離更多的是從方向上區分差異,而對絕對的數值不敏感,更多的用於使用用戶對內容評分來區分興趣的相似度和差異,同時修正了用戶間可能存在的度量標準不統一的問題(因爲餘弦距離對絕對數值不敏感)。

(1)在二維空間中向量A(x1,y1)與向量B(x2,y2)的夾角餘弦公式:

這裏寫圖片描述

(2) 兩個n維樣本點a(x11,x12,…,x1n)和b(x21,x22,…,x2n)的夾角餘弦

類似的,對於兩個n維樣本點a(x11,x12,…,x1n)和b(x21,x22,…,x2n),可以使用類似於夾角餘弦的概念來衡量它們間的相似程度:
這裏寫圖片描述
即:這裏寫圖片描述
夾角餘弦取值範圍爲[-1,1]。夾角餘弦越大表示兩個向量的夾角越小,夾角餘弦越小表示兩向量的夾角越大。當兩個向量的方向重合時夾角餘弦取最大值1,當兩個向量的方向完全相反夾角餘弦取最小值-1。
夾角餘弦的具體應用可以參閱參考文獻[1]。

(3)Matlab計算夾角餘弦

例子:計算(1,0)、( 1,1.732)、( -1,0)兩兩間的夾角餘弦
X = [1 0 ; 1 1.732 ; -1 0]
D = 1- pdist(X, ‘cosine’) % Matlab中的pdist(X, ‘cosine’)得到的是1減夾角餘弦的值
結果:D = 0.5000 -1.0000 -0.5000

(4)、調整餘弦相似度算法(Adjusted Cosine Similarity)

這裏寫圖片描述
從上圖可以看出,歐氏距離衡量的是空間各點的絕對距離,跟各個點所在的位置座標直接相關;而餘弦距離衡量的是空間向量的夾角,更加體現在方向上的差異,而不是位置。如果保持A點位置不變,B點朝原方向遠離座標軸原點,那麼這個時候餘弦距離 clip_image011 是保持不變的(因爲夾角沒有發生變化),而A、B兩點的距離顯然在發生改變,這就是歐氏距離和餘弦距離之間的不同之處。
歐氏距離和餘弦距離各自有不同的計算方式和衡量特徵,因此它們適用於不同的數據分析模型:

歐氏距離能夠體現個體數值特徵的絕對差異,所以更多的用於需要從維度的數值大小中體現差異的分析,如使用用戶行爲指標分析用戶價值的相似度或差異。

餘弦相似度更多的是從方向上區分差異,而對絕對的數值不敏感,因此沒法衡量每個維度上數值的差異,會導致這樣一種情況:用戶對內容評分,按5分制,X和Y兩個用戶對兩個內容的評分分別爲(1,2)和(4,5),使用餘弦相似度得到的結果是0.98,兩者極爲相似。但從評分上看X似乎不喜歡2這個 內容,而Y則比較喜歡,餘弦相似度對數值的不敏感導致了結果的誤差,需要修正這種不合理性就出現了調整餘弦相似度,即所有維度上的數值都減去一個均值,比如X和Y的評分均值都是3,那麼調整後爲(-2,-1)和(1,2),再用餘弦相似度計算,得到-0.8,相似度爲負值並且差異不小,但顯然更加符合現實。

那麼是否可以在(用戶-商品-行爲數值)矩陣的基礎上使用調整餘弦相似度計算呢?從算法原理分析,複雜度雖然增加了,但是應該比普通餘弦夾角算法要強。


8. 漢明距離(Hamming distance)

(1)漢明距離的定義

兩個等長字符串s1與s2之間的漢明距離定義爲將其中一個變爲另外一個所需要作的最小替換次數。例如字符串“1111”與“1001”之間的漢明距離爲2。
應用:信息編碼(爲了增強容錯性,應使得編碼間的最小漢明距離儘可能大)。

(2)Matlab計算漢明距離

Matlab中2個向量之間的漢明距離的定義爲2個向量不同的分量所佔的百分比。例子:計算向量(0,0)、(1,0)、(0,2)兩兩間的漢明距離
X = [0 0 ; 1 0 ; 0 2];
D = PDIST(X, ‘hamming’)
結果:D = 0.5000 0.5000 1.0000


9. 傑卡德相似係數(Jaccard similarity coefficient)

(1) 傑卡德相似係數

兩個集合A和B的交集元素在A,B的並集中所佔的比例,稱爲兩個集合的傑卡德相似係數,用符號J(A,B)表示。 在《Mahout實戰》這本書中,傑卡德相似係數也被稱之爲谷本系數(Tanimoto Coefficient Similarity)。當且僅當偏好值爲布爾值或者根本沒有偏好值可用時,才需要用到這一度量方法【6】。
這裏寫圖片描述
傑卡德相似係數是衡量兩個集合的相似度一種指標。

(2) 傑卡德距離

與傑卡德相似係數相反的概念是傑卡德距離(Jaccard distance)。傑卡德距離可用如下公式表示:
這裏寫圖片描述
傑卡德距離用兩個集合中不同元素佔所有元素的比例來衡量兩個集合的區分度。

(3) 傑卡德相似係數與傑卡德距離的應用

可將傑卡德相似係數用在衡量樣本的相似度上。
樣本A與樣本B是兩個n維向量,而且所有維度的取值都是0或1。例如:A(0111)和B(1011)。我們將樣本看成是一個集合,1表示集合包含該元素,0表示集合不包含該元素。
- p :樣本A與B都是1的維度的個數
- q :樣本A是1,樣本B是0的維度的個數
- r :樣本A是0,樣本B是1的維度的個數
- s :樣本A與B都是0的維度的個數
那麼樣本A與B的傑卡德相似係數可以表示爲:這裏p+q+r可理解爲A與B的並集的元素個數,而p是A與B的交集的元素個數。
而樣本A與B的傑卡德距離表示爲:這裏寫圖片描述

(4)Matlab 計算傑卡德距離

Matlab的pdist函數定義的傑卡德距離跟我這裏的定義有一些差別,Matlab中將其定義爲不同的維度的個數佔“非全零維度”的比例。
例子:計算(1,1,0)、(1,-1,0)、(-1,1,0)兩兩之間的傑卡德距離
X = [1 1 0; 1 -1 0; -1 1 0]
D = pdist( X , ‘jaccard’)
結果D = 0.5000 0.5000 1.0000


10. 相關係數 ( Correlation coefficient )與相關距離(Correlation distance)

(1) 相關係數的定義

這裏寫圖片描述
相關係數是衡量隨機變量X與Y相關程度的一種方法,相關係數的取值範圍是[-1,1]。相關係數的絕對值越大,則表明X與Y相關度越高。當X與Y線性相關時,相關係數取值爲1(正線性相關)或-1(負線性相關)。

(2)相關距離的定義

這裏寫圖片描述

(3)Matlab計算(1, 2 ,3 ,4 )與( 3 ,8 ,7 ,6 )之間的相關係數與相關距離
X = [1 2 3 4 ; 3 8 7 6]
C = corrcoef( X’ ) %將返回相關係數矩陣
D = pdist( X , ‘correlation’)
結果:
C = 1.0000 0.4781 0.4781 1.0000
D =0.5219
其中0.4781就是相關係數,0.5219是相關距離。


11. 信息熵(Information Entropy)
信息熵是衡量分佈的混亂程度或分散程度的一種度量。分佈越分散(或者說分佈越平均),信息熵就越大。分佈越有序(或者說分佈越集中),信息熵就越小。
計算給定的樣本集X的信息熵的公式:這裏寫圖片描述
參數的含義:
n:樣本集X的分類數
pi:X中第i類元素出現的概率
信息熵越大表明樣本集S分類越分散,信息熵越小則表明樣本集X分類越集中。。當S中n個分類出現的概率一樣大時(都是1/n),信息熵取最大值log2(n)。當X只有一個分類時,信息熵取最小值0


參考資料:
[1]吳軍. 數學之美 系列 12 - 餘弦定理和新聞的分類.
http://www.google.com.hk/ggblog/googlechinablog/2006/07/12_4010.html
[2] Wikipedia. Jaccard index.
http://en.wikipedia.org/wiki/Jaccard_index
[3] Wikipedia. Hamming distance
http://en.wikipedia.org/wiki/Hamming_distance
[4] 求馬氏距離(Mahalanobis distance )matlab版
http://junjun0595.blog.163.com/blog/static/969561420100633351210/
[5] Pearson product-moment correlation coefficient
http://en.wikipedia.org/wiki/Pearson_product-moment_correlation_coefficient
[6]《Mahout實戰》,第45頁:4.3.7 忽略偏好值基於谷本系數計算相似度

發佈了30 篇原創文章 · 獲贊 3 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章