设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1508|回复: 0

MATLAB求马氏距离(Mahalanobis distance)

[复制链接]

9

主题

64

金钱

110

积分

入门用户

发表于 2019-10-24 15:29:45 | 显示全部楼层 |阅读模式

1.马氏距离计算公式
d2(xi, xj)=(xi-xj)TS-1(xi-xj)
其中,S是总体的协方差矩阵,而不是样本的协方差矩阵。

2.matlab中现有的函数
  1. >> x=[155 66;180 71;190 73;160 60;190 68;150 58;170 75]

  2. x =

  3.    155    66
  4.    180    71
  5.    190    73
  6.    160    60
  7.    190    68
  8.    150    58
  9.    170    75

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

  11. Y =

  12.   Columns 1 through 5

  13.    1.572816369474562   2.201942917264386   1.635800793960578   2.695107559788053   1.478413355546874

  14.   Columns 6 through 10

  15.    1.404831102709996   0.629126547789825   1.713111078598705   1.391260434780810   2.103238561272744

  16.   Columns 11 through 15

  17.    1.590313263839551   2.103238561272744   1.090736759616727   2.589223001191582   2.033867095735081

  18.   Columns 16 through 20

  19.    1.825496244926879   0.629126547789825   2.743712945526665   2.441925172889290   2.980237487501595

  20.   Column 21

  21.    2.793761753017197
复制代码

其中,X每一行代表一个样例,X是个二维的。Y的第一个数表示x1与x2之间的马氏距离。

3.求x1与x2之间的马氏距离
  1. >> x=[155 66;180 71;190 73;160 60;190 68;150 58;170 75]

  2. x =

  3.    155    66
  4.    180    71
  5.    190    73
  6.    160    60
  7.    190    68
  8.    150    58
  9.    170    75

  10. >> cov=cov(x)

  11. cov =

  12.    1.0e+02 *

  13.    2.702380952380953   0.739285714285714
  14.    0.739285714285714   0.412380952380952

  15. >> s=inv(cov)

  16. s =

  17.    0.007261927639280  -0.013018640484967
  18.   -0.013018640484967   0.047588267151168

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

  20. a =

  21.    2.473751332087140

  22. >> sqrt(a)

  23. ans =

  24.    1.572816369474561
复制代码


4.注意
       计算两两马氏距离时,中间的协方差矩阵永远是总体的,而不是这两个的。所以,马氏距离很容易受总体的影响,总体一变化,两个样例之间的马氏距离就会变化。
  1)马氏距离的计算是建立在总体样本的基础上的,这一点可以从上述协方差矩阵的解释中可以得出,也就是说,如果拿同样的两个样本,放入两个不同的总体中,最后计算得出的两个样本间的马氏距离通常是不相同的,除非这两个总体的协方差矩阵碰巧相同;
    2)在计算马氏距离过程中,要求总体样本数大于样本的维数,否则得到的总体样本协方差矩阵逆矩阵不存在,这种情况下,用欧式距离来代替马氏距离,也可以理解为,如果样本数小于样本的维数,这种情况下求其中两个样本的距离,采用欧式距离计算即可。
    3)还有一种情况,满足了条件总体样本数大于样本的维数,但是协方差矩阵的逆矩阵仍然不存在,比如A(3,4),B(5,6);C(7,8),这种情况是因为这三个样本在其所处的二维空间平面内共线(如果是大于二维的话,比较复杂???)。这种情况下,也采用欧式距离计算。
    4)在实际应用中“总体样本数大于样本的维数”这个条件是很容易满足的,而所有样本点出现3)中所描述的情况是很少出现的,所以在绝大多数情况下,马氏距离是可以顺利计算的,但是马氏距离的计算是不稳定的,不稳定的来源是协方差矩阵,这也是马氏距离与欧式距离的最大差异之处。
我们熟悉的欧氏距离虽然很有用,但也有明显的缺点。它将样品的不同属性(即各指标或各变量)之间的差别等同看待,这一点有时不能满足实际要求。马氏距离有很多优点。它不受量纲的影响,两点之间的马氏距离与原始数据的测量单位无关;由标准化数据和中心化数据(即原始数据与均值之差)计算出的二点之间的马氏距离相同。马氏距离还可以排除变量之间的相关性的干扰。它的缺点是夸大了变化微小的变量的作用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表