天天看點

各種距離分析

在做分類時常常需要估算不同樣本之間的相似性度量(SimilarityMeasurement),這時通常采用的方法就是計算樣本間的“距離”(Distance)。采用什麼樣的方法計算距離是很講究,甚至關系到分類的正确與否。

  本文的目的就是對常用的相似性度量作一個總結。

本文目錄:

1.歐氏距離

2.曼哈頓距離

3. 切比雪夫距離

4. 闵可夫斯基距離

5.标準化歐氏距離

6.馬氏距離

7.夾角餘弦

8.漢明距離

9.傑卡德距離& 傑卡德相似系數

10.相關系數& 相關距離

11.資訊熵

1. 歐氏距離(EuclideanDistance)

       歐氏距離是最易于了解的一種距離計算方法,源自歐氏空間中兩點間的距離公式。

(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')

結果:

D=

    1.0000   2.0000    2.2361

2. 曼哈頓距離(ManhattanDistance)

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

D= pdist(X, 'cityblock')

     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)兩兩間的切比雪夫距離

D= pdist(X, 'chebychev')

     1    2     2

4. 闵可夫斯基距離(MinkowskiDistance)

闵氏距離不是一種距離,而是一組距離的定義。

(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的歐氏距離為例)

D= pdist(X,'minkowski',2)

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

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

  标準化歐氏距離是針對簡單歐氏距離的缺點而作的一種改進方案。标準歐氏距離的思路:既然資料各維分量的分布不一樣,好吧!那我先将各個分量都“标準化”到均值、方差相等吧。均值和方差标準化到多少呢?這裡先複習點統計學知識吧,假設樣本集X的均值(mean)為m,标準差(standarddeviation)為s,那麼X的“标準化變量”表示為:

  而且标準化變量的數學期望為0,方差為1。是以樣本集的标準化過程(standardization)用公式描述就是:

各種距離分析

  标準化後的值 =  ( 标準化前的值  - 分量的均值 ) /分量的标準差

  經過簡單的推導就可以得到兩個n維向量a(x11,x12,…,x1n)與b(x21,x22,…,x2n)間的标準化歐氏距離的公式:

各種距離分析

  如果将方差的倒數看成是一個權重,這個公式可以看成是一種權重歐氏距離(WeightedEuclidean distance)。

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

例子:計算向量(0,0)、(1,0)、(0,2)兩兩間的标準化歐氏距離 (假設兩個分量的标準差分别為0.5和1)

D= pdist(X, 'seuclidean',[0.5,1])

    2.0000   2.0000    2.8284

6. 馬氏距離(MahalanobisDistance)

(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減夾角餘弦的值

    0.5000  -1.0000   -0.5000

8. 漢明距離(Hammingdistance)

(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')

    0.5000   0.5000    1.0000

9. 傑卡德相似系數(Jaccardsimilarity coefficient)

(1) 傑卡德相似系數

       兩個集合A和B的交集元素在A,B的并集中所占的比例,稱為兩個集合的傑卡德相似系數,用符号J(A,B)表示。

各種距離分析

  傑卡德相似系數是衡量兩個集合的相似度一種名額。

(2) 傑卡德距離

       與傑卡德相似系數相反的概念是傑卡德距離(Jaccarddistance)。傑卡德距離可用如下公式表示:

各種距離分析

  傑卡德距離用兩個集合中不同元素占所有元素的比例來衡量兩個集合的區分度。

(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')

結果

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

0.5219

      其中0.4781就是相關系數,0.5219是相關距離。

11. 資訊熵(Information Entropy)

       資訊熵并不屬于一種相似性度量。那為什麼放在這篇文章中啊?這個。。。我也不知道。 (╯▽╰)

資訊熵是衡量分布的混亂程度或分散程度的一種度量。分布越分散(或者說分布越平均),資訊熵就越大。分布越有序(或者說分布越集中),資訊熵就越小。

       計算給定的樣本集X的資訊熵的公式:

各種距離分析

參數的含義:

繼續閱讀