d2(xi, xj)=(xi-xj)TS-1(xi-xj)函數
其中,S是整體的協方差矩陣,而不是樣本的協方差矩陣。post
>> 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
>> 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
計算兩兩馬氏距離時,中間的協方差矩陣永遠是整體的,而不是這兩個的。因此,馬氏距離很容易受整體的影響,整體一變化,兩個樣例之間的馬氏距離就會變化。.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