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

【机器学习笔记 Ⅲ】3 异常检测算法

异常检测算法(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.dtcms.com/a/268546.html

相关文章:

  • 4D-VLA:具有跨场景标定的时空视觉-语言-动作预训练
  • Linux运维安全新范式:基于TCPIP与SSH密钥的无密码认证实战
  • 【保姆级图文详解】探秘 Prompt 工程:AI 交互的关键密码
  • C++多线程网络编程:助力高并发服务器性能提升
  • 无人机精准降落辅助系统核心技术解析
  • 一文讲清楚React Fiber
  • RAG 相关概念学习
  • VMware 17.0.2-21581411 安装教程(附详细步骤+序列号激活指南)
  • 【牛客算法】 小红的奇偶抽取
  • kotlin+MongoTemplate的时间类型为is_date类型 pymongo如何处理
  • 【vue】用conda配置nodejs,一键开通模版使用权
  • 设计模式分析
  • 1.1_5_1 计算机网络的性能指标(上)
  • 大模型在肾囊肿诊疗全流程预测及应用研究报告
  • kafka总结
  • 【Java编程动手学】Java常用工具类
  • Apache Cloudberry 亮相 2025 IvorySQL 生态大会暨 PostgreSQL 高峰论坛
  • c# Process.Start异常解决办法
  • 【一起来学AI大模型】支持向量机(SVM):核心算法深度解析
  • 支持向量机(SVM)在心脏MRI分类(心肌病检测)中的应用与实现
  • 最简单的实验室资产管理系统,使用Flask,mysql,html(四、知识补充)
  • C++学习笔记01(自学草稿)
  • 【用 Scapy 实现一个简单的局域网 MAC 地址扫描工具】
  • 20250707-2-第二章:Kubernetes 核心概念-K8s集群架构,生产部署K8s两_笔记
  • 环路滤波:精密ADC时钟系统的相位噪声净化器
  • 源码推送到gitee码云仓库
  • stm32--SPI原理应用W25Q64(二)
  • 国产时序数据库 TDengine:Docker 部署、协议端口及 DBeaver 连接全攻略
  • JVM系列五:字节码与执行引擎深度解析
  • uniapp运行项目到ios基座