Skip to content

Latest commit

 

History

History
266 lines (186 loc) · 19.9 KB

README.zh-CN.md

File metadata and controls

266 lines (186 loc) · 19.9 KB

Anomaly-Detection

English | 简体中文

维护说明: 本项目正在进行渐进式恢复维护。当前大部分脚本属于历史学习或研究实现,尚不是生产级算法库。原有中文讲解与手写代码将继续保留;后续改动会先补测试,再分阶段处理兼容性、稳定 API、公平基准和新算法。详见 Revival Roadmap。

证据边界: 本文历史图表和对比结果仅对应当时的数据生成方式、参数与实验范围。无真实标签时,与 Isolation Forest 的重合程度只能称为检测器一致性,不能当作准确率或普遍性能证明。


第一部分:无监督异常检测 (Unsupervised Detection)

1. 算法

1.1 Isolation Forest

1.2 基于PCA的异常检测

1.3 马氏距离(Mahalanobis Distance)

  • 算法解析:

  • 算法实现:

  • 实证分析:

    • 结论: 在上述适用条件下,本实现的 PCA 分解形式与 squared Mahalanobis distance 数值等价

    • 推论: 两种实现对样本异常程度给出一致排序;随机数据实验用于核对代码实现,不替代数学推导

    • 验证代码: verify_mahal_equivalence.py

    • 验证结果:

      verify results

1.4 局部异常因子(Local Outlier Factor)


2. 历史对比实验

2.1 对比方案

  • 步骤一: 生成一系列随机数据集,每个数据集的行数(row)、列数(col)、污染率(contamination)均从某区间内随机抽取
  • 步骤二: 各个无监督异常检测算法根据指定的contamination返回异常样本的索引(anomalies_indices)
  • 步骤三: 确定评价参照
    • 如果数据集中异常样本的索引已知(记为 observed_anomaly_indices),则将真实标签作为 ground truth
    • 如果数据集中异常样本的索引未知,则仅将 Isolation Forest 返回的异常样本索引作为参考检测结果,用于比较检测器之间的一致性
  • 步骤四: 确定性能评判标准
    • 若异常样本的索引已知(记为observed_anomaly_indices),则以F1-Score作为评判标准
    • 若异常样本的索引未知,则比较算法预测结果与参考检测结果的共同索引个数;该结果只表示一致程度,不能证明哪个算法更准确
  • 步骤五: 不同数据集可能得到不同结果,因此需要在更多数据、重复随机种子和明确评价协议下核验,不应据少量合成数据形成普适算法排名

2.2 对比代码

2.3 对比结果

  • 以下为 10 个随机合成数据集上的历史实验结果,仅对应当时的数据构造、参数和评价方式:
    • F1 Score

      F1 Score contrast

    • Time Cost

      time cost

2.4 对比分析

1)RobustPCC

  • RobustPCC重点考察了样本在major/minor Principal Component上的偏差,论文作者认为异常样本在主成分空间内的投影主要集中在上述两类主成分上
  • RobustPCC在构建过程中,需要通过马氏距离(变体)检测并剔除数据集中一定比例(gamma)的潜在异常样本,以保证RobustPCC的有效性
  • RobustPCC需要根据指定的分位点参数(quantile)来设定样本异常与否的阈值,个人在实验中适度增大了gamma、quantile的取值,进一步降低FPR,提升鲁棒性
  • 在当前合成实验和参数设置下,RobustPCC 表现较好;这一观察仍需在更广泛数据集和重复实验中验证

2)Recon_Error_PCA/KPCA (Reconstruction Error Based on PCA/KernelPCA)

  • Recon_Error_KPCA引入核函数(对比实验取Linear、RBF),无需显式定义映射函数,通过Kernel Trick计算样本在高维特征空间(希尔伯特空间)内的重构误差;
  • KernelPCA 的核函数和参数需要根据数据结构调整;当映射与数据几何关系匹配时,高维特征空间可能增强正常样本与异常样本的可分性
    • 这一效果依赖 kernel、scaling、数据分布和参数设置,不保证异常样本在所有数据集上都更容易区分;

3)Isolation Forest

  • Isolation Forest(孤立森林)在当时的实验中表现相对稳定;当验证数据的真实异常索引未知时,本文曾将其预测值作为参考,用于比较其他检测器的一致程度,而不是判定真实性能

4)Mahalanobis Distance

  • Mahalanobis Distance(马氏距离)实际上考虑了样本在所有主成分上的偏离度;本文展示的相对排序仅对应当时的实验数据和参数

5)Local Outlier Factor

  • LOF考虑了局部相邻密度,它存在一定的局限性:对于相关性结构较特殊的异常样本(anomalies in terms of different correlation structures)的检测能力不足

备注

  • 上述实验结论受到实验数据集的样本构成、样本数量等多方面因素的影响,不一定具备普适性
  • 在实际运用中,需要根据数据集本身的特点予以灵活选择相应的异常检测算法

第二部分:半监督异常检测 (Semi-Supervised Anomaly Detection)

1. 算法

1.1 算法一:ADOA

1.2 算法二:KADOA(作者提出的实验性方法)

  • 思路简介

    • ADOA采用孤立森林与聚类相结合,KADOA运用KernelPCA重构误差替代孤立森林进行异常检测,其它思路与ADOA一致
    • 当前仓库未记录 KADOA 对应的正式论文、同行评审或独立验证信息
  • KADOA代码

  • KADOA与ADOA的性能对比

    • 对比代码: compare_adoa_kadoa.py
    • 对比结果: 在仓库所附的单次合成数据示例及相同参数设置下,KADOA 在所报告的若干指标上高于 ADOA;这一初步观察尚未经过多数据集重复实验、统计显著性检验、同行评审或独立验证,不能推广为普遍结论
    • 指标提醒: 历史对比脚本中名为 G-Mean 的指标实现仍待复核,本轮仅修正文档结论,不改动算法代码

    adoa_kadoa_contrast

1.3 算法三:PU Learning

1) PU Learning三大处理方法:PU Learning三大处理方法详细解读

  • 方法一:Two step techniques

    • 第一步: 从U集中筛选可靠负样本RN(identifying reliable negative examples)
    • 第二步: 基于已知正样本P、可靠负样本RN训练分类器(learning based on the labeled positives and reliable negatives)

    Two step techniques

  • 方法二:Biased Learning

    • 将U集视为带有噪音(即正样本)的负样本集(treat the unlabeled examples as negatives examples with class label noise)

    • 将正样本P、负样本U分别赋予相对更高、更低的正则化参数,使得混杂在U的noise允许被误分,这些被误分的noise实际上是真实的正样本

    • 常见的算法是Biased SVM,其优化问题如下

      BiasedSVM

  • 方法三:Class Prior Incorporation

    • Class prior incorporation modifies standard learning methods by applying the mathematics from the SCAR(Selected Completely At Random) assumption directly, using the provided class prior. Additionally, methods for learning from relational PU data are discussed

      Class Prior Incorporation

2) 思路详解与代码实现


2. 性能对比

2.1 对比算法

  • 算法一:ADOA
  • 算法二:Biased SVM
  • 算法三:Weighted LR
  • 算法四:PU Learning + Cost-Sensitive Learning

2.2 模型评估指标

2.3 对比方案与代码

  • 对比代码: semi_detection_contrast.py

  • 对比思路:

    • 步骤一: 生成一系列随机数据集,其中包含已观察到的异常样本集(记为正样本集P),无标签样本集(记为U)

    • 步骤二: 各个半监督异常检测算法对U集进行预测并返回预测值y_pred

    • 步骤三: 生成U集时,其真实标签y_true是已知的,根据y_true、y_pred计算半监督异常检测算法的性能

    • 步骤四: 不同的模型评估指标、不同的数据集对算法的性能有不同的评估,因此根据多个随机数据返回多个模型评估指标对应的值,再进行比较

2.4 验证结果

  • 对比结果:

    • 备注:每一列表示以对应列名为模型评估指标时,在相应数据集上表现最优的算法
    • 示例:第1列以AUC作为评估指标,根据10个随机数据集的结果取众数,Biased_SVM的表现是最佳的

    semi_final

  • 解析

    • 本次历史实验观察到:各半监督异常检测算法表现各有侧重,其中 PUL CostSensitive 的 Recall 最高;这与对 FN 设置更高代价的机制一致,但仍需在更多数据与重复实验中验证
  • 备注

    • 上述实验结论受到实验数据集的样本构成、样本数量等多方面因素的影响,不一定具备普适性
    • 在实际运用中,需要根据数据集本身的特点予以灵活选择相应的异常检测算法

引用与许可证

  • 如需在研究或教学中引用本仓库,请使用 CITATION.cff 中的软件引用信息;现阶段未声明 DOI、正式 release 版本或 KADOA 独立论文。
  • 本项目采用 MIT License,版权年份为 2018-2026,版权所有者为 Ma Xiao。