离群点检测Outlier Detection
“离群点检测的核心在于其训练集已包含异常值。在Sklearn中,EllipticEnvelope常用于高斯分布数据集的离群值检验。算法对比表明:高斯分布场景下协方差估计效果优于One-Class SVM,而非高斯分布场景下后者表现更佳。目前离群检测多依赖统计模型,除One-Class SVM适用性较广外,其余算法场景较为局限。”
异常检测:离群点检测(Outlier Detection)
在《[新奇检测 Novelty Detection]》中,我们已经介绍了关于异常检测的基本理论、方法和基于 Python 算法 One-Class SVM 实现其中新奇检测的基本逻辑。本篇将介绍异常检测的另外一个核心主题——离群点检测。
一、 离群点检测与新奇检测的区别
离群点检测是异常值检测的一种,其核心思路与新奇检测一致。二者最根本的区别在于:离群点检测的原始观测数据集中已经包含异常值,而新奇检测的训练集中则不包括异常值。
二、 基于 Sklearn 的 EllipticEnvelope 实现
以下是利用 Python 中 Sklearn 机器学习库的 EllipticEnvelope 实现对离群点检测的示例。
EllipticEnvelope 是 Sklearn 协方差估计中专门针对高斯分布数据集的离群值检验方法。需要注意的是,该方法在高维度下的表现效果欠佳。
1. 代码实现
python
以下为代码的输出结果:
code
2. 可配置参数
在该函数中,核心的可配置参数如下:
python
三、 算法效果对比:协方差估计 vs One-Class SVM
对比 Python 的这两种异常值检测方法,其适用场景有着明显的差异:
- 高斯分布场景:当数据集符合高斯分布时,基于鲁棒协方差估计的
EmpiricalCovariance效果要优于OneClassSVM算法。 - 非高斯分布场景:在非高斯分布情况下(例如数据集中包含两个核心),
OneClassSVM的应用效果则要好于EmpiricalCovariance。
不同数据集分布状态下的应用效果
以下是在三种不同数据集的分布状态下,二者的应用效果对比:
-
在高斯分布下,
EmpiricalCovariance效果好于OneClassSVM。
plot_outlier_detection_0011111 -
在非高斯分布下,
OneClassSVM效果好于EmpiricalCovariance。
plot_outlier_detection_0021111 -
在非高斯分布下,
OneClassSVM效果好于EmpiricalCovariance。
plot_outlier_detection_0031111
四、 Sklearn 中的其他协方差估计算法
除了上述算法外,Python 的 Sklearn 机器学习库还提供了以下两种协方差估计算法:
- EmpiricalCovariance:基于最大似然协方差估计的算法。
- MinCovDet:基于最小协方差行列式(Minimum Covariance Determinant,简称 MCD)的算法,属于鲁棒协方差估计。
五、 总结
整体来看,离群值检测的方法目前还主要集中在基于统计模型的监测上,这种算法的应用局限性在文章《[新奇检测 Novelty Detection]》中已经提到。
Python 的 Sklearn 中对于异常检测的算法支持还不够丰富,除了
OneClassSVM的使用场景相对广泛之外,其余算法的应用性都比较局限。