【离群点检测算法】离群点|异常值 检测算法——局部离群因子LOF算法

every blog every motto: You can do more than you think.
https://blog.csdn.net/weixin_39190382?type=blog

0. 前言

离群点检测,理解起来也比较容易。

同学都考70分,你也考70分,可以。
同学都考90分,你考70分,不可以。

1. 正文

Local Outlier Factor(LOF)是基于密度的经典算法
论文:https://www.dbs.ifi.lmu.de/Publikationen/Papers/LOF.pdf

1.1 概述

关于离群点 检测的方法还是比较多,主要有基于统计、聚类、分类、信息论、距离、密度等。

在这里插入图片描述

1.2 相关应用

应用比较广泛,有以下:

  • 欺诈检测:信用卡、电话卡欺诈使用
  • 工业检测:计算机网络的非法入侵
  • 活动监控:实时手机活跃度,实现检测移动手机诈骗行为
  • 网络性能:计算机网络性能检测
  • 生态监测:生态系统失调、异常自然气候等的发现
  • 公共服务:公共卫生中的异常疾病爆发。

1.3 初步理解

C1、C2形成了两簇,而o1、o2是两个离群点,我们任务就需要找出他们。
如果基于距离,o2到最近的C1的距离肯可能小于C1内部元素的距离,从而无法正确检测出。如果基于全局密度,很可能出现相同的情况。

所以正确的做法是基于局部密度,这是我们的直观感受,具体怎么做,且看下文。

在这里插入图片描述

1.4 基础概念

(1). 两点距离

d(p,o): 表示P和O两点之间的距离

(2). 第k距离

k-distance
距离点p,(按从近到远)第k近的点和p之间的距离,称为点p的k-邻近距离,记为k-distance§。

请添加图片描述

(3). 第k距离邻域

k-distance neighborhood of p
点p的第k距离邻域 N k ( p ) N_k(p) Nk(p) ,就是的 第k距离以内的所有点,包括第k距离。
因此,p的第k邻域点的个数 ∣ N k ( p ) ∣ ≥ k |N_k(p)| \geq k Nk(p)k (存在距离p相同距离的点,所以是大于)

(4). 可达距离

reach-distance

注意: 这里需要理解以下。

点o到点p的第k可达距离定义为:
r e a c h − d i s t a n c e k ( p , o ) = m a x ( k − d i s t a n c e ( o ) , d ( p , o ) ) reach-distance_k(p,o) = max( k-distance(o), d(p,o) ) reachdistancek(p,o)=max(kdistance(o),d(p,o))

这里是两个距离选一个最大,和之前在聚类算法中介绍的有点不一样,主要是因为这里多了**“第k”**。

其实也比较好理解:

  • 如果p点在o点 第k距离外,那么可达距离就是直接距离,d(p,o)
  • 如果p点在o点第k距离以内,那么可达距离就是第k距离 d 5 ( o ) d_5(o) d5(o)

如下图所示:

  • p相对o1在第k距离,所以可达距离是直接距离
  • p相对o2在第k距离,所以可达距离是第k距离
    请添加图片描述

(5). 局部可达密度

local reachability density

密度表示为距离倒数,距离越小,密度越大,反之。
故,点p的局部可达密度表示为:

l r d k ( p ) = 1 / ( ∑ o ∈ N k ( p ) r e a c k − d i s t k ( p , o ) ∣ N k ( p ) ∣ ) lrd_k(p) = 1 / ( { \sum_{o \in N_k(p)} reack-dist_k(p,o) \over |N_k(p)| }) lrdk(p)=1/(Nk(p)oNk(p)reackdistk(p,o))
局部可达密度:平均距离的倒数,平均距离为领域内距离和除以邻域内点数

注意: 由于我们的可达距离是非对称的(你离我最近,但我却不是离你最近的点),所以 可达密度也是非对称的。

(6). 局部离群因子

local reachability density
有了一个点的局部可达密度,怎么确定这个点是不是离群点呢,很简单,只要和周围点的的可达密度进行比较就可以。
表示为:

L O F k ( p ) = ∑ o ∈ N k ( p ) l r d k ( o ) ∣ N k ( p ) ∣ / l r d k ( p ) LOF_k(p) = { \sum_{o \in N_k(p)} { lrd_k(o) } \over |N_k(p)|} / lrd_k(p) LOFk(p)=Nk(p)oNk(p)lrdk(o)/lrdk(p)

表示:p点领域内点 N k ( p ) N_k(p) Nk(p)局部可达密度 平均值与p点的可达密度
简单说:周围人考70分,你也考70分,ok;周围人考90分,你考70,不ok。

  • 比值接近1,说明p和其邻域点密度差不多,可能和邻域属于同一簇
  • 比值小于1,p的密度高于邻域点密度,p为密度点
  • 比值小于1,p的密度小于其邻域点密度,p可能是异常点

1.5 算法流程

  1. 计算每个点的lof得分
  2. lof越大,说明越异常,反之。

1.6 优缺点

A. 优点

  1. 思想简单。算法简单易于实现
  2. 利用局部,相比全局更加合理

B. 缺点

  1. LOF算法中关于局部可达密度的定义其实暗含了一个假设:不存在大于等于 k 个重复的点。如果存在大于k个重复点,那么他们之间的距离为0,密度就会变成无穷大。所以一般会给距离加一个微小值。
  2. 因为需要计算距离,运算开销大,不适合高维、大数据 。

参考

[1] https://www.cnblogs.com/wj-1314/p/14049195.html
[2] https://blog.csdn.net/wangyibo0201/article/details/51705966
[3] https://zhuanlan.zhihu.com/p/607616813
[4] https://zhuanlan.zhihu.com/p/28178476
[5] https://zhuanlan.zhihu.com/p/37753692
[6] https://zhuanlan.zhihu.com/p/385238291

猜你喜欢

转载自blog.csdn.net/weixin_39190382/article/details/131452512