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.注意

计算两两马氏距离时,中间的协方差矩阵永远是总体的,而不是这两个的。所以,马氏距离很容易受总体的影响,总体一变化,两个样例之间的马氏距离就会变化。

以下叙述来自:欧氏距离 vs 马氏距离 - bluenight专栏 - CSDN博客 https://blog.csdn.net/chl033/article/details/5526337

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

5. MATLAB求两个矩阵之间的马氏距离,使用pdist2()函数

>> x=rand(4,3)

x =

   0.792207329559554   0.849129305868777   0.743132468124916
0.959492426392903 0.933993247757551 0.392227019534168
0.655740699156587 0.678735154857773 0.655477890177557
0.035711678574190 0.757740130578333 0.171186687811562 >> y=rand(2,3) y = 0.706046088019609 0.276922984960890 0.097131781235848
0.031832846377421 0.046171390631154 0.823457828327293 >> z=pdist2(x, y, 'mahal') z = 11.881392154588022 8.912492295829436
10.377530870286948 8.703763775002274
9.513297701500704 6.612259802538707
10.858334218503852 8.268677052674791

其中,数据X是n*d的,数据Y是m*d的,则马氏距离是n*m的矩阵,代表数据X的第i个样例与数据Y的第j个样例之间的马氏距离。

MATLAB求马氏距离(Mahalanobis distance)的更多相关文章

  1. 马氏距离(Mahalanobis distance)

    马氏距离(Mahalanobis distance)是由印度统计学家马哈拉诺比斯(P. C. Mahalanobis)提出的,表示数据的协方差距离.它是一种有效的计算两个未知样本集的相似度的方法.与欧 ...

  2. paper 114:Mahalanobis Distance(马氏距离)

    (from:http://en.wikipedia.org/wiki/Mahalanobis_distance) Mahalanobis distance In statistics, Mahalan ...

  3. Mahalanobis Distance(马氏距离)

    (from:http://en.wikipedia.org/wiki/Mahalanobis_distance) Mahalanobis distance In statistics, Mahalan ...

  4. Mahalanobia Distance(马氏距离)的解释

    马氏距离有多重定义: 1)可以表示 某一个样本与DataSet的距离. 2)可以表示两个DataSet之间的距离. 1) The Mahalanobis distance of an observat ...

  5. Mahalanobis距离(马氏距离)的“哲学”解释

    讲解教授:赵辉 (FROM : UESTC) 课程:<模式识别> 整理:PO主 基础知识: 假设空间中两点x,y,定义: 欧几里得距离, Mahalanobis距离, 不难发现,如果去掉马 ...

  6. 基于欧氏距离和马氏距离的异常点检测—matlab实现

    前几天接的一个小项目,基于欧氏距离和马氏距离的异常点检测,已经交接完毕,现在把代码公开. 基于欧式距离的: load data1.txt %导入数据,行为样本,列为特征 X=data1; %赋值给X ...

  7. 有关马氏距离和hinge loss的学习记录

    关于度量学习,之前没有看太多相关的文献.不过南京的周老师的一篇NIPS,确实把这个问题剖析得比较清楚. Mahalanobis距离一般表示为d=(x-y)TM(x-y),其中x和y是空间中两个样本点, ...

  8. Python实现的计算马氏距离算法示例

    Python实现的计算马氏距离算法示例 本文实例讲述了Python实现的计算马氏距离算法.分享给大家供大家参考,具体如下: 我给写成函数调用了 python实现马氏距离源代码:     # encod ...

  9. 相似系数_杰卡德距离(Jaccard Distance)

    python机器学习-乳腺癌细胞挖掘(博主亲自录制视频)https://study.163.com/course/introduction.htm?courseId=1005269003&ut ...

随机推荐

  1. 华为路由器 IPSec 与 GRE 结合实验

    二者结合的目的 GRE 支持单播.组播.广播,IPSec 仅支持单播.GRE 不支持对于数据完整性以及身份认证的验证功能,并且也不具备数据加密保护.而 IPSec 恰恰拥有强大的安全机制.达到了互补的 ...

  2. 特征脸是怎么提取的之主成分分析法PCA

    机器学习笔记 多项式回归这一篇中,我们讲到了如何构造新的特征,相当于对样本数据进行升维. 那么相应的,我们肯定有数据的降维.那么现在思考两个问题 为什么需要降维 为什么可以降维 第一个问题很好理解,假 ...

  3. IDEA与Eclipse

    IDEA 1 快捷键 快速查找某个类 double shift 显示类结构图 ctrl+H 代码上移或下移 ctrl+shift+up/down 查找文件 ctrl+shift+N 删除当前行 ctr ...

  4. iOS网络请求-AFNetworking源码解析

    趁着端午节日,自己没有什么过多的安排,准备花4-5天左右,针对网络请求源码AFNetworking和YTKNetwork进行解析以及这两年多iOS实际开发经验(其实YTKNetwork也是对AFNet ...

  5. iPhone屏幕尺寸说明及iPhone在微信上的一些表现

    很久没有更新博客了,由于自己的水平一般,能力有限,这种情况下的知识点可能过于薄弱,所以不好分享给大家,注意是怕误导大家了,最近学习移动端的东西,有点心得,分享给大家,希望对大家有所帮助,如果有什么地方 ...

  6. .NET 单元测试的利剑——模拟框架Moq(简述篇)

    .NET 单元测试的利剑--模拟框架Moq 前言 这篇文章是翻译文,因为通过自己参与的项目,越发觉得单元测试的重要性,特别是当跟业务数据打交道的时候的,Moq就如雪中送炭,所以想学习这个框架,就从这篇 ...

  7. 谈谈MySQL支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景?

    在日常开发中,尤其是业务开发,少不了利用 Java 对数据库进行基本的增删改查等数据操作,这也是 Java 工程师的必备技能之一.做好数据操作,不仅仅需要对 Java 语言相关框架的掌握,更需要对各种 ...

  8. crontab架构和格式

    crontab架构图 分时日月周*****my command(可以是一个linux命令,也可以是一个脚本文件,可以是shell格式也可以是python格式,也可是java格式.....) 按照格式编 ...

  9. 自定义mvc或mtv框架:基于wsgiref的web框架

    把mvc或mtv框架的model数据库,view:html,control逻辑处理,url判别,wsgiref集中在一个文件 代码如下 #!/usr/bin/env python #-*- codin ...

  10. SOD框架--系统概要

    SOD框架(源PDF.NETE框架)系统概要介绍 --核心三大功能(S,O,D): SQL-MAP XML SQL config and Map DAL SQL Map Entity ORM OQL( ...