异常检测的学习笔记并非原创,而是搜索各位大佬的帖子整理而得。如有冒犯,请联系我。
1. 概述
统计学⽅法对数据的正常性做出假定。它们假定正常的数据对象由⼀个统计模型产⽣,而不遵守该模型的数据是异常点。
异常检测的统计学⽅法的⼀般思想是:学习⼀个拟合给定数据集的⽣成模型,然后识别该模型低概率区域中的对象,把它们作为异常点。根据如何指定和学习模型,异常检测的统计学⽅法可以划分为两个主要类型:参数⽅法和⾮参数⽅法。
2. 参数⽅法
参数⽅法假定正常的数据对象被⼀个以为参数的参数分布产⽣。该参数分布的概率密度函数给出对象被该分布产⽣的概率,。该值越小, 越可能是异常点。
2.1 基于正态分布的⼀元异常点
仅涉及⼀个属性或变量的数据称为⼀元数据。我们假定数据由正态分布产⽣,然后可以由输⼊数据学习正态分布的参数,并把低概率的点识别为异常点。
假定输⼊数据集为,数据集中的样本 iid 服从正态分布,即。求出参数之后,我们就可以根据概率密度函数计算数据点服从该分布的概率。正态分布的概率密度函数为
如果计算出来的概率低于阈值,就可以认为该数据点为异常点。
2.2 多元异常点检测
涉及两个或多个属性或变量的数据称为多元数据。许多⼀元异常点检测⽅法都可以扩充,⽤来处理多元数据。其核⼼思想是把多元异常点检测任务转换成⼀元异常点检测问题。对于第维:
计算概率时的概率密度函数为:
2.3 多个特征相关,且符合多元⾼斯分布
3. 非参数⽅法
在异常检测的⾮参数⽅法中,“正常数据”的模型从输⼊数据学习,而不是假定⼀个先验。通常,⾮参数⽅法对数据做较少假定,因而在更多情况下都可以使⽤。
例⼦:使⽤直⽅图检测异常点。
4. HBOS
HBOS全名为:Histogram-based Outlier Score。它是⼀种单变量⽅法的组合,不能对特征之间的依赖关系进⾏建模,但是计算速度较快,对⼤数据集友好。其基本假设是数据集的每个维度相互独⽴。然后对每个维度进⾏区间(bin)划分,区间的密度越⾼,异常评分越低。
算法推导过程:https://blog.csdn.net/i_am_huang/article/details/89207102
如何通过Python实践HBOS算法:https://blog.csdn.net/qq_35692819/article/details/112687881
另一个帖子:https://zhuanlan.zhihu.com/p/343748853
5. 总结
异常检测的统计学⽅法由数据学习模型,以区别正常的数据对象和异常点。
HBOS在全局异常检测问题上表现良好,但不能检测局部异常值。但是HBOS⽐标准算法快得多,尤其是在⼤数据集上。