数据挖掘——异常检测task4:基于相似度的方法

异常检测——基于相似度的方法

主要内容:

  • 基于距离的度量(基于单元、基于索引)
  • 基于密度的度量(k-距离、k-邻域、可达距离、局部可达密度、局部异常因子)

1、概述

基于相似度的方法的主要思想:异常点的表示与正常点不同

实际上,数据通常嵌入在大量的噪声中,而我们所说的“异常值”通常指具有特定业务意义的那一类特殊的异常值。噪声可以视作特性较弱的异常值,没有被分析的价值。噪声和异常之间、正常数据和噪声之间的边界都是模糊的。异常值通常具有更高的离群程度分数值,同时也更具有可解释性

在普通的数据处理中,我们常常需要保留正常数据,而对噪声和异常值的特性则基本忽略。但在异常检测中,我们弱化了“噪声”和“正常数据”之间的区别,专注于具有有价值特性的异常值

2、基于距离的度量

基于最近邻距离来定义异常值,适用于各种数据域的异常检测算法,包括多维数值数据、分类数据、文本数据、时间序列数据和序列数据等。

前提假设:异常点的 k 近邻距离要远大于正常点

解决办法:使用嵌套循环

第一层循环遍历每个数据,第二层循环进行异常判断,需要计算当前点与其他点的距离,一旦已识别出多于 k 个数据点与当前点的距离在 D 之内,则将该点自动标记为非异常值。这样计算的时间复杂度为O(N2),当数据量比较大时,这样计算是及不划算的。 因此,需要修剪方法以加快距离计算。

2.1、基于单元的方法

在基于单元格的技术中,数据空间被划分为单元格,单元格的宽度是阈值 D 和数据维数的函数。具体地说,每个维度被划分成宽度最多为 D 2 d \frac{D}{2\sqrt{d}} 2d D 单元格。在给定的单元以及相邻的单元中存在的数据点满足某些特性,这些特性可以让数据被更有效的处理。
在这里插入图片描述
以二维情况为例,此时网格间的距离为 D 2 d \frac{D}{2\sqrt{d}} 2d D,需要记住的一点是,网格单元的数量基于数据空间的分区,并且与数据点的数量无关。这是决定该方法在低维数据上的效率的重要因素,在这种情况下,网格单元的数量可能不多。 另一方面,此方法不适用于更高维度的数据。对于给定的单元格,其 L 1 L_1 L1 邻居被定义为通过最多1个单元间的边界可从该单元到达的单元格的集合。请注意,在一个角上接触的两个单元格也是 L 1 L_1 L1 邻居。 L 2 L_2 L2邻居是通过跨越2个或3个边界而获得的那些单元格。 上图中显示了标记为 的特定单元格及其 L 1 L_1 L1 L 2 L_2 L2 邻居集。 显然,内部单元具有8个 L 1 L_1 L1 邻居和40个 L 2 L_2 L2 邻居。 然后,可以立即观察到以下性质:

  • 单元格中两点之间的距离最多为 D/2。
  • 一个点与 L 1 L_1 L1 邻接点之间的距离最大为 D。
  • 一个点与它的 L r L_r Lr 邻居(其中 r > 2)中的一个点之间的距离至少为 D。

唯一无法直接得出结论的是 中的单元格。 这表示特定单元中数据点的不确定性区域。 对于这些情况,需要明确执行距离计算。 同时,可以定义许多规则,以便立即将部分数据点确定为异常值或非异常值。 规则如下:

  • 如果一个单元格中包含超过 k k k 个数据点及其 L 1 L_1 L1 邻居,那么这些数据点都不是异常值。
  • 如果单元 A A A 及其相邻 L 1 L_1 L1 L 2 L_2 L2 中包含少于 k k k 个数据点,则单元A中的所有点都是异常值。

此过程的第一步是将部分数据点直接标记为非异常值(如果由于第一个规则而导致它们的单元格包含 k k k 个点以上)。 此外,此类单元格的所有相邻单元格仅包含非异常值。为了充分利用第一条规则的修剪能力,确定每个单元格及其 L 1 L_1 L1 邻居中点的总和。如果总数大于 k k k,则所有这些点也都标记为非离群值。

接下来,利用第二条规则的修剪能力。 对于包含至少一个数据点的每个单元格 A A A ,计算其中的点数及其 L 1 L_1 L1 L 2 L_2 L2 邻居的总和。如果该数字不超过 k k k ,则将单元格 A A A 中的所有点标记为离群值。此时,许多单元可能被标记为异常值或非异常值。

对于此时仍未标记为异常值或非异常值的单元格中的数据点需要明确计算其 k k k 最近邻距离。即使对于这样的数据点,通过使用单元格结构也可以更快地计算出 个最近邻的距离。考虑到目前为止尚未被标记为异常值或非异常值的单元格 A A A 。这样的单元可能同时包含异常值和非异常值。单元格 A A A 中数据点的不确定性主要存在于该单元格的 L 2 L_2 L2 邻居中的点集。无法通过规则知道 A A A L 2 L_2 L2 邻居中的点是否在阈值距离 D D D 内,为了确定单元 A A A 中数据点与其 L 2 L_2 L2 邻居中的点集在阈值距离 D D D 内的点数,需要进行显式距离计算。对于那些在 L 1 L_1 L1 L 2 L_2 L2 中不超过 k k k 个且距离小于 D D D 的数据点,则声明为异常值。需要注意,仅需要对单元 A A A 中的点到单元 A A A 的邻居中的点执行显式距离计算。这是因为已知 L 1 L_1 L1 邻居中的所有点到 A A A 中任何点的距离都小于 D D D,并且已知 L r L_r Lr 中(r > 2)的所有点与 A A A 上任何点的距离至少为 D D D。因此,可以在距离计算中实现额外的节省。

2.2、基于索引的方法

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

3、基于密度的度量

基于密度的算法主要有局部离群因子(LocalOutlierFactor,LOF),以及LOCI、CLOF等基于LOF的改进算法。下面我们以LOF为例来进行详细的介绍和实践。
基于距离的检测适用于各个集群的密度较为均匀的情况。在下图中,离群点B容易被检出,而若要检测出较为接近集群的离群点A,则可能会将一些集群边缘的点当作离群点丢弃。而LOF等基于密度的算法则可以较好地适应密度不同的集群情况。
在这里插入图片描述
那么,这个基于密度的度量值是怎么得来的呢?还是要从距离的计算开始。类似k近邻的思路,首先我们也需要来定义一个“k-距离”。

3.1、k-距离(k-distance§)

对于数据集 D D D中的给定对象 p p p,对象 p p p与数据集 D D D中任意点 o o o的距离为 d ( p , o ) d(p,o) d(p,o)。我们把数据集 D D D中与对象 p p p距离最近的 k k k个相邻点的最远距离表示为 k − d i a t a n c e ( p ) k-diatance(p) kdiatance(p),把距离对象 p p p距离第 k k k近的点表示为 o k o_k ok,那么给定对象和点之间的距离 d ( p , o k ) = k − d i s t a n c e ( p ) d(p,o_k)=k-distance(p) d(p,ok)=kdistance(p),满足:

  • 在集合 D D D中至少有不包括 p p p在内的 k k k个点 o ′ o' o ,其中 o ′ ∈ D { p } o'∈D\{p\} oD{p},满足 d ( p , o ′ ) ≤ d ( p , o k ) d(p,o')≤d(p,o_k) d(p,o)d(p,ok)
  • 在集合 D D D中最多有不包括 p p p在内的 k − 1 k-1 k1个点 o ′ o' o,其中 o ′ ∈ D { p } o'∈D\{p\} oD{p},满足 d ( p , o ′ ) < d ( p , o k ) d(p,o')<d(p,o_k) d(p,o)d(p,ok)

直观一些理解,就是以对象 p p p为中心,对数据集 D D D中的所有点到 p p p的距离进行排序,距离对象 p p p k k k近的点 o k o_k ok p p p之间的距离就是k-距离。

3.2、k-邻域(k-distance neighborhood)

由k-距离,我们扩展到一个点的集合——到对象 p p p的距离小于等于k-距离的所有点的集合,我们称之为k-邻域:
在这里插入图片描述

  • k-邻域包含对象 p p p的第 k k k距离以内的所有点,包括第 k k k距离点。
  • 对象 p p p的第 k k k邻域点的个数 ∣ N k ( p ) ∣ ≥ k |N_k(p)|≥k Nk(p)k

在二维平面上展示出来的话,对象 p p p的k-邻域实际上就是以对象 p p p为圆心、k-距离为半径围成的圆形区域。就是说,k-邻域已经从“距离”这个概念延伸到“空间”了。
在这里插入图片描述

3.3、可达距离(reachability distance)

有了邻域的概念,我们可以按照到对象的距离远近,将数据集 D D D内的点按照到 o o o的距离分为两类:

  • p i p_i pi在对象 o o o的k-邻域内,则可达距离就是给定点 p i p_i pi关于对象 o o o的k-距离;
  • p i p_i pi在对象 o o o的k-邻域外,则可达距离就是给定点 p i p_i pi关于对象 o o o的实际距离。
    给定点关于对象的可达距离用数学公式可以表示为:
    在这里插入图片描述
    这样的分类处理可以简化后续的计算,同时让得到的数值区分度更高。
    在这里插入图片描述
    如图:
  • p 1 p_1 p1在对象 o o o的k-邻域内, d ( p 1 , o ) < k − d i s t a n c e ( o ) d(p_1,o)<k-distance(o) d(p1,o)kdistance(o)
    可达距离 r e a c h − d i s t k ( p 1 , o ) = k − d i s t a n c e ( o ) reach-dist_k(p_1,o)=k-distance(o) reachdistk(p1,o)=kdistance(o);
  • p 2 p_2 p2在对象 o o o的k-邻域内, d ( p 2 , o ) < k − d i s t a n c e ( o ) d(p_2,o)<k-distance(o) d(p2,o)kdistance(o)
    可达距离 r e a c h − d i s t k ( p 2 , o ) = d ( p 2 , o ) ; 注 意 : 这 里 用 的 是 reach-dist_k(p_2,o)=d(p_2,o); 注意:这里用的是 reachdistk(p2,o)=d(p2,o);p_k 与 与 o 的 距 离 的距离 d(p_k,o) 与 与 o 的 k − 距 离 的k-距离 kk-distance(o)来进行比较,不是与 k − d i s t a n c e ( p ) k-distance(p) kdistance(p)进行比较!

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

3.4、局部可达密度(local reachability density)

我们可以将“密度”直观地理解为点的聚集程度,就是说,点与点之间距离越短,则密度越大。在这里,我们使用数据集 D D D中对象 p p p与对象 o o o的k-邻域内所有点的可达距离平均值的倒数(注意,不是导数)来定义局部可达密度。
在进行局部可达密度的计算的时候,我们需要避免数据集内所有数据落在同一点上,即所有可达距离之和为0的情况:此时局部密度为∞,后续计算将无法进行。LOF算法中针对这一问题进行了如下的定义:对于数据集 D D D内的给定对象 p p p,存在至少 M i n P t s ( p ) ≥ 1 MinPts(p)≥1 MinPts(p)1个不同于 p p p的点。因此,我们使用对象 p p p o ∈ N M i n P t s ( p ) o∈N_{MinPts}(p) oNMinPts(p)的可达距离 r e a c h − d i s t M i n P t s ( p , o ) reach-dist_{MinPts(p,o)} reachdistMinPts(p,o)作为度量对象 p p p邻域的密度的值。
给定点p的局部可达密度计算公式为:
在这里插入图片描述
由公式可以看出,这里是对给定点p进行度量,计算其邻域内的所有对象o到给定点p的可达距离平均值。给定点p的局部可达密度越高,越可能与其邻域内的点属于同一簇;密度越低,越可能是离群点。

3.5、局部异常因子

得到lrd(局部可达密度)以后就可以将每个点的lrd将与它们的k个邻点的lrd进行比较,得到局部异常因子LOF。更具体地说,LOF在数学上是对象的邻居点 o ( o ∈ N M i n P t s ( p ) ) o(o∈N_{MinPts}(p)) o(oNMinPts(p)) 的lrd平均值与 p 的lrd的比值。
在这里插入图片描述
不难看出, p p p的局部可达密度越低,且它的 M i n P t s MinPts MinPts近邻的平均局部可达密度越高,则的LOF值越高。
如果这个比值越接近1,说明o的邻域点密度差不多,o可能和邻域同属一簇;如果这个比值小于1,说明o的密度高于其邻域点密度,o为密集点;如果这个比值大于1,说明o的密度小于其邻域点密度,o可能是异常点。
由公式计算出的LOF数值,就是我们所需要的离群点分数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Semantic Analysis with Context Models • Task1: Model the context of a frequent pattern Based on the Context Model… • Task2: Extract strongest context indicators • Task3: Extract representative transactions • Task4: Extract semantically similar patterns 使用上下文模型进行语义分析 • 任务1:建模频繁模式的上下文,基于上下文模型… • 任务2:提取最强的上下文指标 • 任务3:提取代表性交易数据 • 任务4:提取语义相似的模式 在数据挖掘和机器学习中,语义分析是一项重要的任务。使用上下文模型进行语义分析是一种常用的方法。其中,频繁模式挖掘是语义分析的一个重要应用领域。通过建模频繁模式的上下文,我们可以更好地理解这些模式所代表的含义和作用。 任务1:建模频繁模式的上下文,基于上下文模型。上下文模型是一种描述数据集中各个数据点之间关系的模型。通过建立上下文模型,我们可以确定频繁模式的上下文,并且可以帮助我们更好地理解这些模式所代表的含义和作用。 任务2:提取最强的上下文指标。在上下文模型中,我们可以使用各种指标来描述数据点之间的关系,例如相似度、距离和相关性等。通过提取最强的上下文指标,我们可以更好地理解频繁模式的上下文,并且可以帮助我们更好地理解这些模式所代表的含义和作用。 任务3:提取代表性交易数据。在频繁模式挖掘中,交易数据是指包含频繁模式的数据记录。通过提取代表性的交易数据,我们可以更好地理解频繁模式所代表的含义和作用,并且可以帮助我们更好地进行模式分析。 任务4:提取语义相似的模式。在频繁模式挖掘中,我们通常会发现多个频繁模式之间存在语义上的相似性。通过提取语义相似的模式,我们可以更好地理解数据集中的规律和关联性,并且可以帮助我们更好地进行模式分析。 综上所述,使用上下文模型进行语义分析是一种有效的方法,可以帮助我们更好地理解数据集中的规律和关联性,特别是在频繁模式挖掘中。任务1到任务4是使用上下文模型进行语义分析的关键步骤。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值