维护说明: 本项目正在进行渐进式恢复维护。当前大部分脚本属于历史学习或研究实现,尚不是生产级算法库。原有中文讲解与手写代码将继续保留;后续改动会先补测试,再分阶段处理兼容性、稳定 API、公平基准和新算法。详见 Revival Roadmap。
证据边界: 本文历史图表和对比结果仅对应当时的数据生成方式、参数与实验范围。无真实标签时,与 Isolation Forest 的重合程度只能称为检测器一致性,不能当作准确率或普遍性能证明。
- Author: MaXiao
- E-Mail: maxiaoscut@aliyun.com
- 备注: 若文档无法正常显示图片,请参考右方链接: github图片不显示的问题
- 算法论文: Isolation Forest [Liu et.al, 2008]
- 算法解析: Isolation Forest算法解析
- 算法应用: isolationforest.py
-
方法1:基于样本的重构误差
-
算法论文: AI^2 : Training a big data machine to defend [Veeramachaneni et.al, 2016]
-
算法解析: Chapter 1:基于样本的重构误差
-
算法实现
- 基于KernelPCA重构误差的异常检测: recon_error_kpca.py
- 基于LinearPCA重构误差的异常检测: recon_error_pca.py
- 只调用Numpy实现LinearPCA异常检测: recon_error_pca_svd.py
- 不调用scikit-learn,只调用Numpy,通过矩阵的奇异值分解(SVD)实现PCA,再进行异常检测
- 返回结果与recon_error_pca.py完全一致
-
-
方法2:基于样本在Major/Minor主成分上的偏差
-
算法论文: A Novel Anomaly Detection Scheme Based on Principal Component [Shyu et.al, 2003]
-
算法实现: robustpcc.py
-
术语定义
- major_eigen_vectors:将特征值降序排列后,累计之和占比约50%的前若干个特征值对应的特征向量
- refers to the eigenvectors corresponding to the first few eigenvalues whose cumulative eigenvalues account for about 50% after the eigenvalues are arranged in descending order
- minor_eigen_vectors:特征值小于0.2对应的特征向量
- refers to the eigenvectors corresponding to the eigenvalue less than 0.2
- major_eigen_vectors:将特征值降序排列后,累计之和占比约50%的前若干个特征值对应的特征向量
-
-
实证分析: 异常样本在最前、最后的若干主成分上具有最大的方差
-
验证代码: max_ev_decrease.py
-
验证结果:
- 在本仓库当时生成的多个随机数据集上,异常样本经常在最前和最后的若干主成分上呈现较大方差;这是历史实验观察,不是对所有数据集都成立的普遍证明。
-
算法解析:
- Mahalanobis Distance
- Mahalanobis Distance's Variant
- 在协方差矩阵可逆且数值分解稳定的条件下,本实现中的 PCA 分解形式计算 squared Mahalanobis distance。
-
算法实现:
- 马氏距离的初始定义实现: mahal_dist.py
- 马氏距离的变体实现: mahal_dist_variant.py
-
实证分析:
-
结论: 在上述适用条件下,本实现的 PCA 分解形式与 squared Mahalanobis distance 数值等价
-
推论: 两种实现对样本异常程度给出一致排序;随机数据实验用于核对代码实现,不替代数学推导
-
验证结果:
-
- 算法论文: LOF:Identifying Density-Based Local Outliers
- 算法解析: Local Outlier Factor算法解析
- 算法应用: lof.py
- 步骤一: 生成一系列随机数据集,每个数据集的行数(row)、列数(col)、污染率(contamination)均从某区间内随机抽取
- 步骤二: 各个无监督异常检测算法根据指定的contamination返回异常样本的索引(anomalies_indices)
- 步骤三: 确定评价参照
- 如果数据集中异常样本的索引已知(记为 observed_anomaly_indices),则将真实标签作为 ground truth
- 如果数据集中异常样本的索引未知,则仅将 Isolation Forest 返回的异常样本索引作为参考检测结果,用于比较检测器之间的一致性
- 步骤四: 确定性能评判标准
- 若异常样本的索引已知(记为observed_anomaly_indices),则以F1-Score作为评判标准
- 若异常样本的索引未知,则比较算法预测结果与参考检测结果的共同索引个数;该结果只表示一致程度,不能证明哪个算法更准确
- 步骤五: 不同数据集可能得到不同结果,因此需要在更多数据、重复随机种子和明确评价协议下核验,不应据少量合成数据形成普适算法排名
- Python代码: unsupervised_detection_contrast.py (Jupyter交互式运行代码能更直观地展示验证过程)
- RobustPCC重点考察了样本在major/minor Principal Component上的偏差,论文作者认为异常样本在主成分空间内的投影主要集中在上述两类主成分上
- RobustPCC在构建过程中,需要通过马氏距离(变体)检测并剔除数据集中一定比例(gamma)的潜在异常样本,以保证RobustPCC的有效性
- RobustPCC需要根据指定的分位点参数(quantile)来设定样本异常与否的阈值,个人在实验中适度增大了gamma、quantile的取值,进一步降低FPR,提升鲁棒性
- 在当前合成实验和参数设置下,RobustPCC 表现较好;这一观察仍需在更广泛数据集和重复实验中验证
- Recon_Error_KPCA引入核函数(对比实验取Linear、RBF),无需显式定义映射函数,通过Kernel Trick计算样本在高维特征空间(希尔伯特空间)内的重构误差;
- KernelPCA 的核函数和参数需要根据数据结构调整;当映射与数据几何关系匹配时,高维特征空间可能增强正常样本与异常样本的可分性
- 这一效果依赖 kernel、scaling、数据分布和参数设置,不保证异常样本在所有数据集上都更容易区分;
- Isolation Forest(孤立森林)在当时的实验中表现相对稳定;当验证数据的真实异常索引未知时,本文曾将其预测值作为参考,用于比较其他检测器的一致程度,而不是判定真实性能
- Mahalanobis Distance(马氏距离)实际上考虑了样本在所有主成分上的偏离度;本文展示的相对排序仅对应当时的实验数据和参数
- LOF考虑了局部相邻密度,它存在一定的局限性:对于相关性结构较特殊的异常样本(anomalies in terms of different correlation structures)的检测能力不足
- 上述实验结论受到实验数据集的样本构成、样本数量等多方面因素的影响,不一定具备普适性
- 在实际运用中,需要根据数据集本身的特点予以灵活选择相应的异常检测算法
-
算法论文: Anomaly Detection with Partially Observed Anomalies [Zhang et.al]
-
算法解读: ADOA算法解读
-
算法实现: adoa.py 【其中包含:用于返回聚类中心子模块 cluster_centers.py】
-
思路简介
- ADOA采用孤立森林与聚类相结合,KADOA运用KernelPCA重构误差替代孤立森林进行异常检测,其它思路与ADOA一致
- 当前仓库未记录 KADOA 对应的正式论文、同行评审或独立验证信息
-
KADOA代码
-
KADOA与ADOA的性能对比
- 对比代码: compare_adoa_kadoa.py
- 对比结果: 在仓库所附的单次合成数据示例及相同参数设置下,KADOA 在所报告的若干指标上高于 ADOA;这一初步观察尚未经过多数据集重复实验、统计显著性检验、同行评审或独立验证,不能推广为普遍结论
- 指标提醒: 历史对比脚本中名为
G-Mean的指标实现仍待复核,本轮仅修正文档结论,不改动算法代码
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)
-
方法二:Biased Learning
-
方法三:Class Prior Incorporation
-
思路一:Two Step Strategy + Cost-Sensitive Learning
-
算法论文: POSTER_ A PU Learning based System for Potential Malicious URL Detection [Zhang et.al]
-
算法解读: Two Step Strategy与 Cost-Sensitive Learning的结合
- Two Step Strategy: Two Step Strategy详解
- Cost-Sensitive Learning: Cost-Sensitive Learning详解
-
算法实现: pu_learning.py
-
对sample_ratio的研究: sample_ratio
-
-
思路二:Biased Learning
-
思路三:Class Prior Incorporation
- 算法一:ADOA
- 算法二:Biased SVM
- 算法三:Weighted LR
- 算法四:PU Learning + Cost-Sensitive Learning
-
历史脚本使用的模型评估指标: ROC-AUC、F1 score、weighted coverage、G-Mean(实现待复核)、recall、accuracy
-
Coverage详解
-
代码实现: coverage.py
-
G-Mean
-
对比思路:
-
步骤一: 生成一系列随机数据集,其中包含已观察到的异常样本集(记为正样本集P),无标签样本集(记为U)
-
步骤二: 各个半监督异常检测算法对U集进行预测并返回预测值y_pred
-
步骤三: 生成U集时,其真实标签y_true是已知的,根据y_true、y_pred计算半监督异常检测算法的性能
-
步骤四: 不同的模型评估指标、不同的数据集对算法的性能有不同的评估,因此根据多个随机数据返回多个模型评估指标对应的值,再进行比较
-
-
对比结果:
- 备注:每一列表示以对应列名为模型评估指标时,在相应数据集上表现最优的算法
- 示例:第1列以AUC作为评估指标,根据10个随机数据集的结果取众数,Biased_SVM的表现是最佳的
-
解析
- 本次历史实验观察到:各半监督异常检测算法表现各有侧重,其中 PUL CostSensitive 的 Recall 最高;这与对 FN 设置更高代价的机制一致,但仍需在更多数据与重复实验中验证
-
备注
- 上述实验结论受到实验数据集的样本构成、样本数量等多方面因素的影响,不一定具备普适性
- 在实际运用中,需要根据数据集本身的特点予以灵活选择相应的异常检测算法
- 如需在研究或教学中引用本仓库,请使用
CITATION.cff中的软件引用信息;现阶段未声明 DOI、正式 release 版本或 KADOA 独立论文。 - 本项目采用 MIT License,版权年份为 2018-2026,版权所有者为 Ma Xiao。











