异常检测:算法分类及经典模型概览

在这里插入图片描述

第一部分:异常检测的核心概念

在深入算法细节之前,理解异常检测的“语境”至关重要。

1. 什么是异常检测?

异常检测(Anomaly Detection 或 Outlier Detection)旨在通过数据挖掘技术,识别出数据集中与大多数数据在行为模式上不一致的“异常个体”或“异常事件”。这些异常点通常蕴含着重要的业务信息,如欺诈行为、设备故障或新的商业机会。

2. 异常点的类型

  • 单点异常 (Global Outlier):一个数据点与数据集中所有其他点相比都显得非常孤立。例如,在一群小黄人中,突然出现一个海绵宝宝。
  • 上下文异常 (Contextual Outlier):一个数据点在特定上下文中表现出异常,但在其他情境下可能完全正常。例如,夏季的某一天气温骤降到10℃,在“夏季”这个上下文中即为异常。
  • 集体异常 (Collective Outlier)单个数据点本身不异常,但当一小组数据点集合在一起出现时,则构成了异常。例如,小区里有10户人家在同一天搬家,这个“集体行为”就是异常。

3. 实践中的挑战

  • 标签缺失:绝大多数真实场景的数据没有“异常”标签,导致无法直接使用有监督学习。
  • 噪音混淆:数据中的随机噪音与有价值的异常点很难区分。
  • 定义模糊:异常模式多样且持续演变(如欺诈手段升级),难以给出精确定义。
  • 专家依赖:通常需要“无监督算法初步筛选 + 领域专家反馈验证”的闭环模式来持续优化模型。

第二部分:异常检测算法的分类维度

我们可以从不同角度对算法进行归类,这有助于我们根据具体场景选择最合适的工具。

  • 按监督方式 (Supervision)

    • 有监督:训练数据已明确标注“正常”和“异常”。问题转化为一个(通常是类别不均衡的)分类问题。
    • 无监督:训练数据完全没有标签,算法需要自主发现“与众不同”的数据点。这是最常见、也是挑战最大的场景。
  • 按数据特性 (Data Characteristics)

    • 时序 vs. 非时序:异常的判断是否依赖于时间维度。
    • 单维 vs. 多维:是只检测单个特征的异常值,还是在多特征构成的空间中寻找异常组合。
  • 按检测范围 (Detection Scope)

    • 全局检测:将每个数据点与数据集中的所有其他点进行比较。
    • 局部检测:仅将每个数据点与其“邻居”进行比较,更擅长处理密度不均的数据。
  • 按输出结果 (Output Result)

    • 输出标签:模型直接给出“正常/异常”的判断。
    • 输出分数:模型为每个数据点计算一个“异常分”,分数越高代表异常可能性越大,决策更灵活。

第三部分:主流异常检测模型详解

几乎所有现代算法都源于一些经典的核心思想。下面我们按照模型的内在逻辑,对它们进行归类和详细解析。

1. 基于统计的方法 (Statistical-based Methods)

核心思想:正常数据遵循一个特定的概率分布,而低概率事件被视为异常。

  • IQR (Interquartile Range,四分位距)

    • 适用场景:单维度异常检测。
    • 工作原理:这是一种简单稳健的统计方法。它通过计算数据的上四分位数(Q3)和下四分位数(Q1)的差值(IQR = Q3 - Q1),来定义数据的“中心范围”。任何超出 [Q1 - 1.5*IQR, Q3 + 1.5*IQR] 这个“围栏”的数据点都被视为异常。它不需要假设数据分布,非常实用。
  • 高斯分布模型 (Gaussian Model)

    • 适用场景:单维或多维数据。
    • 工作原理:假设正常数据服从高斯(正态)分布。通过计算数据的均值和标准差,我们可以确定一个置信区间(如均值±3倍标准差)。落在该区间之外的数据点因其出现概率极低,被判定为异常。在多维场景下,则使用“多元高斯分布”模型。

2. 基于邻近度的方法 (Proximity-based Methods)

核心思想:通过衡量数据点之间的“远近”或“疏密”程度来发现异常。这类方法在处理低维数据时非常有效。

  • 子类:基于距离 (Distance-based)

    • KNN (K-Nearest Neighbors):其思想是“物以类聚,离群索居”。对每个点,计算它到其第K个最近邻居的距离。如果这个距离特别大,说明该点处于一个稀疏区域,远离任何种群,因此很可能是异常点。
    • 聚类方法 (Clustering-based):
      • K-Means:先将数据聚成k个簇,然后计算每个点到其所属簇中心的距离。距离中心非常遥远的点,可以被看作不属于任何一个簇的异常点。
      • DBSCAN:这是一个基于密度的聚类算法。它能自动发现高密度区域作为簇。那些无法被归入任何一个高密度簇的点,会被算法直接标记为“噪声(Noise)”,这些噪声点就是我们寻找的异常点。
  • 子类:基于密度 (Density-based)

    • LOF (Local Outlier Factor, 局部异常因子):这是对纯距离方法的重大改进。它认为,异常的判断应该是“相对”的。LOF不仅看一个点到邻居的距离,更关键的是,它会比较这个点的局部密度与其邻居们的局部密度。如果一个点的密度远低于其周围邻居的密度,它就会被赋予一个很高的异常分数,即使它处于一个整体稀疏的区域。
    • HBOS (Histogram-based Outlier Score):这是一种快速的密度估计方法。它为数据的每个维度(特征)单独构建直方图。一个数据点的异常分数由它在各个维度上所落入的直方图“箱子”的高度(即密度)的倒数决定。如果一个点在多个维度上都落在低密度区域,它的总分就会很高。

3. 基于隔离/集成的方法 (Isolation/Ensemble-based Methods)

核心思想:异常点因为“稀少且与众不同”,所以应该比正常点更容易被“孤立”出来。这类方法在处理高维数据时表现卓越。

  • 孤立森林 (Isolation Forest)
    • 工作原理:想象一下用随机的“刀”(超平面)去切割数据空间。异常点由于处于稀疏地带,往往用很少的几刀就能被完美地从群体中分离出来。而正常的、处于数据簇内部的点,则需要很多刀才能被“孤立”。孤立森林通过计算一个点被孤立所需的平均“刀数”(路径长度)来判断其异常程度。路径越短,异常分数越高。

4. 基于降维的方法 (Dimensionality Reduction-based Methods)

核心思想:高维数据的主要模式可以用少数几个关键方向来表示。正常数据能够很好地遵循这些模式,而异常数据则会偏离。

  • PCA (主成分分析)
    • 工作原理:PCA能够找到代表数据变化最主要方向的几个“主成分”。我们将所有数据点投影到这些主成分构成的低维空间,然后再将它们“重建”回原始的高维空间。对于正常点,这个过程中的信息损失很小,重建误差(原始点与重建点之间的距离)也很低。而异常点由于不符合数据的主流模式,在降维时会丢失大量个性信息,导致其重建误差非常大。这个重建误差就可以作为其异常分数。

5. 基于深度学习的方法 (Deep Learning-based Methods)

核心思想:利用神经网络强大的非线性拟合能力,学习正常数据的复杂模式。当模型遇到与该模式不符的数据时,会产生巨大偏差。

  • 自编码器 (Autoencoder)

    • 适用场景:复杂的非时序数据,如图像、用户向量等。
    • 工作原理:这是一种自我监督的神经网络。它由一个编码器(压缩数据)和一个解码器(解压并重建数据)组成。我们只用正常数据来训练它,迫使它学会如何完美地重建正常样本。当一个异常样本(如一张它从未见过的图片)输入时,由于模型没有学过它的模式,解码器将无法很好地重建它,导致巨大的重建误差。这个误差值就是异常分数。
  • RNN/LSTM (循环神经网络)

    • 适用场景:时序相关数据、序列数据。
    • 工作原理:RNN及其变体(如LSTM)擅长捕捉序列中的时间依赖关系。通过在正常的时间序列上进行训练,模型能学习到“下一时刻应该发生什么”。当一个不符合历史规律的事件发生时,模型的预测会与真实值产生巨大差异,这个预测误差就可以用来识别上下文异常或集体异常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/917007.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917007.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

技术干货 | 矢网DTF测量技术:透视线缆、天线与波导内部缺陷的“射频X光”(二)

无线通信、雷达等领域中,射频组件与传输系统的性能至关重要,其内部微小损伤易导致信号问题甚至系统失效。传统测试无法精确定位故障点,排查困难。DTF测量,矢网赋予的“透视眼”!它能穿透“黑箱”,精确定位线…

【[CSP-J 2022] 上升点列】

题目 [CSP-J 2022] 上升点列 题目描述 在一个二维平面内,给定 n 个整数点 (x i ,y i​ ),此外你还可以自由添加 k 个整数点。 你在自由添加 k 个点后,还需要从 nk 个点中选出若干个整数点并组成一个序列,使得序列中任意相邻两点间…

Kong API Gateway的十年进化史

一、技术基因的诞生(2007-2015) 2007年,三位意大利开发者Augusto Marietti、Marco Palladino和Michele Orru在博洛尼亚的一个小车库中创立了Mashape公司。 最初他们开发了一个名为Mashup的API聚合平台,试图通过整合第三方API为开发…

蓝牙设备配对:从机发现主机全过程

在蓝牙 paging 过程中,从设备(Slave)是通过特定的扫描机制和跳频方式来发现主设备发送的 ID 包的,具体过程如下:从设备处于特定扫描模式:从设备需要处于 Page Scan 模式,才能够接收主设备发送的…

聚观早报 | 三星获特斯拉AI芯片订单;小米16首发成安卓最强SOC;iPhone 17 Pro支持8倍光学变焦

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。整理丨肖羽7月29日消息三星获特斯拉AI芯片订单小米16首发成安卓最强SOCiPhone 17 Pro支持8倍光学变焦宁德时代滑板底盘公司启动首轮融…

Gemini Fullstack LangGraph Quickstart(DeepSeek+Tavily版本)

文章目录参考资料说明Gemini Fullstack LangGraph QuickstartDeepSeek Fullstack LangGraph Quickstart项目部署完整源码地址后端部署前端部署参考资料 DeepResearch应用开发实战网盘课件资料 说明 本文仅供学习和交流使用,感谢赋范社区相关老师的辛苦付出&#…

钢筋计数误差↓78%!陌讯多模态融合算法在建筑地产AI质检的落地实践

​摘要​​针对建筑地产行业钢筋验收场景的高误差痛点,本文解析陌讯视觉算法的多模态融合架构如何实现毫米级精度目标检测。实测显示:在Jetson Xavier NX边缘设备上,钢筋计数mAP0.5达​​92.4%​​,较基线模型提升28个百分点&…

负载均衡 LoadBalance

问题引入 我们一个服务可能会进行多机部署,也就说多台服务器组成的集群共同对外提供一致的服务,那么我们的微服务的代码就需要拷贝多份,部署到不同的机器上。 我们使用 IDEA 来开启多个相同的服务 这里以 product-service 为例:…

13. 若依框架中的 Sensitive 敏感字段过滤

若依框架中有Sensitive注解,但代码中并未使用,但该注解的实现还是比较值的学习的。该注解是一个运行时注解该注解只能应用在字段上JacksonAnnotationsInside 表示当使用Jackson序列化时,Jackson会自动识别该注解下的其他Jackson相关注解&…

git本地仓库,工作区和暂存区的知识

一 git工作原理 Git 的工作原理基于分布式版本控制,通过管理文件的不同版本状态,实现代码的追踪、协作和回溯。除了常见的工作区(Working Directory) 和暂存区(Staging Area/Index),核心还包括本…

MPU6050模块

一:MPU6050简介输出一个随姿态变化而变化的电压,想要量化电压,就得使用ADC转化欧拉角偏航角(Yaw):也叫航向角,通常是绕 z 轴旋转的角度,以 x 轴正向为起始边,旋转后 x 轴…

jvm的栈和堆

在 JVM 中,栈(Stack)和堆(Heap)是两种核心内存区域,用于存储不同类型的数据,它们的设计和存储规则有明确区分,主要体现在存储内容、生命周期和管理方式上:一、栈&#xf…

自动驾驶车辆的敏捷安全档案

简介近年来,在开发安全关键软件时,敏捷开发方法的使用日益增多。敏捷方法非常适合自动驾驶汽车软件的增量改进、运行设计域的逐步扩展以及新型智能路侧单元的开发。由于车辆和智能路侧单元的预期改进,未来几年将会有新的自动驾驶车辆试验。因…

【时时三省】(C语言基础)动态内存分配与它的指针变量

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省什么是内存的动态分配全局变量是分配在内存中的静态存储区的,非静态的局部变量(包括形参)是分配在内存中的动态存储区的,这个存储区是一个称为栈…

SpringMVC的核心架构与请求处理流程

Spring MVC 核心架构核心组件组件作用类比DispatcherServlet前端控制器,统一接收请求并协调各组件处理一个餐厅的前台HandlerMapping根据请求URL映射到对应的处理器(Controller)路由表HandlerAdapter执行处理器方法,处理参数绑定、…

css 不错的按钮动画

效果图wxml <view class"{{status?active:}}"><view class"up-top btn"><text>向上</text></view><view class"up-left btn"><text>向左</text></view><view class"up-center b…

若依框架RuoYi-Vue-Plus-5.X的启动,本地安装docker,再部署 Redis、PG数据库(智慧水务)SmartWaterServer

一、部署redis数据库拉取镜像 docker pull redis启动Redis容器docker run -d --name redis-server -p 6379:6379 -v redis-data:/data redis redis-server --requirepass 123redis版本二、部署PostgreSQL 数据库拉取镜像docker pull postgres:15 创建数据存储目录、建议将数据挂…

Idea 清除无用的引用类

在IntelliJ IDEA中&#xff0c;你可以通过以下方式将选中的代码设置为大写&#xff1a;1. 使用快捷键(推荐)Windows/Linux&#xff1a;Ctrl Shift UMac&#xff1a;Cmd Shift U操作步骤&#xff1a;选中文本按下快捷键&#xff0c;即可在大小写之间切换。2. 通过菜单操作选…

同个主机拉取不同权限仓库的方法

背景&#xff1a;因为某些神奇的原因&#xff0c;无法同时授权仓库权限给自己。 1.本地电脑只有权限访问web仓库地址&#xff0c;无权限访问backend仓库&#xff1b; 2.堡垒机服务器只有权限访问backend仓库&#xff0c;无权限访问web仓库地址。 web仓库地址 &#xff1a;codeu…

快速搭建Node.js服务指南

Node.js是构建高效、可扩展网络应用的理想选择。以下是几种快速搭建Node.js服务的方法。 方法一&#xff1a;使用Express&#xff08;最流行框架&#xff09; 1. 初始化项目 mkdir my-node-service cd my-node-service npm init -y2. 安装Express npm install express3. 基础服…