MATLAB求馬氏距離(Mahalanobis distance)

MATLAB求馬氏距離(Mahalanobis distance)

做者:凱魯嘎吉 - 博客園 http://www.cnblogs.com/kailugaji/

1.馬氏距離計算公式

d2(xi, xj)=(xi-xj)TS-1(xi-xj)函數

其中,S是整體的協方差矩陣,而不是樣本的協方差矩陣。post

2.matlab中現有的函數

>> x=[155 66;180 71;190 73;160 60;190 68;150 58;170 75]

x =

   155    66
   180    71
   190    73
   160    60
   190    68
   150    58
   170    75

>> Y = pdist(x,'mahal')

Y =

  Columns 1 through 5

   1.572816369474562   2.201942917264386   1.635800793960578   2.695107559788053   1.478413355546874

  Columns 6 through 10

   1.404831102709996   0.629126547789825   1.713111078598705   1.391260434780810   2.103238561272744

  Columns 11 through 15

   1.590313263839551   2.103238561272744   1.090736759616727   2.589223001191582   2.033867095735081

  Columns 16 through 20

   1.825496244926879   0.629126547789825   2.743712945526665   2.441925172889290   2.980237487501595

  Column 21

   2.793761753017197

其中,X每一行表明一個樣例,X是個二維的。Y的第一個數表示x1與x2之間的馬氏距離。spa

3.求x1與x2之間的馬氏距離

>> x=[155 66;180 71;190 73;160 60;190 68;150 58;170 75]

x =

   155    66
   180    71
   190    73
   160    60
   190    68
   150    58
   170    75

>> cov=cov(x)

cov =

   1.0e+02 *

   2.702380952380953   0.739285714285714
   0.739285714285714   0.412380952380952

>> s=inv(cov)

s =

   0.007261927639280  -0.013018640484967
  -0.013018640484967   0.047588267151168

>> a=[-25 -5]*s*[-25;-5]

a =

   2.473751332087140

>> sqrt(a)

ans =

   1.572816369474561

4.注意

        計算兩兩馬氏距離時,中間的協方差矩陣永遠是整體的,而不是這兩個的。因此,馬氏距離很容易受整體的影響,整體一變化,兩個樣例之間的馬氏距離就會變化。.net

如下敘述來自:歐氏距離 vs 馬氏距離 - bluenight專欄 - CSDN博客 https://blog.csdn.net/chl033/article/details/5526337blog

    1)馬氏距離的計算是創建在整體樣本的基礎上的,這一點能夠從上述協方差矩陣的解釋中能夠得出,也就是說,若是拿一樣的兩個樣本,放入兩個不一樣的整體中,最後計算得出的兩個樣本間的馬氏距離一般是不相同的,除非這兩個整體的協方差矩陣碰巧相同;
    2)在計算馬氏距離過程當中,要求整體樣本數大於樣本的維數,不然獲得的整體樣本協方差矩陣逆矩陣不存在,這種狀況下,用歐式距離來代替馬氏距離,也能夠理解爲,若是樣本數小於樣本的維數,這種狀況下求其中兩個樣本的距離,採用歐式距離計算便可。
    3)還有一種狀況,知足了條件整體樣本數大於樣本的維數,可是協方差矩陣的逆矩陣仍然不存在,好比A(3,4),B(5,6);C(7,8),這種狀況是由於這三個樣本在其所處的二維空間平面內共線(若是是大於二維的話,比較複雜???)。這種狀況下,也採用歐式距離計算。
    4)在實際應用中「整體樣本數大於樣本的維數」這個條件是很容易知足的,而全部樣本點出現3)中所描述的狀況是不多出現的,因此在絕大多數狀況下,馬氏距離是能夠順利計算的,可是馬氏距離的計算是不穩定的,不穩定的來源是協方差矩陣,這也是馬氏距離與歐式距離的最大差別之處。
咱們熟悉的歐氏距離雖然頗有用,但也有明顯的缺點。它將樣品的不一樣屬性(即各指標或各變量)之間的差異等同看待,這一點有時不能知足實際要求。馬氏距離有不少優勢。它不受量綱的影響,兩點之間的馬氏距離與原始數據的測量單位無關;由標準化數據和中心化數據(即原始數據與均值之差)計算出的二點之間的馬氏距離相同。馬氏距離還能夠排除變量之間的相關性的干擾。它的缺點是誇大了變化微小的變量的做用。get

相關文章
相關標籤/搜索