经典的异常值检测方法
根据异常值的研究角度和方向,异常值检测方法大体可分为基于统计的方法、基于距离的方法、基于偏离的方法和基于密度的方法。
1. 经典异常值检测方法分析
1.1.基于统计的检测方法
从 20 世纪 80 年代起,异常值检测问题开始在统计学领域得到广泛研究,基于统计的检测方法是最古老的异常值检测方法,早期的异常值检测大多采用这类方法,其思想来源于统计学方法,即预先假定研究的数据集符合一个标准分布或概率模型(如正态分布、泊松分布等),然后根据此分布模型使用不一致性检测来检测异常值,使用这类方法需要事先知道数据集的分布情况、分布参数(如均值和方差)等相关知识以及预期的异常值个数[40]。 基于统计的检测方法的主要缺点有:绝大多数算法都是针对单个属性(低维)的,而实际中研究的数据对象许多都是多维的;另外,这类方法还需要知道数据集参数的相关知识,如分布模型、参数和预期的异常值个数等,但是多数情况下,现实数据往往并不符合任何一种理想的数学分布且即使符合而数据分布也往往是未知的;并且,当没有特定的检测方法或数据集不符合任何标准分布时,这类方法不能确保发现所有的异常值。
1.2.基于偏离的检测方法
基于偏离的方法,是通过一组数据对象的主要特征来判定异常值的。如果某个数据对象与给定的描述发生严重的“偏离”,则判定该对象为异常值。基于偏离的异常值检测方法主要有以下两种技术:
(1)序列异常技术
序列异常技术,即按顺序依次比较数据集中的对象数据。该方法的主要思想是,对于一个给定的数据集,根据规定的序列关系求得该集合中任意子集合的相异度,并以此作为判定异常值的标准。该算法的复杂度与数据集的大小呈线性关系,有较好的计算性能,但是对异常存在的假设过于理想化,对现实复杂数据的检测效果并不太好。
(2)数据立方体技术
数据立方体技术,这种方法是针对多维数据的异常值检测而出现的,其基本思想是依据用户输入数据的顺序,在数据集的层次上使用发现探索的方式来计算每单元各层次的相异度,如果某个单元值明显不同于利用统计模型得到的期望值,那么此单元值即被判定为异常值。该方法还考虑了隐藏在立方体集合分组后面的异常情况,对于这种异常,由于搜索空间较大,人工检测是极其困难的。
1.3.基于距离的检测方法
基于距离的异常值检测方法主要思想是利用某个距离函数计算数据对象相互之间的距离,那些与其它数据对象之间有更远距离的数据对象即为异常值,也就是说,我们可以将基于距离的异常值看成是那些没有足够多相邻点的数据对象,这里的相邻点是依据与给定对象的距离来定义的。
与基于统计的方法相比,基于距离的异常值检测拓展了多个标准分布的不一致性检测的思想,避免了过多的计算,不需要用户具有相关领域的背景知识,且概念上比较直观,更接近于Hawkins 的异常值本质定义,可以在未知数据分布情况下对多维数据集进行异常值检测。目前,常用的基于距离的异常值检测算法有基于索引的算法、嵌套—循环的算法和基于单元的算法三种:
(1)基于索引的算法
![d268d6908bc1444cd5ea86fac94415e3.png](https://i-blog.csdnimg.cn/blog_migrate/4612ce0cc16e9243386c372dc33371ea.jpeg)
(2)嵌套-循环算法
嵌套—循环算法:与基于索引的算法相比,该算法具有相同的时间复杂度O(kN2),但它不需要构造索引结构,试图最小化输入/输出次数,它把内存的缓冲空间划分为两部分,把数据集划分为一定数目的逻辑块,通过精心选择每个逻辑块装入缓冲区的顺序,实现输入/输出效率的改善。
(3)基于单元的算法
与上述两种算法相比,该算法的具有较小的计算复杂度,为 O(ck+N) ,其中 c 为取决于单元数的常数,k 为数据集的维数,N 为数据集中对象的个数。该算法适用于大规模数据集的异常值检测,但当数据集的维数增加时,它的可扩展性较差。
基于距离的方法主要存在三个不足之处:
(1) 基于索引的算法和嵌套-循环算法的时间复杂度都为 O(kN2),与数据集维数 k 是线性关系,与数据集中的对象个数 N 呈平方关系,现实中的数据集规模往往比较大,使得这两个算法的使用受到限制。
(2) DB(p, d)算法的检测结果对参数p和d具有较强敏感性,不同的p、d参数值往往导致差异比较大的结果,而参数 p、d 需要用户设置,为寻找合适的参数一般会涉及多次的尝试和错误。
(3) 基于距离的异常值检测方法将异常值看作是二元属性,对检测出的每个异常值不能给出异常的程度。
1.4.基于密度的检测方法
上述异常值检测算法对整个数据集都带有一种“全局”的观念,因此检测出的异常值也是“全局”异常值。然而,当数据集的密度不均匀时,这些检测算法往往会漏掉一部分异常值。现实中,多维数据集的数据结构通常都很复杂,往往有一些数据对象对于其相邻点来说可能是异常值,但在整个数据集中却不是异常值,任何一个“全局”异常值检测算法都不能检测出这些异常值。
基于密度的检测方法认为数据对象是否为异常值不仅仅取决于它与周围相邻点的距离远近,而且还跟其周围相邻点的稀疏程度密切相关,与以往大多数方法认为异常值仅是“非此即彼”的二元属性不同,认为数据对象不能简单地被划分为异常值和正常值,而是给每个对象赋予了一个局部异常因子 LOF 来表示其异常程度,然后根据实际研究要求选取前 n 个 LOF 最大的对象判定为异常值。基于密度的异常值检测方法可以有效检测出其它“全局”检测算法容易遗漏的这部分异常值,下面通过图1 中一个二维数据集为例来进行说明。
![cec3db01b80aa52556ed83052e9beec0.png](https://i-blog.csdnimg.cn/blog_migrate/1485bd8e946b1923501b6487d26faddd.png)
图1 一个二维数据集局部异常值的实例
很明显图中 C2簇中的对象个数比 C1簇中的多,而 C1簇的密度比 C2簇的密度大,对于 C2中的某一对象 o,它的最近邻距离比 p1与 C1中的最近邻的距离要大,因此采用基于距离的异常值检测算法不会把 p1判定为异常值,而只能检测出 p2为异常值,而基于密度的检测算法可以同时准确判定 p1与 p2都为异常值。
基于密度的异常值检测算法的有关定义:
![3cf87073cdb7007f556566d3f96af970.png](https://i-blog.csdnimg.cn/blog_migrate/6875574fbc3623048c1e7918a2964aae.png)
![0b47da23555def6cccec70439a985607.png](https://i-blog.csdnimg.cn/blog_migrate/482726ab86bee95e1ae2fa09f49d6a4e.png)
![2584eeef12ed83c28866e5852e670391.png](https://i-blog.csdnimg.cn/blog_migrate/c1e9efca34ac9cd788aafef03d0f5f48.png)
(1)
定义4:对象p的局部可达密度(Local Reachable Distance)对象p的局部可达密度为对象 p 与其k-邻域对象的可达距离平均值的倒数:
![b61099e858ed8bcf4bf8d9bdc511b30b.png](https://i-blog.csdnimg.cn/blog_migrate/58304f546db6b780613914718d26fd46.png)
(2)
其中 KNN( p) 为对象 p 的 k-距离邻域中的对象个数。
定义 5:对象 p 的局部异常因子(LOF)
![0f01340f85ff8e2f8aca0ed14687c49f.png](https://i-blog.csdnimg.cn/blog_migrate/216f5e2dd96ac5d184efb2cad6812c35.png)
(3)
局部异常因子的性质:
(1) p的LOF 表示p的异常程度,LOF越大,则p的异常程度越大,其相对其他对象为异常值的可能性就越大;反之,则可能性越小。
(2) 簇内大部分对象的LOF都接近于1,这些对象不应该被判定为局部异常值,而位于簇的边缘或外面的对象的LOF一般相对较大,为局部异常值,如图1中的 p1与 p2。
2. 经典异常值检测方法对比
上述四种经典异常值检测算法对比如表 1 所示:
表1经典检测方法对比
Tab.1 Comparison of the classical detection methods
![f0540de4da3785ca95b051b1d5839c5a.png](https://i-blog.csdnimg.cn/blog_migrate/a6ce431cc29ddcd260fb565d7cea3309.jpeg)
其中,尽管基于距离的异常值检测算法也存在一定的不足之处,但因较好的检测准确率、良好的可扩展性等优点受到了国内外学者的广泛关注与深入研究,本文的研究正是基于这种检测算法的。
《来源于科技文献,经本人分析整理,以技术会友,广交天下朋友》