当前位置: 首页 > article >正文

Python实战:用马氏距离检测异常值(附完整代码与数据集)

Python实战用马氏距离检测多维度数据异常值在数据分析领域异常值检测一直是保证数据质量的关键环节。当面对包含多个相关变量的数据集时传统的欧氏距离往往难以准确识别异常点。这时马氏距离Mahalanobis Distance便展现出其独特优势——它能够考虑变量间的相关性提供更准确的异常检测结果。1. 环境准备与数据加载首先确保你的Python环境已安装必要的科学计算库# 基础数据处理三件套 import numpy as np import pandas as pd from scipy import stats # 可视化支持 import matplotlib.pyplot as plt import seaborn as sns # 距离计算专用模块 from scipy.spatial import distance我们将使用经典的钻石数据集进行演示这个数据集包含钻石的多个物理属性和价格信息diamond_data pd.read_csv(https://raw.githubusercontent.com/selva86/datasets/master/diamonds.csv) selected_columns [carat, depth, table, price] df diamond_data[selected_columns].copy()提示在实际项目中建议先进行数据探索分析(EDA)使用df.describe()和df.info()快速了解数据分布和完整性。2. 马氏距离的核心计算马氏距离的计算公式为$$ D_M(x) \sqrt{(x-\mu)^T \Sigma^{-1} (x-\mu)} $$其中$x$ 是待测数据点$\mu$ 是数据集的均值向量$\Sigma$ 是协方差矩阵Python实现代码如下def calculate_mahalanobis(dataNone, target_pointsNone): 计算目标点相对于数据分布的马氏距离 参数 data -- 基准数据集(DataFrame) target_points -- 待测数据点(与data同结构的DataFrame) 返回 马氏距离数组 if target_points is None: target_points data.copy() # 计算均值向量和协方差矩阵 mu np.mean(data, axis0) cov np.cov(data, rowvarFalse) # 计算协方差矩阵的逆 try: inv_cov np.linalg.inv(cov) except np.linalg.LinAlgError: raise ValueError(协方差矩阵不可逆请检查数据或减少维度) # 计算马氏距离 diff target_points - mu left_term np.dot(diff, inv_cov) mahal np.sum(left_term * diff, axis1) return np.sqrt(mahal)3. 异常值判定策略计算得到马氏距离后我们需要设定合理的阈值来判断异常值。常用的方法有卡方分布临界值假设数据服从多元正态分布马氏距离的平方服从卡方分布四分位距法(IQR)对距离值本身进行异常检测3σ原则适用于近似正态分布的距离值这里展示卡方分布法的实现def detect_outliers(mahal_dist, alpha0.01): 基于卡方分布的异常值检测 参数 mahal_dist -- 马氏距离数组 alpha -- 显著性水平 返回 布尔数组True表示异常点 squared_dist mahal_dist ** 2 dof len(mahal_dist) - 1 # 自由度 threshold stats.chi2.ppf(1-alpha, dfdof) return squared_dist threshold实际应用示例# 计算所有样本的马氏距离 mahal_dist calculate_mahalanobis(datadf) # 检测异常点 outliers detect_outliers(mahal_dist) print(f检测到异常点数量{sum(outliers)}) print(f异常点占比{sum(outliers)/len(df):.2%})4. 结果可视化与分析良好的可视化能帮助我们直观理解检测结果。下面是多维数据异常检测的几种可视化方法散点矩阵图# 添加异常标记列 df[is_outlier] outliers # 绘制散点矩阵 sns.pairplot(df, hueis_outlier, palette{False:blue, True:red}) plt.suptitle(多变量异常检测结果, y1.02) plt.show()马氏距离分布图plt.figure(figsize(10, 6)) sns.histplot(mahal_dist, kdeTrue, bins50) plt.axvline(xnp.sqrt(stats.chi2.ppf(0.99, dflen(df.columns))), colorr, linestyle--) plt.title(马氏距离分布与阈值线) plt.xlabel(马氏距离) plt.ylabel(频数) plt.show()对于更高维数据可以考虑使用PCA降维后再可视化from sklearn.decomposition import PCA pca PCA(n_components2) pca_result pca.fit_transform(df[selected_columns]) plt.figure(figsize(10, 6)) plt.scatter(pca_result[~outliers, 0], pca_result[~outliers, 1], cblue, alpha0.5, label正常点) plt.scatter(pca_result[outliers, 0], pca_result[outliers, 1], cred, alpha0.8, label异常点) plt.title(PCA降维后的异常点分布) plt.legend() plt.show()5. 实际应用中的注意事项在实际项目中应用马氏距离异常检测时有几个关键点需要特别注意数据规模与维度关系样本数应远大于特征维度建议至少10:1高维情况下协方差矩阵可能不可逆数据预处理要求马氏距离对量纲不敏感但仍建议标准化处理需要处理缺失值建议删除或合理填充非正态分布数据对于明显非正态分布的特征考虑进行变换可以使用Box-Cox或Yeo-Johnson变换计算效率优化大数据集时可使用随机采样考虑增量计算或分布式计算# 大数据集处理示例 def process_large_data(data, chunk_size10000): 分块处理大型数据集 mahal_results [] for i in range(0, len(data), chunk_size): chunk data.iloc[i:ichunk_size] mahal_results.append(calculate_mahalanobis(data, chunk)) return np.concatenate(mahal_results)6. 与其他方法的对比马氏距离并非唯一的多元异常检测方法下表对比了几种常见技术方法优点局限性适用场景马氏距离考虑变量相关性无需参数调优要求样本维度假设正态分布中低维数值数据孤立森林适合高维数据计算效率高对局部异常不敏感高维数据大规模数据集LOF能检测局部密度异常计算复杂度高聚类数据中的局部异常One-Class SVM适合非线性关系参数调优复杂复杂分布的小数据集在电商价格异常检测的实际案例中马氏距离相比简单阈值法能减少约40%的误报特别是在处理不同品类商品时效果显著。

相关文章:

Python实战:用马氏距离检测异常值(附完整代码与数据集)

Python实战:用马氏距离检测多维度数据异常值 在数据分析领域,异常值检测一直是保证数据质量的关键环节。当面对包含多个相关变量的数据集时,传统的欧氏距离往往难以准确识别异常点。这时,马氏距离(Mahalanobis Distanc…...

惠普游戏本终极掌控:OmenSuperHub免费性能优化工具完全指南

惠普游戏本终极掌控:OmenSuperHub免费性能优化工具完全指南 【免费下载链接】OmenSuperHub 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 还在为官方OMEN Gaming Hub的臃肿体积和频繁弹窗烦恼吗?OmenSuperHub这款纯净硬件控制工具…...

粒子群算法除了调参还能干嘛?手把手教你用它拟合微分方程和多元函数

粒子群算法高阶实战:从微分方程拟合到多元函数优化的工程解决方案 当传统优化方法在复杂函数拟合任务中频频碰壁时,粒子群算法(PSO)展现出了独特的优势。本文将带您深入探索PSO在微分方程参数反演和多元函数拟合中的实战应用&…...

C++ 浮点数输出位数控制详解

在 C 中控制浮点数的输出格式&#xff08;精度、位数、格式&#xff09;是一项常用技能。以下从基础到进阶详细讲解。一、头文件控制浮点数输出需要包含以下头文件&#xff1a;cpp#include <iostream> #include <iomanip> // 必须包含&#xff0c;提供格式化操作符…...

Unity3D的android项目启动报错:your hardware does not support this application

目录 1、产生这种问题的原因: 2.解决方案 2.1、排查unity导出的工程里面含有的so支持的是那些平台比如是下面两个; 2.2.排查接入的ysdk的aar文件里面包括的平台so,发现如下: 2.3、检查工程的grandle文件,确定是否引入了unity的so文件和ysdk的so文件,具体如下: 最近碰…...

ubuntu24.04离线安装deb格式的mysql-community-8.4.4

1&#xff0c;下载解压​ 参考&#xff1a;https://blog.csdn.net/2202_76101487/article/details/145967039 下载页面选择不同的版本&#xff1a; https://dev.mysql.com/downloads/mysql/ubuntu24 下载&#xff1a; wget https://cdn.mysql.com//Downloads/MySQL-8.4/mysql-…...

V4L2总结(2)数据及命令简介

下面具体说明开发流程&#xff08;网上找的&#xff09;打开视频设备在V4L2中&#xff0c;视频设备被看做一个文件。使用open函数打开这个设备&#xff1a;//用非阻塞模式打开摄像头设备intcameraFd;cameraFd open(“/dev/video0″, O_RDWR| O_NONBLOCK, 0);//如果用阻塞模式打…...

V4L2总结(3)代码示例

//V4L2使用示例程序 //来源&#xff1a;网络 //时间&#xff1a;2013.08.27#include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h>#include <getopt.h> #include <fcntl.h> #include &l…...

V4L2总结(1)- 编程使用总结

V4L2 编程使用总结说明&#xff1a; V4L2(Video For Linux Two) 是内核提供给应用程序访问音、视频驱动的统一接口。 流程&#xff1a; 内存映射方式打开设备文件。 int fdopen(”/dev/video0″,O_RDWR);取得设备的capability&#xff0c;看看设备具有什么功能&#xff0c…...

.NET Core后端调用Qwen3-ASR-0.6B API实现会议语音转写系统

.NET Core后端调用Qwen3-ASR-0.6B API实现会议语音转写系统 1. 引言 想象一下&#xff0c;每次开完会&#xff0c;你是不是都得花上半小时甚至更久&#xff0c;去整理那些零零散散的会议记录&#xff1f;特别是那种多人参与的讨论会&#xff0c;谁说了什么&#xff0c;观点是…...

OpenClaw飞书机器人进阶:Qwen3-VL:30B多模态技能开发指南

OpenClaw飞书机器人进阶&#xff1a;Qwen3-VL:30B多模态技能开发指南 1. 为什么需要多模态飞书机器人&#xff1f; 去年冬天&#xff0c;我负责团队的知识库整理工作时&#xff0c;每天要处理上百张会议白板照片和截图。手动转录这些内容不仅耗时&#xff0c;还经常遗漏关键信…...

纯文本微调骗了我们多久?信息论视角揭开图大模型的对齐伪像与破局之道

在当前将大语言模型引入图学习领域的浪潮中&#xff0c;图符号化大语言模型 是目前的主流范式。它们的标准做法是将复杂的图结构和节点文本属性编码成一个图标记序列&#xff0c;将其作为前缀输入基座大模型&#xff0c;最后利用基于文本的节点分类等指令进行自回归微调。然而&…...

终极SQL实战训练:如何通过谋杀谜案游戏高效掌握数据库查询技能

终极SQL实战训练&#xff1a;如何通过谋杀谜案游戏高效掌握数据库查询技能 【免费下载链接】sql-mysteries Inspired by veltmans command-line mystery, use SQL to research clues and find out whodunit! 项目地址: https://gitcode.com/gh_mirrors/sq/sql-mysteries …...

从零开始掌握Camera Shakify:为Blender动画注入真实感的终极指南

从零开始掌握Camera Shakify&#xff1a;为Blender动画注入真实感的终极指南 【免费下载链接】camera_shakify 项目地址: https://gitcode.com/gh_mirrors/ca/camera_shakify 在数字动画创作中&#xff0c;过于完美的稳定镜头往往会显得不自然。Camera Shakify作为一款…...

Go在Window平台下编译出来的exe如何添加一个图标--推荐使用

2026年编译打包方式补充&#xff1a;1.打包成windows下带有图标的文件办法&#xff1a;打包命令&#xff1a; 1.关键参数&#xff1a;-H windowsgui 隐藏 cmd 窗口&#xff08;GUI 程序&#xff09;&#xff0c;-w -s 减小 exe 体积。 如果你是发布程序&#xff0c;不想让别人看…...

家庭老照片修复神器:GPEN镜像批量处理教程,一次搞定整本相册

家庭老照片修复神器&#xff1a;GPEN镜像批量处理教程&#xff0c;一次搞定整本相册 1. 老照片修复的痛点与解决方案 每个家庭都珍藏着一些泛黄的老照片&#xff0c;它们承载着珍贵的回忆。但随着时间的推移&#xff0c;这些照片往往会出现模糊、划痕、褪色等问题。传统的手工…...

从零开始:如何为你的降压型DC-DC变换器选择合适的反馈控制模式?

降压型DC-DC变换器反馈控制模式深度解析与选型指南 在电源设计领域&#xff0c;选择合适的反馈控制模式往往决定着整个系统的性能上限。想象一下这样的场景&#xff1a;当你精心设计的电源模块在实验室测试时表现完美&#xff0c;却在量产阶段频繁出现输出电压振荡&#xff1b;…...

(11-1)感知-运动耦合与行为理解:视觉与步态的耦合机制

本章内容围绕“感知—运动”耦合与行为理解展开&#xff0c;系统讲解了人形机器人如何将视觉、触觉等多模态感知信息转化为稳定、灵活的运动与操作行为。首先介绍了视觉与步态的耦合机制&#xff0c;重点分析了落脚点选择、动态障碍物规避以及步态参数的自适应调整方法。随后讲…...

文章目录汇总

文章目录1. 编程语言1.1 C 语言1.2 Capl 编程1.3 Python 编程2. 工具使用手册2.1 编辑器2.1.1 Vscode02.1.2 PyCharm2.1.3 Notepad2.2 版本管控2.2.1 Git2.2.2 Svn2.2.3 Source tree2.3 软件开发2.3.1 ISOLAR2.3.2 EB2.3.3 PLS UDE2.3.4 Beyond Compare2.4 软件调试2.4.1 CANoe…...

Bypass Paywalls Clean完全配置与优化指南

Bypass Paywalls Clean完全配置与优化指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 问题定位 诊断安装故障 当开源工具无法正常安装时&#xff0c;首先需要系统排查潜在问题。…...

Qwen3-ASR-1.7B部署案例:高校实验室语音数据标注平台本地化改造

Qwen3-ASR-1.7B部署案例&#xff1a;高校实验室语音数据标注平台本地化改造 1. 项目背景与需求 高校语音研究实验室经常面临一个实际问题&#xff1a;大量语音数据需要标注处理&#xff0c;但使用云端语音识别服务存在隐私泄露风险&#xff0c;且网络依赖导致处理效率低下。传…...

Kiro使用最佳教程

Kiro使用最佳教程&#xff1a;从入门到精通&#xff0c;高效AI编程全攻略Kiro是亚马逊云科技推出的新一代AI驱动型集成开发环境&#xff08;IDE&#xff09;&#xff0c;同时配套CLI命令行工具&#xff0c;主打规范驱动开发&#xff08;Spec-Driven Development&#xff09;&am…...

如何快速掌握IOD库:C++14元编程的终极工具指南

如何快速掌握IOD库&#xff1a;C14元编程的终极工具指南 【免费下载链接】iod Meta programming utilities for C14. Merged in matt-42/lithium 项目地址: https://gitcode.com/gh_mirrors/io/iod IOD库是一个专为C14设计的元编程实用工具集&#xff0c;它提供了丰富的…...

毕设计算机科学与技术:新手入门实战指南与避坑清单

最近在帮学弟学妹们看毕业设计&#xff0c;发现很多同学在起步阶段就卡住了。选题天马行空、技术栈眼花缭乱、代码写成一团乱麻……这些都是新手必经的“痛苦面具”。今天&#xff0c;我就结合自己的经验和踩过的坑&#xff0c;梳理一份从零到一的毕设实战指南&#xff0c;希望…...

Python自动化测试AI生成踩坑全记录:12个真实生产事故+对应防御性代码模板,第9个99%人中招

第一章&#xff1a;Python自动化测试AI生成代码的底层原理与风险本质Python自动化测试中AI生成代码的核心机制&#xff0c;依赖于大语言模型对海量开源测试脚本、框架文档&#xff08;如pytest、unittest、Selenium API&#xff09;及缺陷修复模式的学习。模型通过概率化token预…...

APatch故障诊疗指南:从现象到本质的问题解决框架

APatch故障诊疗指南&#xff1a;从现象到本质的问题解决框架 【免费下载链接】APatch Patching, hooking, and rooting the Android using only a stripped kernel image. 项目地址: https://gitcode.com/gh_mirrors/ap/APatch APatch作为一款结合Magisk便捷安装与Kerne…...

从靶场到实战:深度剖析Subrion CMS 4.2.1文件上传漏洞(CVE-2018-19422)的利用与防御

1. Subrion CMS文件上传漏洞初探 Subrion CMS是一款基于PHP的开源内容管理系统&#xff0c;广泛应用于企业网站建设。2018年曝光的CVE-2018-19422漏洞影响Subrion CMS 4.2.1版本&#xff0c;攻击者可以利用该漏洞绕过文件上传限制&#xff0c;在服务器上执行任意代码。这个漏洞…...

如何快速下载B站视频?BilibiliDown跨平台下载工具完整指南

如何快速下载B站视频&#xff1f;BilibiliDown跨平台下载工具完整指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mirro…...

Design Compiler:各种版本的简介(DC Expert、DC Ultra、Design Compiler Graphical与Design Compiler NXT)

相关阅读 Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm1001.2014.3001.5482 Synopsys的Design Compiler系列是业界领先的RTL综合解决方案&#xff0c;包括四个主要产品&#xff1a;DC Expert、DC Ultra、Design Compiler Graphical和De…...

搭建一个stun server

文章目录开始搭建1、下载吧STUNTURN &#xff08;Traversal Using Relays around NAT&#xff09;部署TURN1、安装turnservermediasouplibevent2、 生成密钥文件2、修改配置文件 tunserver.conf3、确认内网和外网ip地址4、需要开放的端口5、启动命令6、 验证是否搭建成功我装的…...