问一个马氏距离的问题

cau228charm 2009-08-19 03:27:17
我现在想计算一个二维平面上两个点A(3,4)和B(5,6)之间的马氏距离。开始我利用马氏距离的公式计算。结果发现两点的协方差矩阵是:
0.5000 0.5000
0.5000 0.5000
而马氏距离公式中要求该协方差矩阵的逆矩阵,但是这个协方差逆矩阵根本不存在,那我该怎么求呢????

后来我用matlab计算,计算如下:
计算方法1:

>> x=[3,4;5,6;10,89]

x =

3 4
5 6
10 89

>> d=pdist(x,'mahalanobis')

d =

2.0000 2.0000 2.0000

>>


计算方法2:
>> x=[3,4;5,6;10,89;25,6]

x =

3 4
5 6
10 89
25 6

>> d=pdist(x,'mahalanobis')

d =

0.2086 2.1761 2.2159 2.0659 2.0123 2.4482


按照matlab中关于函数pdist的介绍应该d中的第一个值就是代表A(3,4)和B(5,6)之间的马氏距离,为什么两个计算结果还不一样呢???而且我也不知道matlab是怎样计算两个二维坐标点的马氏距离的。

另外我在一些资料上看到,如果遇到没有逆矩阵的情况,应该求取它的伪逆矩阵,请问这样把伪逆矩阵带入马氏距离的计算公式计算马氏距离对不对?

总之能给我一个计算二维两点间的马氏距离的方法即可。谢谢各位高手

...全文
2433 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cau228charm 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 cau228charm 的回复:]
谢谢 差不多明白了 结贴了
[/Quote]
马氏距离(Mahalanobis distances)
1)马氏距离的计算是建立在总体样本的基础上的,这一点可以从上述协方差矩阵的解释中可以得出,也就是说,如果拿同样的两个样本,放入两个不同的总体中,最后计算得出的两个样本间的马氏距离通常是不相同的,除非这两个总体的协方差矩阵碰巧相同;
2)在计算马氏距离过程中,要求总体样本数大于样本的维数,否则得到的总体样本协方差矩阵逆矩阵不存在,这种情况下,用欧式距离来代替马氏距离,也可以理解为,如果样本数小于样本的维数,这种情况下求其中两个样本的距离,采用欧式距离计算即可。
3)还有一种情况,满足了条件总体样本数大于样本的维数,但是协方差矩阵的逆矩阵仍然不存在,比如A(3,4),B(5,6);C(7,8),这种情况是因为这三个样本在其所处的二维空间平面内共线(如果是大于二维的话,比较复杂???)。这种情况下,也采用欧式距离计算。
4)在实际应用中“总体样本数大于样本的维数”这个条件是很容易满足的,而所有样本点出现3)中所描述的情况是很少出现的,所以在绝大多数情况下,马氏距离是可以顺利计算的,但是马氏距离的计算是不稳定的,不稳定的来源是协方差矩阵,这也是马氏距离与欧式距离的最大差异之处。
我们熟悉的欧氏距离虽然很有用,但也有明显的缺点。它将样品的不同属性(即各指标或各变量)之间的差别等同看待,这一点有时不能满足实际要求。马氏距离有很多优点。它不受量纲的影响,两点之间的马氏距离与原始数据的测量单位无关;由标准化数据和中心化数据(即原始数据与均值之差)计算出的二点之间的马氏距离相同。马氏距离还可以排除变量之间的相关性的干扰。它的缺点是夸大了变化微小的变量的作用。
绿色夹克衫 2009-08-20
  • 打赏
  • 举报
回复
确实不存在,你可以用多个点试一试。马氏距离的意义在于

比如数据如下:

x y
a 4 999
b 4 1003
c 2 999
d 3 999

用普通的距离算法,a与b的之间的距离可能是最大的,但用马氏距离来算,可能会先统计出x和y的权重,得出x的权重远远大于y,因此a与c之间的距离是最大的。

如果只有2个向量,那么就无法靠协方差矩阵生成各自的权重,因此也就无法计算马氏距离。

[Quote=引用 6 楼 cau228charm 的回复:]
引用 4 楼 litaoye 的回复:
链接里面的内容就是算不出来的,协方差矩阵本身的意义在于在多维向量之间找出一个自适应的权重,如果只有2个点的话,那权重就都是1样的。

引用 3 楼 cau228charm 的回复:
引用 2 楼 litaoye 的回复:
哦,ls把我想提供的链接先提供了。

LZ问题的原因在于,生成协方差矩阵需要2个以上的点,矩阵才是可逆的,2个点本身也用不上协方差!

2个点本身也用不上协方差!,但是提供的链接不也是两个点(样本吗),为什么还是列出了一个协方差矩阵??



唉 我搞晕了 那这两个点的马氏距离到底是多少? 还是两个这样的点之间就不存在马氏距离??
如果存在的话,你能教我怎么做吗?
[/Quote]
cau228charm 2009-08-20
  • 打赏
  • 举报
回复
谢谢 差不多明白了 结贴了
cau228charm 2009-08-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 litaoye 的回复:]
链接里面的内容就是算不出来的,协方差矩阵本身的意义在于在多维向量之间找出一个自适应的权重,如果只有2个点的话,那权重就都是1样的。

引用 3 楼 cau228charm 的回复:
引用 2 楼 litaoye 的回复:
哦,ls把我想提供的链接先提供了。

LZ问题的原因在于,生成协方差矩阵需要2个以上的点,矩阵才是可逆的,2个点本身也用不上协方差!

2个点本身也用不上协方差!,但是提供的链接不也是两个点(样本吗),为什么还是列出了一个协方差矩阵??

[/Quote]

唉 我搞晕了 那这两个点的马氏距离到底是多少? 还是两个这样的点之间就不存在马氏距离??
如果存在的话,你能教我怎么做吗?
cau228charm 2009-08-19
  • 打赏
  • 举报
回复
协方差矩阵为: 
S =
| 0.25 0.50 -0.75 0.50 |
| 0.50 1.00 -1.50 1.00 |
|-0.75 -1.50 2.25 -1.50 |
| 0.50 1.00 -1.50 1.00 |
其中S(i,j)={[His1(i)-u(i)]*[His1(j)-u(j)]+[His2(i)-u(i)]*[His2(j)-u(j)]}/2

下一步就是求出逆矩阵S^(-1)
马氏距离 D=sqrt{[His1-His2] * S^(-1) * [(His1-His2)的转置列向量]}

上面是链接中的叙述 我看了一下 协方差矩阵S的行列式是为0的,所以“下一步就是求出逆矩阵S^(-1) ”这一步骤根本不成立,不知道楼上的是怎么解决的???
绿色夹克衫 2009-08-19
  • 打赏
  • 举报
回复
链接里面的内容就是算不出来的,协方差矩阵本身的意义在于在多维向量之间找出一个自适应的权重,如果只有2个点的话,那权重就都是1样的。

[Quote=引用 3 楼 cau228charm 的回复:]
引用 2 楼 litaoye 的回复:
哦,ls把我想提供的链接先提供了。

LZ问题的原因在于,生成协方差矩阵需要2个以上的点,矩阵才是可逆的,2个点本身也用不上协方差!

2个点本身也用不上协方差!,但是提供的链接不也是两个点(样本吗),为什么还是列出了一个协方差矩阵??
[/Quote]
cau228charm 2009-08-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 litaoye 的回复:]
哦,ls把我想提供的链接先提供了。

LZ问题的原因在于,生成协方差矩阵需要2个以上的点,矩阵才是可逆的,2个点本身也用不上协方差!
[/Quote]
2个点本身也用不上协方差!,但是提供的链接不也是两个点(样本吗),为什么还是列出了一个协方差矩阵??
绿色夹克衫 2009-08-19
  • 打赏
  • 举报
回复
哦,ls把我想提供的链接先提供了。

LZ问题的原因在于,生成协方差矩阵需要2个以上的点,矩阵才是可逆的,2个点本身也用不上协方差!
fatiezhe 2009-08-19
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20080911/14/f4402565-3b4f-4de4-a4fa-f4c020dd1477.html

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧