异常检测算法(Anomaly Detection)详解

异常检测是识别数据中显著偏离正常模式的样本(离群点)的技术,广泛应用于欺诈检测、故障诊断、网络安全等领域。以下是系统化的解析:


1. 异常类型
类型描述示例
点异常单个样本明显异常信用卡交易中的天价消费
上下文异常在特定上下文中异常(如时间序列)夏季气温突降至零下
集体异常一组相关样本联合表现为异常网络流量中突然的DDOS攻击流量

2. 常用算法
(1) 基于统计的方法
  • Z-Score(标准差法)

    • 计算样本与均值的标准差距离,超出阈值(如3σ)判为异常。
    • 公式:
      [
      z = \frac{x - \mu}{\sigma}
      ]
    • 代码实现
      from scipy import stats
      z_scores = stats.zscore(data)
      anomalies = np.where(np.abs(z_scores) > 3)
      
  • IQR(四分位距法)

    • 定义异常值为低于Q1-1.5×IQR或高于Q3+1.5×IQR。
    • 代码实现
      Q1, Q3 = np.percentile(data, [25, 75])
      IQR = Q3 - Q1
      lower_bound = Q1 - 1.5 * IQR
      upper_bound = Q3 + 1.5 * IQR
      anomalies = data[(data < lower_bound) | (data > upper_bound)]
      
(2) 基于距离的方法
  • KNN(K近邻)
    • 计算每个样本到最近K个邻居的平均距离,距离过大则为异常。
    • 代码实现
      from sklearn.neighbors import NearestNeighbors
      knn = NearestNeighbors(n_neighbors=5)
      knn.fit(X)
      distances, _ = knn.kneighbors(X)
      anomaly_scores = distances.mean(axis=1)
      
(3) 基于密度的方法
  • LOF(局部离群因子)
    • 比较样本的局部密度与邻居的密度,密度显著偏低则为异常。
    • 代码实现
      from sklearn.neighbors import LocalOutlierFactor
      lof = LocalOutlierFactor(n_neighbors=20, contamination=0.01)
      anomalies = lof.fit_predict(X)  # 返回-1表示异常
      
(4) 基于聚类的方法
  • DBSCAN
    • 将不属于任何簇的样本(噪声点)标记为异常。
    • 代码实现
      from sklearn.cluster import DBSCAN
      dbscan = DBSCAN(eps=0.5, min_samples=5)
      labels = dbscan.fit_predict(X)
      anomalies = X[labels == -1]  # 噪声点即异常
      
(5) 基于树的方法
  • Isolation Forest(孤立森林)
    • 异常点因特征值特殊,容易被随机树快速隔离。
    • 代码实现
      from sklearn.ensemble import IsolationForest
      iso_forest = IsolationForest(contamination=0.01)
      anomalies = iso_forest.fit_predict(X)  # 返回-1表示异常
      
(6) 基于深度学习的方法
  • 自编码器(Autoencoder)
    • 正常数据重建误差低,异常数据误差高。
    • 代码实现
      from tensorflow.keras import layers, Model
      # 构建自编码器
      encoder = layers.Dense(32, activation='relu')(input_layer)
      decoder = layers.Dense(64, activation='sigmoid')(encoder)
      autoencoder = Model(input_layer, decoder)
      autoencoder.compile(optimizer='adam', loss='mse')
      # 训练后计算重建误差
      reconstructions = autoencoder.predict(X)
      mse = np.mean(np.square(X - reconstructions), axis=1)
      anomalies = mse > threshold
      

3. 算法选择指南
场景推荐算法理由
单维数据,分布已知Z-Score / IQR计算简单高效
高维数据,无标签Isolation Forest / LOF无需假设数据分布
时间序列异常LSTM-Autoencoder捕捉时序依赖关系
图像异常检测Variational Autoencoder (VAE)学习潜在特征空间

4. 评估指标
  • 有标签时
    • 精确率(Precision)、召回率(Recall)、F1-Score。
    • AUC-ROC(异常检测常偏重召回率)。
  • 无标签时
    • 人工验证(如Top-N异常样本是否合理)。
    • 聚类指标(如轮廓系数)间接评估。

5. 关键挑战
  • 样本不平衡:异常样本极少(如0.1%),需使用过采样或调整损失函数。
  • 动态环境:正常模式随时间变化(需在线学习或滑动窗口)。
  • 解释性:需提供异常原因(如SHAP值解释)。

6. 应用案例
  • 金融:信用卡欺诈交易识别。
  • 工业:生产线设备故障预警。
  • 医疗:心电图异常心跳检测。
  • 网络安全:入侵行为检测。

7. 总结
  • 核心目标:区分正常模式与异常,而非精确预测。
  • 算法选择:取决于数据维度、分布和异常类型。
  • 落地要点
    1. 结合领域知识定义“异常”。
    2. 处理样本不平衡(如加权损失或过采样)。
    3. 模型需持续监控和更新(概念漂移问题)。

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

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

相关文章

【ssh】在 Windows 上生成 SSH 公钥并实现免密登录 Linux

在 Windows 上生成 SSH 公钥并实现免密登录 Linux&#xff0c;可以使用 ssh-keygen 命令&#xff0c;这是 Windows 10 和 Windows 11 中默认包含的 OpenSSH 工具的一部分。下面是详细步骤&#xff1a; 在 Windows 上生成 SSH 公钥 打开 PowerShell 或命令提示符&#xff1a; 在…

MS51224 一款 16 位、3MSPS、双通道、同步采样模数转换器(ADC)

MS51224 是一款 16 位、3MSPS、双通道、同步采样模数转换器&#xff08;ADC&#xff09;&#xff0c;具有集成的内部参考和参考电压缓冲器。芯片可由 5V 单电源供电&#xff0c;支持单极性和全差分模拟信号输入&#xff0c;具有出色的直流和交流性能。芯片模拟输入信号频率高达…

WPF学习(四)

文章目录一、用户控价1.1 依赖属性的注册1.2 具体使用一、用户控价 1.1 依赖属性的注册 using System.Windows; using System.Windows.Controls;namespace WpfApp {public partial class MyUserControl : UserControl{// 依赖属性&#xff1a;外部可绑定的文本public static …

vue3+typescript项目配置路径别名@

1. vite.config.ts配置//方法1 import { defineConfig } from vite; import vue from vitejs/plugin-vue; import path from path;export default defineConfig({plugins: [vue()],resolve: {alias: {: path.resolve(__dirname, src)}} });//方法2,需要执行npm install -D type…

MySql 常用SQL语句、 SQL优化

✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨SQL语句主要分为哪几类 SQL&#xff08;结构化查询语言&#xff09;是用于管理和操作关系型数据库的标准语言&#xff0c;其语句通常根据功能划分为以下几大类&#xff0c;每类包含不同的子句和命令&#xff0c;用于实现特定的数据库操作需求&am…

代理模式实战指南:打造高性能RPC调用与智能图片加载系统

代理模式实战指南&#xff1a;打造高性能RPC调用与智能图片加载系统 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 总有一行代码&#xff0c;能点亮万千星辰。 &#x1f50d; 在技术的宇宙中&#xff0c;我愿做永不停歇的探索者。 ✨ 用代码丈量…

登山第二十六梯:单目3D检测一切——一只眼看世界

文章目录 一 摘要 二 资源 三 内容 一 摘要 尽管深度学习在近距离 3D 对象检测方面取得了成功&#xff0c;但现有方法难以实现对新对象和相机配置的零镜头泛化。我们介绍了 DetAny3D&#xff0c;这是一种可提示的 3D 检测基础模型&#xff0c;能够在任意相机配置下仅使用单目…

ROS2简记一:第一个ros2程序,海龟模拟与C++和python的《你好,世界!》

目录 引言 一、控制小海龟 二、键盘控制海龟 三、控制海龟案例的简单分析 四、ROS2之linux基础 4.1 linux终端命令 4.1.1 查看当前终端所在目录 pwd 4.1.2 切换终端所在目录 cd 4.1.3 查看当前目录下的文件 ls 4.1.4 主目录 ~ 4.1.5 文件的操作 4.1.6 命令使用帮助…

监控的基本理论和prometheus安装

监控的基本理论和prometheus安装 前言 这篇博客主要讲的是关于理论的知识&#xff0c;大家尽可能的消化和吸收&#xff0c;也能扩展大家的知识面 监控的基本概念 监控俗称为运维的第三只眼。没有了监控&#xff0c;业务运维都是“瞎子”。所以说监控室运维这个职业的根本&…

互联网生态下赢家群体的崛起与“开源AI智能名片链动2+1模式S2B2C商城小程序“的赋能效应

摘要&#xff1a;本文聚焦未来互联网赢家群体的构成特征&#xff0c;剖析网红经济与专业主播的差异化发展路径&#xff0c;结合开源AI智能名片链动21模式与S2B2C商城小程序的融合创新&#xff0c;提出技术赋能下互联网商业生态的重构路径。研究表明&#xff0c;开源AI技术通过智…

OneCode 图表组件核心优势解析

一、全方位的可视化能力 OneCode 图表组件提供了15种专业图表类型&#xff0c;覆盖从基础到高级的数据可视化需求&#xff1a; 基础图表&#xff1a;柱状图、折线图、饼图、面积图等高级图表&#xff1a;金字塔图、雷达图、仪表盘、LED图表等实时图表&#xff1a;实时折线图、实…

【Linux】RHCE中ansible的配置

1.安装并配置ansible 第一步先安装ansible所需软件 #安装ansible所需软件 [devopsworkstation ~]$ sudo dnf install ansible ansible-navigator rhel-system-roles -y 第二步登录镜像仓库&#xff0c;在镜像仓库下载镜像容器来运行ansible 由于ansible-navigator 知ansible…

ubuntu server系统 安装宝塔

更新系统软件包sudo apt update && sudo apt upgrade -y提示&#xff0c;如果想博主这样是存绿色liunx系统&#xff0c;要先安装python3脚本才可以python3 --version有pyhton版本号就是安装了&#xff0c;没有的话就要安装安装 Pythonsudo apt update sudo apt install…

用C++实现五子棋游戏

#include <iostream> #include <vector> #include <string> #include <iomanip> // 用于控制输出格式 #include <limits> // 用于numeric_limitsusing namespace std;// 游戏常量定义 const int BOARD_SIZE 15; // 定义棋盘大小为15x15// 棋…

【LeetCode 热题 100】73. 矩阵置零——(解法一)空间复杂度 O(M + N)

Problem: 73. 矩阵置零 题目&#xff1a;给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 文章目录整体思路完整代码时空复杂度时间复杂度&#xff1a;O(M * N)空间复杂度&#xff1a;O(M N)整体思路…

【深度学习新浪潮】国内零样本抗体设计的科研进展如何?

什么是AI零样本抗体设计? AI零样本抗体设计(Zero-shot AI Antibody Design)是指不依赖任何已知抗体序列或结构数据,仅根据靶点抗原信息,通过人工智能直接生成具有高亲和力、高特异性的全新抗体序列的技术。其核心在于突破传统抗体研发的“数据依赖瓶颈”,实现真正的“从…

【论文阅读】A Diffusion model for POI recommendation

论文出处&#xff1a;ACM Transactions on Information Systems (TOIS) SCI一区 CCF-A期刊 论文地址&#xff1a;[2304.07041] A Diffusion model for POI recommendation 论文代码&#xff1a;Yifang-Qin/Diff-POI: The official PyTorch implementation of Diff-POI. 目…

Rust实现FasterR-CNN目标检测全流程

使用 Rust 和 FasterR-CNN 进行目标检测 FasterR-CNN 是目标检测领域广泛使用的深度学习模型。Rust 生态中可以通过 tch-rs(Torch 绑定)调用预训练的 PyTorch 模型实现。以下为完整实现步骤: 环境准备 安装 Rust 和必要的依赖: cargo add tch cargo add anyhow # 错误…

Github 2025-07-03Go开源项目日报Top10

根据Github Trendings的统计,今日(2025-07-03统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10JavaScript项目2Go编程语言:构建简单、可靠和高效的软件 创建周期:3474 天开发语言:Go协议类型:BSD 3-Clause “New” or “Revise…

XML Schema 安装使用教程

一、XML Schema 简介 XML Schema&#xff08;XSD&#xff0c;全称 XML Schema Definition&#xff09;是用于定义 XML 文档结构、数据类型和数据约束的标准方式。它比 DTD 更加强大&#xff0c;支持数据类型、默认值、命名空间等&#xff0c;是企业级 XML 应用推荐的验证方式。…