释放马氏距离的力量:用 Python 探索多元数据分析
一、说明
马哈拉诺比斯距离(Mahalanobis Distance)是一种测量两个概率分布之间距离的方法。它是基于样本协方差矩阵的函数,用于评估两个向量之间的相似程度。Mahalanobis Distance考虑了数据集中各个特征之间的协方差,因此比欧氏距离更适合用于涉及多个特征的数据集。Mahalanobis Distance可以应用于各种机器学习算法中,如聚类分析、分类算法和异常检测。
维沙尔·夏尔马

二、基本概念介绍
马氏距离是一种统计工具,用于测量点和分布之间的距离。它是一种强大的技术,可考虑数据集中变量之间的相关性,使其成为各种应用(如异常值检测、聚类和分类)中的宝贵工具。
例如,让我们考虑一个场景,其中一家公司想要识别信用卡交易中的潜在欺诈行为。该公司收集有关各种变量的数据,例如交易金额,位置,时间和其他信用卡交易详细信息。然后,它使用马氏距离来测量每笔交易与所有交易分布之间的距离。通过这样做,它可以识别与其他交易明显不同的交易,并可能表明欺诈活动。
马氏距离测量点和分布之间的距离,考虑数据中变量之间的相关性。它是点 x 与具有平均向量 μ 和协方差矩阵 Σ 的分布之间的距离。马氏距离的公式如下:
D² = (x-μ)TΣ⁻¹(x-μ)
其中 D² 是平方马氏距离,x 是相关点,μ 是分布的平均向量,Σ 是分布的协方差矩阵,T 表示矩阵的转置。
为了更好地理解这个公式,让我们举一个例子。假设我们有一个包含两个变量 X 和 Y 的数据集,并且我们想要测量一个点 (2, 3) 与数据集中所有点的分布之间的距离。我们计算数据集的平均向量和协方差矩阵如下:
μ = [mean(X), mean(Y)] = [3, 4]
Σ = [[var(X), cov(X,Y)], [cov(X,Y), var(Y)]] = [[2, -1], [-1, 2]]
现在,我们可以使用马氏距离公式来计算点 (2, 3) 和分布之间的距离:
D² = ([2, 3]-[3, 4])T[[2, -1], [-1, 2]]⁻¹([2, 3]-[3, 4])
= [-1, -1]T[[2, -1], [-1, 2]]⁻¹[-1, -1]
= [2, -2]T[[2/3, 1/3], [1/3, 2/3]][2, -2]
= [2/3, -2/3]T[2, -2]
= 4/3。
因此,点 (2, 3) 与分布之间的马氏距离平方为 4/3。通过计算马氏距离,我们可以确定点与分布的距离,考虑 X 和 Y 变量之间的相关性。
import numpy as np
from scipy.spatial.distance import mahalanobis
from sklearn.datasets import make_blobs# Create a dataset with 2 clusters
X, y = make_blobs(n_samples=100, centers=2, random_state=42)# Calculate the mean vector and covariance matrix of the dataset
mu = np.mean(X, axis=0)
sigma = np.cov(X.T)# Calculate the Mahalanobis Distance between two points
x1 = [2, 2]
x2 = [-2, -2]
dist_x1 = mahalanobis(x1, mu, np.linalg.inv(sigma))
dist_x2 = mahalanobis(x2, mu, np.linalg.inv(sigma))# Print the distances
print("Distance between point x1 and the distribution:", dist_x1)
print("Distance between point x2 and the distribution:", dist_x2)#OUTPUTDistance between point x1 and the distribution: 2.099478227196236
Distance between point x2 and the distribution: 8.065203145117373 以下是如何使用马氏距离的一些示例:
- 异常值检测:马氏距离可以检测数据集中的异常值。异常值是与数据集其余部分明显不同的数据点。通过计算每个数据点与数据集平均值之间的马氏距离,我们可以识别远离平均值的数据点。这些数据点可被视为异常值,可能需要删除或进一步调查。
- 聚类:马氏距离也可用于聚类数据点。聚类是将相似的数据点分组在一起的过程。通过计算每个数据点之间的马氏距离和每个聚类的平均值,我们可以确定数据点属于哪个聚类。此方法可用于对具有不同方差或协方差的数据点进行聚类分析。
- 图像分类: 马氏距离可用于图像分类任务。此应用程序使用马氏距离来测量测试图像和一组训练图像之间的相似性。通过计算测试图像和每个训练图像之间的马氏距离,我们可以确定哪个训练图像与测试图像最相似。此方法对于人脸识别和对象检测等任务很有用。
- 欺诈检测:马氏距离可用于金融交易中的欺诈检测。通过计算一笔交易和一组历史交易之间的马氏距离,我们可以确定该交易是不寻常的还是可疑的。此方法可用于检测可能被忽视的欺诈易
以下是如何使用马氏距离的一些示例:
三、示例
下面是如何使用马哈拉诺比斯距离为现实生活中的数据集创建美丽图的示例:
在本例中,让我们使用著名的鸢尾花数据集,其中包含 150 朵鸢尾花的测量值。我们将使用萼片长度、宽度和花瓣长度作为我们的特征。
首先,我们将计算数据集中每个数据点的马氏距离。我们可以在 Python 中使用以下代码来做到这一点:
import numpy as np
from scipy.spatial.distance import mahalanobis# load the iris dataset
from sklearn.datasets import load_iris
iris = load_iris()# calculate the mean and covariance matrix of the dataset
mean = np.mean(iris.data, axis=0)
cov = np.cov(iris.data.T)# calculate the Mahalanobis distance for each data point
mahalanobis_dist = [mahalanobis(x, mean, np.linalg.inv(cov)) for x in iris.data] 接下来,我们可以使用前两个特征(萼片长度和萼片宽度)创建虹膜数据集的散点图,并根据其马氏距离为每个数据点着色。我们可以使用颜色图将马氏距离映射到色标。这是该图的代码:
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap# create a color map for the Mahalanobis distances
cmap = ListedColormap(['r', 'g', 'b'])
norm = plt.Normalize(min(mahalanobis_dist), max(mahalanobis_dist))# create a scatter plot of the iris dataset
plt.scatter(iris.data[:, 0], iris.data[:, 1], c=mahalanobis_dist, cmap=cmap, norm=norm)# add a color bar
plt.colorbar()
plt.xlabel('sepal length')
plt.ylabel('sepal width')
plt.title('Mahalanobis Distance for Iris Dataset')
plt.show() 
生成的图显示了鸢尾花数据集,每个数据点根据其马氏距离着色。远离平均值的数据点(即异常值)以红色显示,而接近平均值的数据点以绿色和蓝色着色。
下面是另一个使用sci-kit-learn库附带的著名Wine数据集的示例:
import numpy as np
from scipy.spatial.distance import mahalanobis
import pandas as pd
from sklearn.datasets import load_wine
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap# load the wine dataset
wine = load_wine()
wine_df = pd.DataFrame(wine.data, columns=wine.feature_names)# calculate the mean and covariance matrix of the dataset
mean = np.mean(wine_df, axis=0)
cov = np.cov(wine_df.T)# calculate the Mahalanobis distance for each data point
mahalanobis_dist = [mahalanobis(x, mean, np.linalg.inv(cov)) for x in wine_df.values]# create a scatter plot of the wine dataset using two highly correlated features
plt.scatter(wine_df['flavanoids'], wine_df['color_intensity'], c=mahalanobis_dist, cmap='coolwarm')# add a color bar
plt.colorbar()
plt.xlabel('flavanoids')
plt.ylabel('color_intensity')
plt.title('Mahalanobis Distance for Wine Dataset')
plt.show() 
两个高度相关的特征(类黄酮和color_intensity)的散点图,每个数据点根据其马氏距离着色。
相关文章:
释放马氏距离的力量:用 Python 探索多元数据分析
一、说明 马哈拉诺比斯距离(Mahalanobis Distance)是一种测量两个概率分布之间距离的方法。它是基于样本协方差矩阵的函数,用于评估两个向量之间的相似程度。Mahalanobis Distance考虑了数据集中各个特征之间的协方差,因此比欧氏距…...
【不限于联想Y9000P电脑关盖再打开时黑屏的解决办法】
不限于联想Y9000P电脑关盖再打开时黑屏的解决办法 问题的前言问题的出现问题拟解决 问题的前言 事情发生在昨天,更新了Win11系统后: 最惹人注目的三处地方就是: 1.可以查看时间的秒数了; 2.右键展示的内容变窄了; 3.按…...
策略模式实战应用
场景 假设做了个卖课网站,会员等级分为月vip、年vip、终生vip,每个等级买课的优惠力度不一样,传统的写法肯定是一堆的 if-else,现在使用策略模式写出代码实现 代码实现 策略模式的核心思想就是对扩展开放,对修改关闭…...
JAVA集合-Map
// 【Map】:双列集合,键值对形式存储,映射关系(kay,value) // 实现:HashMap // 子接口:SortedMap Map的子接口 // 实现类:TreeMap // HashMap // 1。可以插入null // …...
利用Simulink Test进行模型单元测试 - 1
1.搭建用于测试的简单模型 随手搭建了一个demo模型MilTestModel,模型中不带参数 2.创建测试框架 1.模型空白处右击 测试框架 > 为‘MilTestModel’创建 菜单 2.在创建测试框架对话框中,点击OK,对应的测试框架MilTestMode_Harness1就自动…...
深入探讨代理技术:保障网络安全与高效爬虫
1. Socks5代理与IP代理的区别与应用 Socks5代理和IP代理是代理技术中的两个重要方面,它们有着不同的特点和应用场景。Socks5代理是一种协议,支持TCP和UDP流量传输,适用于需要实时数据传输的场景,例如在线游戏或实时通信应用。而I…...
HDMI接口的PCB布局布线要求
高清多媒体接口(High Definition Multimedia Interface),简称:HDMI,是一种全数字化视频和声音发送接口,可以发送未压缩的音频及视频信号。随着技术的不断提升,HDMI的传输速率也不断的提升&#…...
Linux tar包安装 Prometheus 和 Grafana(知识点:systemd Unit/重定向)
0. 介绍 用tar包的方式安装 Prometheus 和 Grafana Prometheus:开源的监控方案Grafana:将Prometheus的数据可视化平台 Prometheus已经有了查询功能为什么还需要grafana呢?Prometheus基于promQL这一SQL方言,有一定门槛!Grafana基于浏览器的操作与可视化图表大大降低了理解难…...
【Vue框架】用户和请求
前言 在上一篇 【Vue框架】Vuex状态管理 针对Vuex状态管理以getters.js进行说明,没有对其中state引入的对象进行详细介绍,因为整体都比较简单,也就不对全部做详细介绍了;但其中的user.js涉及到获取用户的信息、前后端请求的token…...
NGINX组件(rewrite)
一、location匹配的规则和优先级(*) URI:统一资源标识符,是一种字符串标识,用于标识抽象的或者是物理资源;如:文件、图片、视频等 nginx中的URI匹配的是:网址”/“后的路径 如&…...
网页显示摄像头数据的方法---基于web video server
1. 背景: 在ros系统中有发布摄像头的相关驱动rgb数据,需求端需要将rgb数据可以直接在网页上去显示。 问题解决: web_video_server功能包,相关链接: web_video_server - ROS Wiki 2. 下载,安装和编译&a…...
SIFT 算法 | 如何在 Python 中使用 SIFT 进行图像匹配
介绍 人类通过记忆和理解来识别物体、人和图像。你看到某件事的次数越多,你就越容易记住它。此外,每当一个图像在你的脑海中弹出时,它就会将该项目或图像与一堆相关的图像或事物联系起来。如果我告诉你我们可以使用一种称为 SIFT 算法的技术来教机器做同样的事情呢? 尽管…...
K8S系列四:服务管理
写在前面 本文是K8S系列第四篇,主要面向对k8s新手同学。阅读本文需要读者对k8s的基本概念,比如Pod、Deployment、Service、Namespace等基础概念有所了解,尚且不了解的同学推荐先阅读本系列的第一篇文章《K8S系列一:概念入门》[1]…...
冠达管理:融券卖出交易规则?
融券卖出买卖是指投资者在没有实际持有某只股票的情况下,经过借入该股票并卖出来取得赢利的一种股票买卖方式。融券卖出买卖规矩针对不同市场、不同证券公司之间可能会存在一些差异,但基本的规矩包含如下几个方面。 一、融资融券的资历要求 在进行融券卖…...
图像变形之移动最小二乘算法(MLS)
基本原理 基于移动最小二乘的图像变形是通过一组源控制点和目标控制点来控制变形,对于每一个待求变形后位置的点而言,根据预设的形变类型(如仿射变换、相似变换、刚性变换)求解一个最小二乘优化目标函数估计一个局部的坐标变换矩阵…...
搭建一个功能齐全的网站
搭建一个功能齐全的网站,需要准备和掌握的一些关键技术和功能可概括如下: 前端技术: HTML/CSS - 网页内容结构和样式JavaScript - 实现网页交互功能前端框架(Vue、React等) - 更高效开发交互页面响应式设计 - 网站适配移动端 后端技术: 服务器(Linux、Nginx等) - 提供网站访…...
Java-jar和war包的区别
jar包和war包的区别: 1、war是一个web模块,其中需要包括WEB-INF,是可以直接运行的WEB模块;jar一般只是包括一些class文件,在声明了Main_class之后是可以用java命令运行的。 2、war包是做好一个web应用后,通…...
分类预测 | MATLAB实现CNN-BiGRU-Attention多输入分类预测
分类预测 | MATLAB实现CNN-BiGRU-Attention多输入单输出分类预测 目录 分类预测 | MATLAB实现CNN-BiGRU-Attention多输入单输出分类预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 Matlab实现CNN-BiGRU-Attention多特征分类预测,卷积双向门控循环…...
C#小轮子:Visual Studio自动编译Sass文件
文章目录 前言插件安装插件使用compilerconfig.jsonsass输入和css输出(自动生成)默认配置(我不懂就不去动他了) 解决Blazor热重载Bug 前言 我们知道css文件用起来太麻烦,如果样式一多,嵌套起来用css样式就…...
iOS字体像素与磅的对应关系
注意:低于iOS10的系统,显示的字宽和字高比高于iOS10的系统小。 这就是iOS10系统发布时,很多app显示的内容后面出现…,因而出现很多app为了适配iOS10系统而重新发布新版本。 用PS设计的iOS效果图中,字体是以像素&#x…...
B站视频策划效率提升300%的ChatGPT实战手册(含18个领域专属Prompt库+自动打标/分镜/口播时长优化工具链)
更多请点击: https://intelliparadigm.com 第一章:B站视频策划的AI范式迁移与效能革命 传统B站视频策划高度依赖人工选题、脚本撰写与热点预判,响应周期长、个性化不足、数据洞察滞后。随着多模态大模型与垂类Agent技术成熟,策划…...
【AIGC内容竞争力突围关键】:为什么92%的ChatGPT使用者不会“讲故事”?资深NLP架构师首曝4层认知断层
更多请点击: https://kaifayun.com 第一章:AIGC内容竞争力突围的关键认知跃迁 当生成式AI从“能写”迈入“懂场景、知约束、可迭代”的新阶段,内容竞争力的本质已悄然迁移——它不再取决于单次输出的流畅度,而系于人机协同的认知…...
老师上课没空做笔记?2026年这3款AI整理工具,下课直接梳理课堂重点
相信很多同学和我一样,上课最纠结的就是记笔记这件事。老师讲课节奏很快,知识点一环扣一环,一边要认真听讲、跟上课堂思路,一边又要低头写字,稍微分心就错过关键考点。遇到网课、回放课就更头疼了,整节课视…...
仅限首批200家信创单位获取:DeepSeek审核API私有化部署密钥策略与国密SM4加密审计日志规范
更多请点击: https://kaifayun.com 第一章:DeepSeek输出内容审核 DeepSeek系列大模型在生成文本时具备强大的语言连贯性与知识覆盖能力,但其输出内容仍需经过系统性审核,以确保安全性、事实准确性与合规性。审核机制不仅面向最终…...
百度网盘macOS客户端逆向工程深度解析:Method Swizzling技术实现与应用
百度网盘macOS客户端逆向工程深度解析:Method Swizzling技术实现与应用 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 百度网盘SVIP破解插…...
终极硬件信息伪装技术:5大内核级修改方案深度解析
终极硬件信息伪装技术:5大内核级修改方案深度解析 【免费下载链接】EASY-HWID-SPOOFER 基于内核模式的硬件信息欺骗工具 项目地址: https://gitcode.com/gh_mirrors/ea/EASY-HWID-SPOOFER 硬件指纹追踪已成为现代数字隐私面临的最大威胁之一。无论是网站追踪…...
DeepXDE终极指南:如何用科学机器学习轻松求解物理方程
DeepXDE终极指南:如何用科学机器学习轻松求解物理方程 【免费下载链接】deepxde A library for scientific machine learning and physics-informed learning 项目地址: https://gitcode.com/gh_mirrors/de/deepxde DeepXDE是一款革命性的开源科学机器学习库…...
STL到STEP格式转换:跨越制造业数字鸿沟的工程化解决方案
STL到STEP格式转换:跨越制造业数字鸿沟的工程化解决方案 【免费下载链接】stltostp Convert stl files to STEP brep files 项目地址: https://gitcode.com/gh_mirrors/st/stltostp 在现代化制造与设计流程中,3D数据格式的互操作性已成为制约生产…...
Axure RP中文语言包终极配置指南:5分钟实现界面完全本地化
Axure RP中文语言包终极配置指南:5分钟实现界面完全本地化 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axu…...
3步解决方案:用BG3 Mod Manager彻底解决博德之门3模组管理难题
3步解决方案:用BG3 Mod Manager彻底解决博德之门3模组管理难题 【免费下载链接】BG3ModManager A mod manager for Baldurs Gate 3. This is the only official source! 项目地址: https://gitcode.com/gh_mirrors/bg/BG3ModManager 博德之门3模组管理器&…...
