异常检测4

task4:基于邻近度的方法

1基于距离的度量

基于距离的异常检测有一个前提假设,即异常点的k近邻距离要远大于正常点。一般使用嵌套循环就可以实现。第一层遍历每个数据,第二层循环进行异常判断,需要计算当前点到其他点的距离,一旦已识别出多于k个点与当前点的距离在D内,则将该点标记为非异常点。这样计算的实间复杂度为O(N*(N-1))。当数据量较大时,需要修剪方法以加快距离的计算。

1.1基于单元格的方法

在基于单元格的方法中,数据空间被划分为单元格,单元格的宽度是阈值D和数据维数的函数。具体地说,每个维度被划分为宽度最多为 D/(2⋅√d)单元格。在这里插入图片描述
上图显示了标记为X的特定单元格及其L1和L2邻居集。
以二维为例,此时网格间的距离为 D/(2⋅√2),网格单元的数量基于数据空间的分区,与数据点的数量无关。这使得该方法在低维数据上具有高效性,在此情景下,网格单元的数量不会太多。但是,该方法不适用于更高维度的数据,因为维度越高网格间的距离就会越小,其邻居就会更多,最后对每个网格单元的计算就会更加复杂。对于给定的单元格,其L1邻居被定义为通过最多1个单元间的边界可从该单元到达单元格的集合。L2邻居是跨越2个或3个边界而获得的那些单元格。
性质:
(1)单元格中两点之间的距离最多为D/2
(2)一个点与L1邻接点之间的距离最大为D
(3)一个点与它的Lr邻居(r>2)中的一个点的距离至少为D
L2单元格表示特定单元格中数据点的不确定区域,此时需要明确执行距离计算。同时,可以结合规则对是否为异常点加以判定。
规则:
(1)如果一个单元格中包含超过k个数据点及其L1邻居,那么这些数据点都不是异常值。
(2)如果单元A及其相邻L1和L2中包含少于k个数据点,则单元A中所有的点都是异常点。
为了充分利用第一条规则的修剪能力,确定每个单元格及其L1邻居的点的总和。如果总数大于k,则所有这些点也都标记为非异常值。利用第二条规则的修剪能力,对于包含至少一个数据点的每个单元格A,计算其中点数及其L1和L2邻居的点的总和,如果不超过k,则将A中的所有点标记为异常值。
对于此时仍未标记为异常值或非异常值的单元格中的数据点需要明确计算其 k 最近邻距离。这样的单元可能同时包含异常值和非异常值。单元格 A 中数据点的不确定性主要存在于该单元格的 L2 邻居中的点集。无法通过规则知道 A 的 L2 邻居中的点是否在阈值距离 D 内,为了确定单元 A 中数据点与其L2 邻居中的点集在阈值距离 D 内的点数,需要进行显式距离计算。因为已知 L1 邻居中的所有点到 A 中任何点的距离都小于 D,并且已知 Lr 中 (r>2) 的所有点与 A上任何点的距离至少为 D,所以,仅需要对单元 A 中的点到单元A的L2邻居中的点执行显式距离计算。

1.2基于索引的方法

利用多维索引结构(如 R 树、k−d 树)来搜索每个数据对象 A 在半径 D 范围 内的相邻点。设 M 是一个异常值在其 D -邻域内允许含有对象的最多个数,若发现某个数据对象 A 的 D -邻域内出现 M+1 甚至更多个相邻点, 则判定对象 A 不是异常值。该算法时间复杂度在最坏情况下为 O(kN2), 其中 k 是数据集维数, N 是数据集包含对象的个数。该算法在数据集的维数增加时具有较好的扩展性,但是时间复杂度的估算仅考虑了搜索时间,而构造索引的任务本身就需要密集复杂的计算量。

2基于密度的度量

基于密度的算法主要有局部离群因子(LocalOutlierFactor,LOF),以及LOCI、CLOF等基于LOF的改进算法。基于距离的检测适用于各个集群的密度较为均匀的情况,而LOF等基于密度的算法则可以较好地适应密度不同的集群情况。

2.1 k-距离(k-distance§)

k-距离:一个点到对象p的距离=k-距离
将k-距离扩展到集合有:
在这里插入图片描述

2.2 k-邻域(k-distance neighborhood)

k-邻域:点集中到对象p的距离<=k-距离的所有点的集合
(1)k-邻域包含对象p的第k距离以内的所有点,包括第k距离点。
(2)对象p的第k邻域点的个数∣Nk§∣≥k。
在这里插入图片描述
如图所示,对象p的k邻域就是以对象p为圆心、k-距离为半径围成的圆形区域。

2.3可达距离(reachability distance)

按照到对象o的距离远近,将数据集D内的点按照到o的距离分为两类:
(1)若pi在对象o的k-邻域内,则可达距离就是给定点pi关于对象o的k-距离
(2)若pi在对象o的k-邻域外,则可达距离就是给定点pi关于对象o的实际距离
可达距离的设计是为了减少距离的计算开销,o的k-邻域内的所有对象p的k-距离计算量可以被显著降低,相当于使用一个阈值把需要计算的部分“截断”了。这种“截断”对计算量的降低效果可以通过参数k来控制,k的值越高,无需计算的邻近点越多,计算开销越小。
但是另一方面,k的值变高,可能意味着可达距离变远,对集群点和离群点的区分度可能变低。因此,如何选择k值,是LOF算法能否达到效率与效果平衡的重要因素。

2.4局部可达密度(local reachability density)

使用数据集D中对象p与对象o的k-邻域内所有点的可达距离平均值的倒数(注意,不是导数)来定义局部可达密度。
在进行局部可达密度的计算的时候,我们需要避免数据集内所有数据落在同一点上,即所有可达距离之和为0的情况:此时局部密度为∞,后续计算将无法进行。LOF算法中针对这一问题进行了如下的定义:对于数据集D内的给定对象p,存在至少MinPts§≥1个不同于p的点。因此,我们使用对象p到o∈NMinPts§的可达距离reach−distMinPts(p,o)作为度量对象p邻域的密度的值。
给定点p的局部可达密度计算公式为:
在这里插入图片描述
由公式可以看出,这里是对给定点p进行度量,计算其邻域内的所有对象o到给定点p的可达距离平均值。给定点p的局部可达密度越高,越可能与其邻域内的点 属于同一簇;密度越低,越可能是离群点。

2.5局部异常因子

得到lrd(局部可达密度)以后就可以将每个点的lrd将与它们的k个邻点的lrd进行比较,得到局部异常因子LOF。LOF在数学上是对象p的邻居点o(o∈NMinPts§)的lrd平均值与p的lrd的比值。
在这里插入图片描述
如果这个比值越接近1,说明p的邻域点密度差不多,p可能和邻域同属一簇;如果这个比值小于1,说明p的密度高于其邻域点密度,p为密集点;如果这个比值大于1,说明p的密度小于其邻域点密度,p可能是异常点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值