异常点检测算法分析与选择

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

总的思路是先尽量得到一个不含离群点的“干净集”,然后在此基础上对剩余的其他数据点进行逐步离群检测[29 ]。

目前利用统计学研究异常点数据有了一些新的方法,如通过分析统计数据的散度情况,即数据变异指标,来对数据的总体特征有更进一步的了解,对数据的分布情况有所了解,进而通过数据变异指标来发现数据中的异常点数据。常用的数据变异指标有极差、四分位数间距、均差、标准差、变异系数等等,变异指标的值大表示变异大、散布广;值小表示离差小,较密集。

基于统计的方法检测出来的离群点很可能被不同的分布模型检测出来,可以说产生这些离群点的机制可能不唯一,解释离群点的意义时经常发生多义性,这是基于统计方法的一个缺陷。其次,基于统计的方法在很大程度上依赖于待挖掘的数据集是否满足某种概率分布模型,模型的参数、离群点的数目等对基于统计的方法都有非常重要的意义,而确定这些参数通常都比较困难。为克服这一问题,一些人提出对数据集进行分布拟合,但分布拟合存在两个问题:①给出的分布可能不适合任一标准分布。②即使存在一个标准分布,分布拟合的过程耗时太长。此外,基于统计的离群检测算法大多只适合于挖掘单变量的数值型数据,目前几乎没有多元的不一致检验,对于大多数的应用来说,例如图像和地理数据,数据集的维数却可能是高维的。实际生活中,以上缺陷都大大限制了基于统计的方法的应用,使得它主要局限于科研计算,算法的可移植性较差。

1.1.2 基于距离的异常点检测算法

用什么标准判定一个数据对象是孤立点呢?即便是对给定的距离量度函数,对孤立点也有不同的定义,以下是使用较多的几个:

●∙基于距离的离群点最早是由Knorr和Ng提出的,他们把记录看作高维

空间中的点,离群点被定义为数据集中与大多数点之间的距离都大于某

个阈值的点,通常被描述为DB ( pct,d min ) ,数据集T中一个记录O称

为离群点,当且仅当数据集T中至少有pct部分的数据与O的距离大

于d min 。换一种角度考虑,记M =N ×(1 - pct) ,离群检测即判断与

点O距离小于d min 的点是否多于M。若是,则O不是离群点,否则

O是离群点[4 ][36 ]。

●∙孤立点是数据集中到第k个最近邻居的距离最大的n个对象[37 ]。

●∙孤立点是数据集中与其k个最近邻居的平均距离最大的n个对象[38 ]。

基于距离的离群点定义包含并拓展了基于统计的思想,即使数据集不满足任何特定分布模型,它仍能有效地发现离群点,特别是当空间维数比较高时,算法的效率比基于密度的方法要高得多[39 ]。算法具体实现时,首先给出记录间距离

的度量,常用的是绝对距离(曼哈顿距离)、欧氏距离和马氏距离[40 ]。在给出了距离的度量并对数据进行一定的预处理以后,任意给定参数pct和d min 就可以根据离群的定义来检测离群。Rastogi 和Ramaswamy在上面基于距离的离群点定义的基础上,提出改进的基于距离的k最近邻(k-NN)离群检测算

法[37 ][41 ][42 ]。

基于距离的离群检测方法中,算法需要事先确定参数pct和d min ,对于不同的数据集这往往是一件比较困难的事情,特别是d min ,不同聚类密度的数据

集d min 会有很大的差异,而这一般没有规律可循,因此,对于给定的不同d min ,异常检测结果通常具有很大的不稳定性[43 ]。另一方面,基于距离的方法理论上能处理任意维任意类型的数据,当属性数据为区间标度等非数值属性时,记录之间的距离不能直接确定,通常需要把属性转换为数值型[37 ][44 ],再按定义计算记录之间的距离。当空间的维数大于三维时,由于空间的稀疏性,距离不再具有常规意义,因此很难为异常给出合理的解释。针对这个问题,一些人通过将高维空间映射转换到子空间的办法来解决数据稀疏的问题,此方法在聚类算法中用得比较多[45 ][46 ],Agarwal R. [45 ]等人曾试着用这种投影变换的方法来挖掘离群。总的来说,基于距离的离群检测方法具有比较直观的意义,算法比较容易理解,因此在实际中应用得比较多。

目前比较成熟的基于距离的异常点检测的算法有:

1.基于索引的算法(Index-based):给定一个数据集合,基于索引的算法采用多维索引结构R-树,k-d树等,来查找每个对象在半径d范围内的邻居。假设M为异常点数据的d领域内的最大对象数目。如果对象O的M+l个邻居被发现,则对象O就不是异常点。这个算法在最坏情况下的复杂度为O(k*n 2 ) ,k为维数,n为数据集合中对象的数目。当k增加时,基于索引的算法具有良好的扩展性[44 ]。

2.嵌套循环算法(Nested-loop):嵌套一循环算法和基于索引的算法有相同的计算复杂度,但是它避免了索引结构的构建,试图最小化I/O的次数。它把内存的缓冲空间分为两半,把数据集合分为若干个逻辑块。通过精心选择逻辑块装入每个缓冲区域的顺序,I/O效率能够改善[44 ]。

3.基于单元的算法(cell-based)[47 ]:在该方法中,数据空间被划为边长等于d /(2*k1/2 ) 的单元。每个单元有两个层围绕着它。第一层的厚度是一个单元,而第二层的厚度是[2*k1/2 -1] 。该算法逐个单元地对异常点计数,而不是逐个对象地进行计数。对于一个给定的单元,它累计三个计数:单元中对象的数

目(cell_count)、单元和第一层中对象的数目(cell_+_1_layer_count)单元和两个层次中的对象的数目(cell_+_2_layers_count)。该算法将对数据集的每一个元素进行异常点数据的检测改为对每一个单元进行异常点数据的检测,它提高了算法

的效率。它的算法复杂度是O(c k +n ) ,这里的c是依赖于单元数目的常数,k是维数。它是这样进行异常检测的:若cell_+_1_layer_count>M,单元中的所有对象都不是异常;若cell_+_2_layers_count<=M,单元中的所有对象都是异常;否则,单元中的某一些数据可能是异常。为了检测这些异常点,需要逐个对象加入处理。基于距离的异常点检测方法要求用户设置参数P和d,而寻找这些参数

的合适设置可能涉及多次试探和错误。

基于距离的方法与基于统计的方法相比,不需要用户拥有任何领域知识,与序列异常相比,在概念上更加直观。更重要的是,距离异常接近Hawkins的异

常本质定义。然而,三种类型的基于距离的离群检测算法中,基于索引的算法和循环——嵌套算法需要O (k *n2 ) 的时间开销,因此在大数据集中还有待于改进;而基于单元的算法,虽然与n具有线性的时间关系,但是它与k成指数关系,这限制了它在高维空间中的应用,此外,基于单元的算法还需要事先确定参

数pct,d min 以及单元的大小,这使得算法的可行性比较差;高维空间中,基于索引的方法由于需要事先建立数据集的索引,建立与维护索引也要花大量的时间。因此三种方法对于高维空间中的大数据集,算法的效率都不高[44 ]。

1.1.3 基于密度的异常点检测算法

基于密度的离群检测算法一般都建立在距离的基础上,某种意义上可以说基于密度的方法是基于距离的方法中的一种,但基于密度的异常观点比基于距离的异常观点更贴近Hawkins的异常定义,因此能够检测出基于距离的异常算法所

不能识别的一类异常数据——局部异常。基于密度的方法主要思想是将记录之间的距离和某一给定范围内记录数这两个参数结合起来,从而得到“密度”的概念,然后根据密度判定记录是否为离群点。

Breunig等人提出的基于局部离群因子的异常检测算法LOF是基于密度方

法的一个典型例子。它首先产生所有点的MinPts邻域及MinPts距离,并计算到其中每个点的距离;对低维数据,利用网格进行k-NN查询,计算时间为O (n ) ;对中维或中高维数据,采用如X2树等索引结构,使得进行k2NN查询的时间

为O (logn ) ,整个计算时间为O (nlogn ) ;对特高维数据,索引结构不再有效,时间复杂度提高到O ( n2 ) 。然后计算每个点的局部异常因子,最后根据局部异常因子来挖掘离群。LOF算法中,离群点被定义为相对于全局的局部离群点,

这与传统离群的定义不同,离群不再是一个二值属性(要么是离群点,要么是正常点) ,它摈弃了以前所有的异常定义中非此即彼的绝对异常观念,更加符合现实生活中的应用。

相关文档
最新文档