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