马氏距离Mahalanobis Distance实例

article/2025/8/30 23:19:24

简介

如果按照欧氏距离去理解马氏距离,一定会迷惑一段时间。因为欧氏距离可以计算两个点之间的距离,而马氏距离是计算一个点距离一个聚类的距离。如果想通过马氏距离去计算某两个点之间的距离是行不通的。下面按照一般的套路介绍一下欧氏距离与马氏距离的定义,从定义上可以发现二者之间的差异。

欧氏距离

p和q两个点之间的欧氏距离,p和q都由n个维度构成。
在这里插入图片描述
对于维度尺度相同的情况,欧氏距离表现良好。如计算平面(二维)或三维空间中点之间的距离。但是对于有其它尺度的维度信息表现就不尽人意。下面两张表分别列举了面积和价格的关系,但是单位不同,这样子欧氏距离计算的表中任意两行之间的距离就差别巨大。
在这里插入图片描述
从技术上讲,可以通过归一化或者(x-mean)/std来克服这个问题,但是还有另一个主要缺点。也就是说,如果维度(数据集中的列)相关,(实际数据集中通常是这种情况),则点与点中心(分布)之间的欧氏距离所给出的信息很少或具有误导性关于一个点实际距离聚类的距离。下图左图X与Y两个维度(数据集的两列)不相关,欧氏距离可以很好的判别Point1和Point2距离聚类的远近。如右图所示,X与Y相关时欧氏距离就无法很好的表征Point1和Point2谁是异常点(离群点)了。因为,两个点与中心的距离相等(欧氏距离)。但是,即使两点之间的欧氏距离相等,但实际上只有蓝色点更接近该聚类。
在这里插入图片描述

出现这个问题的原因是因为,欧氏距离仅是两点之间的距离。它不考虑数据集中的其余点如何变化。因此,它不能用来真正判断一个点实际上与点的分布(聚类)的接近程度。马氏距离在很多应用场合可以很好的解决这一问题。

马氏距离

马氏距离是一种有效的多元距离计算方法,用于计算点与聚类(分布)之间的距离。其在多维数据集异常检测,高维数据集分类应用中表现出色。马氏距离是由Mahalanobis教授于1936年提出的,此后一直在各种统计应用中使用。
马氏距离的定义公式如下(定义如此简单,理解方式需要转变):
在这里插入图片描述
这里就不翻译了,英文更有助于理解,看到这里想必已经理解了马氏距离为什么是点到聚类的距离而不是点到点的距离了。

其中, - D^2        is the square of the Mahalanobis distance. - x          is the vector of the observation (row in a dataset), - m          is the vector of mean values of independent variables (mean of each column), - C^(-1)     is the inverse covariance matrix of independent variables. 

那么,如何理解以上公式呢?

让我们来看看 ( x − m ) T ∗ C − 1 (x-m)^T*C^{-1} (xm)TC1,x-m本质上是向量与平均值的距离。然后,将其除以协方差矩阵(或乘以协方差矩阵的逆),这实际上是常规的标准化公式 ( z = ( x – m u ) / s i g m a ) (z =(x – mu)/ sigma) z=xmu/sigma。除以协方差的作用是,如果数据集中的变量高度相关,则协方差将很高。除以较大的协方差将有效缩短距离。同样,如果X不相关,则协方差也不高,距离也不会减少太多。

基于Matlab计算马氏距离

假设有五个人的数据,每个人的数据为一个向量,包括身高、分数和年龄:

X       Y       Z
Height  Score   Age
64.0    580.0   29.0
66.0    570.0   33.0
68.0    590.0   37.0
69.0    660.0   46.0
73.0    600.0   55.0m =68.0 600.0   40.0n=5		

平均值m= (68.0, 600.0, 40.0)。现在假设另一个人的数据为v = (66, 640, 44), 通过马氏距离计算这个人与上面这一组人的马氏距离为5.33,下面基于Matlab 实现马氏距离的计算。
方法1:基于mahal函数

obs = [64.0    580.0   29.0; 66.0    570.0   33.0; 68.0    590.0   37.0; 69.0    660.0   46.0; 73.0    600.0   55.0];
per = [66, 640, 44];
mdi = sqrt(mahal(per,obs))

mahal返回的是马氏距离的平方,需要开根号得到马氏距离。

mdi =5.3345

mahal函数是Matlab自带函数,无需自己定义。从定义可以清楚的看到范围的是距离的平方,X为样本数据,也就是提前已知的一个聚类数据,Y是观测数据,也就是要计算Y中的每一个观测距离样本数据集的距离,如果Y有n个观测(n行数据),将会计算出来n个距离,如果Y只有一个观测将会计算出一个距离。从mahal的实现来看D2(I) = (Y(I,:)-MU) * SIGMA^(-1) * (Y(I,:)-MU)'转置是放在后面的,与马氏距离的定义有所不同。如果是自己实现马氏距离的时候,这一点要注意,否则会一直出错。

function d = mahal(Y,X);
%MAHAL Mahalanobis distance.
%   D2 = MAHAL(Y,X) returns the Mahalanobis distance (in squared units) of
%   each observation (point) in Y from the sample data in X, i.e.,
%
%      D2(I) = (Y(I,:)-MU) * SIGMA^(-1) * (Y(I,:)-MU)',
%
%   where MU and SIGMA are the sample mean and covariance of the data in X.
%   Rows of Y and X correspond to observations, and columns to variables.  X
%   and Y must have the same number of columns, but can have different numbers
%   of rows.  X must have more rows than columns.
%
%   Example:  Generate some highly correlated bivariate data in X.  The
%   observations in Y with equal coordinate values are much closer to X as
%   defined by Mahalanobis distance, compared to the observations with opposite
%   coordinate values, even though they are all approximately equidistant from
%   the mean using Euclidean distance.
%
%      x = mvnrnd([0;0], [1 .9;.9 1], 100);
%      y = [1 1;1 -1;-1 1;-1 -1];
%      MahalDist = mahal(y,x)
%      sqEuclidDist = sum((y - repmat(mean(x),4,1)).^2, 2)
%      plot(x(:,1),x(:,2),'b.',y(:,1),y(:,2),'ro')
%
%   See also PDIST.%   Copyright 1993-2007 The MathWorks, Inc. [rx,cx] = size(X);
[ry,cy] = size(Y);if cx ~= cyerror(message('stats:mahal:InputSizeMismatch'));
endif rx < cxerror(message('stats:mahal:TooFewRows'));
end
if any(imag(X(:))) | any(imag(Y(:)))error(message('stats:mahal:NoComplex'));
endm = mean(X,1);
M = m(ones(ry,1),:);
C = X - m(ones(rx,1),:);
[Q,R] = qr(C,0);ri = R'\(Y-M)';
d = sum(ri.*ri,1)'*(rx-1);

方法2:根据定义实现

obs = [64.0    580.0   29.0; 66.0    570.0   33.0; 68.0    590.0   37.0; 69.0    660.0   46.0; 73.0    600.0   55.0];
per = [66, 640, 44];mea = mean(obs);
icv = inv(cov(obs));mdi = sqrt(((per - mea)*icv)*(per - mea)')
mdi =5.3345

方法3:excel实现

在这里插入图片描述
从v中减去平均值:(66,640,44)–(68.0,600.0,40.0)得到v-m =(-2,40,4)。然后将1×3向量乘以3×3逆协方差矩阵,得到中间1×3结果tmp =(-9.9964,-0.1325,3.4413)。然后,将1×3中间结果乘以(-2、40、4)的转置1x3,以得到1×1马氏距离的平方= 28.4573。最后一步是取平方根,得到最终的马氏距离= 5.33。

总结

马氏距离不同于欧氏距离,马氏距离是对一组数据的距离,而不是像欧氏距离针对点与点的距离。明白了这一点就会发现很简单了。看资料还是要看英文版的,下面是博客内容出处的连篇文章。

参考
https://www.machinelearningplus.com/statistics/mahalanobis-distance/
https://jamesmccaffrey.wordpress.com/2017/11/09/example-of-calculating-the-mahalanobis-distance/


http://chatgpt.dhexx.cn/article/8TgD5WfI.shtml

相关文章

马氏距离详解

马氏距离详解 一、理性认知二、感性认知第一个例子第二个例子 三、实例认知四、公式推导推导过程 致谢 一、理性认知 马氏距离(Mahalanobis distance)是由印度统计学家马哈拉诺比斯(P. C. Mahalanobis)提出的&#xff0c;表示点与一个分布之间的距离。它是一种有效的计算两个未…

马氏距离(Mahalanobis Distance)

马氏距离(Mahalanobis Distance)是度量学习中一种常用的距离指标,同欧氏距离、曼哈顿距离、汉明距离等一样被用作评定数据之间的相似度指标。但却可以应对高维线性分布的数据中各维度间非独立同分布的问题。 什么是马氏距离 马氏距离(Mahalanobis Distance)是一种距离的度量,…

马氏距离详解(数学原理、适用场景、应用示例代码)

看了很多关于马氏距离&#xff08;Mahalanobis Distance&#xff09;的介绍&#xff0c;但是总感觉有一些地方不太清晰&#xff0c;所以结合数学公式、机器学习中的应用案例&#xff0c;从头梳理一下。 马氏距离实际上是欧氏距离在多变量下的“加强版”&#xff0c;用于测量点…

linux 配置swoole环境

linux 配置swoole环境 安装PHP wget http://mirrors.linuxeye.com/oneinstack-full.tar.gz && tar xzf oneinstack-full.tar.gz && ./oneinstack/install.sh --php_option 6 --phpcache_option 1 --reboot vim /usr/local/php/etc/php.ini 删除对exec函数…

ppp开启pap/chap认证

什么是pap&#xff1f; PAP 是 PPP 协议集中的一种链路控制协议&#xff0c;通过2次握手建立认证&#xff0c;对等结点持续重复发送 ID/ 密码&#xff08;明文&#xff09;给验证者。 什么是chap&#xff1f; CHAP通过三次握手验证被认证方的身份&#xff0c;在初始链路建立…

Ensp配置PPP CHAP认证

如图配置IP地址 启用 CHAP 认证&#xff0c;用户名/密码为&#xff1a;HuaWei/123456 确保RAR20-A和RAR20-B之间可以互通 按照如下步骤进行。 1&#xff09;配置IP地址&#xff0c;确保设备互通 <Huawei>system-view [Huawei]sysname RAR20-A [RAR20-A]in…

思科模拟器启用CHAP协议

chap使用密文格式发送chap认证信息&#xff0c;相比较pap的明文格式&#xff0c;更具有安全性。 添加s端口&#xff1a;先将路由器关闭&#xff0c;将HWIC-2T模块拖入卡槽&#xff0c;再将路由器开启 单向CHAP&#xff1a;R2为认证方 R1&#xff1a; hostname R1 …

H3C(27)——PAP与CHAP

1.PAP的单向认证 【R1】 <RouterA> system-view[RouterA] local-user userb class network [RouterA-luser-network-userb] password simple passb [RouterA-luser-network-userb] service-type ppp [RouterA-luser-network-userb] quit[RouterA] interface serial 1/0 …

ppp的chap认证报文原理以及细节

ppp的chap认证报文原理 chap认证&#xff1a; 1.验证方&#xff08;存有本地数据库的一方&#xff09;主动向被验证方发送一个挑战报文&#xff0c;里面包含报文id&#xff0c;随机数&#xff0c;本端用户名&#xff08;默认单向认证不带&#xff09;。 2.被验证方收到挑战请求…

Cisco(56)——PAP和CHAP

说明:R1,R3,R5,R7,R9的S1/1的地址为1.1.1.1/24,R2,R4,R6,R8,R10的S1/1的地址为1.1.1.2/24,实验步骤省略配置hostname和IP地址的过程! 一:PAP的单向认证,R1为认证方 R1(config)#username R2 password 0 123R1(config)#interface serial 1/1 R1(config-if)#encapsulation …

ppp协议(pap和chap验证模式)拓扑(eNSP)

一&#xff0e;基本配置 新建拓扑 ①添加路由&#xff1a;添加两个Axaioxia_2220路由到拓扑图上 ②改标签名&#xff1a;其标签名称默认为Axiaoxia_1与Axaioxia_2&#xff0c;双击“Axiaoxia_1与Axaioxia_2”手动改为自己需要的名, 我改为“xiaoxia_1与xiaoxia_2” ③添加…

PAP与CHAP认证

一、PPP介绍 PPP&#xff08;point-to-point protocol&#xff09;是一种点到点链路层协议&#xff0c;主要用于在全双工的同异步链路上进行点到点的数据传输。##在PPP中主要由三类协议簇组成 1、链路控制协议簇&#xff08;Link Control protocol&#xff09;&#xff1a;主要…

pap认证和chap认证实验

目录标题 第一步&#xff1a;在r5上配置环回和s3/0/0接口地址&#xff0c;及pap认证&#xff08;主认证&#xff09;第二步&#xff1a;在r1上配置接口&#xff0c;pap认证&#xff08;被认证方&#xff09;第三步&#xff1a;在r5上配置s3/0/1接口&#xff0c;chap认证&#x…

PPP原理 PAP认证 CHAP认证

目录 PPP的基本构架 PPP主要由三类协议族组成 PPP应用场景 PPP缺省配置 配置PAP认证 操作步骤 配置认证方 配置被认证方 配置CHAP认证 操作步骤 配置认证方 配置被认证方 认证方没有配置用户名 配置被认证方 PPP的基本构架 PPP协议处于TCP/IP协议栈的数据链路层&…

思科模拟器入门基础-PPP协议双向CHAP认证

PPP&#xff1a;点对点协议 是一种用来同步调制连接的数据链路层协议 具有身份验证功能(PAP、CHAP)、动态分配IP地址的能力、错误检测能力 CHAP&#xff1a;PPP协议认证的一种方式 CHAP使用密文传输 使用三次握手实现 比PAP安全性高 实验环境 Cisco Packet Tracer 6.02台PT路由…

PAP认证、CHAP认证

概述 实验目标 掌握PAP、chap认证方式的配置与验证方法 实验描述 路由器&#xff08;带串口&#xff09; 2 台V.35 线缆&#xff08;DTE/DCE&#xff09; 1 对 2技术分析 PPP 协议位于 OSI 七层模型的数据链路层&#xff0c;PPP 协议按照功能划分为两个子层&#xff1a;LCP…

CHAP认证

实验拓扑 Jan16 公司因业务发展&#xff0c;建立了分公司&#xff0c;租用了专门的线路用于总部与分公司的连联。为保障通信线路的数据安全&#xff0c;需在路由器上配置安全认证。项目拓扑如图所示。 1. 基础配置 2. 配置路由器接口 &#xff08;1&#xff09;R1的配置 [Hu…

广域网技术(PAP和CHAP)

第十六章&#xff1a;广域网技术 随着经济全球化与数字化变革加速&#xff0c;企业规模不断扩大&#xff0c;越来越多的分支机构出现在不同的地域。每个分支的网络被认为一个LAN&#xff08;Local Area Network&#xff0c;局域网&#xff09;&#xff0c;总部和各分支机构之间…

PAP和CHAP认证方式

目录 一、实验目的和要求 二、实验原理 三、主要仪器设备和实验环境 四、实验内容及步骤 4.2基础实验&#xff08;PAP认证&#xff09;&#xff1a; 4.3基础实验&#xff08;CHAP认证&#xff09;&#xff1a; 4.3扩展实验&#xff08;三台路由器之间的CHAP认证&#xf…

PAP认证和CHAP认证原理解析

PAP&#xff08;PasswordAuthenticationProtocol 密码认证协议&#xff09; PAP 是 PPP 协议集中的一种链路控制协议&#xff0c;通过2次握手建立认证&#xff0c;对等结点持续重复发送 ID/ 密码&#xff08;明文&#xff09;给验证者&#xff0c;直至认证得到响应或连接终止&…