MATLAB求馬氏距離(Mahalanobis distance)
阿新 • • 發佈:2019-01-10
MATLAB求馬氏距離(Mahalanobis distance)
作者:凱魯嘎吉 - 部落格園 http://www.cnblogs.com/kailugaji/
1.馬氏距離計算公式
d2(xi, xj)=(xi-xj)TS-1(xi-xj)
其中,S是總體的協方差矩陣,而不是樣本的協方差矩陣。
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之間的馬氏距離。
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.注意
計算兩兩馬氏距離時,中間的協方差矩陣永遠是總體的,而不是這兩個的。所以,馬氏距離很容易受總體的影響,總體一變化,兩個樣例之間的馬氏距離就會變化。