歐氏距離是最容易直觀理解的距離度量方法,咱們小學、初中和高中接觸到的兩個點在空間中的距離通常都是指歐氏距離。算法
Matlab計算距離使用pdist函數。若X是一個m×n的矩陣,則pdist(X)將X矩陣每一行做爲一個n維行向量,而後計算這m個向量兩兩間的距離。機器學習
X=[1 1;2 2;3 3;4 4]; d=pdist(X,'euclidean') d= 1.4142 2.8284 4.2426 1.4142 2.8284 1.4142
顧名思義,在曼哈頓街區要從一個十字路口開車到另外一個十字路口,駕駛距離顯然不是兩點間的直線距離。這個實際駕駛距離就是「曼哈頓距離」。曼哈頓距離也稱爲「城市街區距離」(City Block distance)。ide
Matlab計算曼哈頓距離:函數
X=[1 1;2 2;3 3;4 4]; d=pdist(X,'cityblock') d= 2 4 6 2 4 2
國際象棋中,國王能夠直行、橫行、斜行,因此國王走一步能夠移動到相鄰8個方格中的任意一個。國王從格子(x1,y1)走到格子(x2,y2)最少須要多少步?這個距離就叫切比雪夫距離。學習
Matlab計算切比雪夫距離:編碼
X=[1 1;2 2;3 3;4 4]; d=pdist(X,'chebychev') d= 1 2 3 1 2 1
閔氏距離不是一種距離,而是一組距離的定義,是對多個距離度量公式的歸納性的表述。idea
其中p是一個變參數:spa
當p=1時,就是曼哈頓距離;code
當p=2時,就是歐氏距離;orm
當p→∞時,就是切比雪夫距離。
所以,根據變參數的不一樣,閔氏距離能夠表示某一類/種的距離。
(2)未考慮各個份量的分佈(指望,方差等)多是不一樣的。
Matlab計算閔氏距離(以p=2的歐氏距離爲例):
X=[1 1;2 2;3 3;4 4]; d=pdist(X,'minkowski',2) d= 1.4142 2.8284 4.2426 1.4142 2.8284 1.4142
定義: 標準化歐氏距離是針對歐氏距離的缺點而做的一種改進。標準歐氏距離的思路:既然數據各維份量的分佈不同,那先將各個份量都「標準化」到均值、方差相等。假設樣本集X的均值(mean)爲m,標準差(standard deviation)爲s,X的「標準化變量」表示爲:
若是將方差的倒數當作一個權重,也可稱之爲加權歐氏距離(Weighted Euclidean distance)。
Matlab計算標準化歐氏距離(假設兩個份量的標準差分別爲0.5和1):
X=[1 1;2 2;3 3;4 4]; d=pdist(X,'seuclidean',[0.5,1]) d= 2.2361 4.4721 6.7082 2.2361 4.4721 2.2361
馬氏距離的引出:
上圖有兩個正態分佈的整體,它們的均值分別爲a和b,但方差不同,則圖中的A點離哪一個整體更近?或者說A有更大的機率屬於誰?顯然,A離左邊的更近,A屬於左邊整體的機率更大,儘管A與a的歐式距離遠一些。這就是馬氏距離的直觀解釋。
向量Xi與Xj之間的馬氏距離定義爲:
若協方差矩陣是單位矩陣(各個樣本向量之間獨立同分布),則Xi與Xj之間的馬氏距離等於他們的歐氏距離:
若協方差矩陣是對角矩陣,則就是標準化歐氏距離。
Matlab計算馬氏距離:
X=[1 2;1 3;2 2;3 1]; d=pdist(X,'mahal') d= 2.3452 2.0000 2.3452 1.2247 2.4495 1.2247
幾何中,夾角餘弦可用來衡量兩個向量方向的差別;機器學習中,借用這一律念來衡量樣本向量之間的差別。
即:
夾角餘弦取值範圍爲[-1,1]。餘弦越大表示兩個向量的夾角越小,餘弦越小表示兩向量的夾角越大。當兩個向量的方向重合時餘弦取最大值1,當兩個向量的方向徹底相反餘弦取最小值-1。
Matlab計算夾角餘弦(Matlab中的pdist(X, ‘cosine’)獲得的是1減夾角餘弦的值):
X=[1 1;1 2;2 5;1 -4]; d=1-pdist(X,'cosine') d= 0.9487 0.9191 -0.5145 0.9965 -0.7593 -0.8107
定義:兩個等長字符串s1與s2的漢明距離爲:將其中一個變爲另一個所須要做的最小字符替換次數。例如:
The Hamming distance between "1011101" and "1001001" is 2. The Hamming distance between "2143896" and "2233796" is 3. The Hamming distance between "toned" and "roses" is 3.
漢明重量:是字符串相對於一樣長度的零字符串的漢明距離,也就是說,它是字符串中非零的元素個數:對於二進制字符串來講,就是 1 的個數,因此 11101 的漢明重量是 4。所以,若是向量空間中的元素a和b之間的漢明距離等於它們漢明重量的差a-b。
應用:漢明重量分析在包括信息論、編碼理論、密碼學等領域都有應用。好比在信息編碼過程當中,爲了加強容錯性,應使得編碼間的最小漢明距離儘量大。可是,若是要比較兩個不一樣長度的字符串,不只要進行替換,並且要進行插入與刪除的運算,在這種場合下,一般使用更加複雜的編輯距離等算法。
Matlab計算漢明距離(Matlab中2個向量之間的漢明距離的定義爲2個向量不一樣的份量所佔的百分比):
X=[0 1 1;1 1 2;1 5 2]; d=pdist(X,'hamming') d= 0.6667 1.0000 0.3333
傑卡德類似係數(Jaccard similarity coefficient):兩個集合A和B的交集元素在A,B的並集中所佔的比例,稱爲兩個集合的傑卡德類似係數,用符號J(A,B)表示:
Matlab計算傑卡德距離(Matlab中將傑卡德距離定義爲不一樣的維度的個數佔「非全零維度」的比例):
X=[1 1 0;1 -1 0;-1 1 0]; d=pdist(X,'jaccard') d= 0.5000 0.5000 1.0000
Matlab計算相關係數與相關距離:
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
以上的距離度量方法度量的皆爲兩個樣本(向量)之間的距離,而信息熵描述的是整個系統內部樣本之間的一個距離,或者稱之爲系統內樣本分佈的集中程度(一致程度)、分散程度、混亂程度(不一致程度)。系統內樣本分佈越分散(或者說分佈越平均),信息熵就越大。分佈越有序(或者說分佈越集中),信息熵就越小。
信息熵的由來:請參考博客:XXXXXXXX。
計算給定的樣本集X的信息熵的公式:
參數的含義:
n:樣本集X的分類數
pi:X中第 i 類元素出現的機率
信息熵越大代表樣本集S的分佈越分散(分佈均衡),信息熵越小則代表樣本集X的分佈越集中(分佈不均衡)。當S中n個分類出現的機率同樣大時(都是1/n),信息熵取最大值log2(n)。當X只有一個分類時,信息熵取最小值0。