异常检测算法-LOF(Local Outlie Factor)

一.背景

在 LOF 之前的异常检测算法大多是基于统计方法的,或者是借用了一些聚类算法用于异常点的识别(比如 ,DBSCAN,OPTICS)。这些方法都有一些不完美的地方:

基于统计的方法:通常需要假设数据服从特定的概率分布,这个假设往往是不成立的。

聚类方法:通常只能给出 0/1 的判断(即:是不是异常点),不能量化每个数据点的异常程度。

相比较而言,基于密度的LOF算法要更简单、直观。它不需要对数据的分布做太多要求,还能量化每个数据点的异常程度(outlierness)。

二.LOF 算法

首先,基于密度的离群点检测方法有一个基本假设:非离群点对象周围的密度与其邻域周围的密度类似,而离群点对象周围的密度显著不同于其邻域周围的密度。

什么意思呢?看下面图片感受下。

集群C1包含了400多个点,集群C2包含100个点。C1和C2都是一类集群点,区别是C1位置比较集中,或者说密度比较大。而像o1、o2点均为异常点,因为基于我们的假设,这两个点周围的密度显著不同于周围点的密度。

LOF 就是基于密度来判断异常点的,通过给每个数据点都分配一个依赖于邻域密度的离群因子 LOF,进而判断该数据点是否为离群点。如果LOF>=1,则该点为离群点,如果LOF≈1,则该点为正常数据点。

那什么是LOF呢?

了解LOF前,必须先知道一下3个基本概念,因为LOF是基于这几个概念而来的。

1. k邻近距离

在距离数据点P最近的几个点中,第k个最近的点跟点P之间的距离称为点P的K-邻近距离,记为k-distance (p),公式如下:

d_{k}(P)=d(P,O)

点O为距离点P最近的第k个点。


比如上图中,距离点P最近的第4个点是点6。

这里的距离计算可以采用欧式距离、汉明距离、马氏距离等等。比如用欧式距离的计算公式如下:

k代表数据维度,i代表第i个样本。

2. k距离领域

以点P为圆心,以k邻近距离d_{k}(P)为半径画圆,这个圆以内的范围就是k距离领域,公式如下:

还是上图所示,假设k=4,那么点1-6均是邻域范围内的点。

3. 可达距离

这个可达距离大家需要留意点,点P到点O的第k可达距离:

这里计算P到点O的第K可达距离,就是在点P与O的距离、距离点O最近的第 k 个点距离中取较大的一个,如图下所示。

p_{2}距离o远,那么两者之间的可达距离就是它们的实际距离。如果距离足够近,如点p_{1},实际距离将被o的k距离代替。所有p接近o的统计波动d(p,o)可以显著减少,这可以通过参数k来控制,k值越高,同一邻域内的点的可达距离越相似。

4. 局部可达密度

先给出公式。

数据点P的局部可达密度就是基于P的k个最近邻的平均可达距离的倒数。距离越大,密度越小。

5. 局部异常因子

根据局部可达密度的定义,如果一个数据点跟其他点比较疏远的话,那么显然它的局部可达密度就小。但LOF算法衡量一个数据点的异常程度,并不是看它的绝对局部密度,而是看它跟周围邻近的数据点的相对密度。

这样做的好处是可以允许数据分布不均匀、密度不同的情况。局部异常因子即是用局部相对密度来定义的。数据点p的局部相对密度(局部异常因子)为点P邻域内点(k个点)的平均局部可达密度跟数据点P的局部可达密度(上式的lrd_{k}(P))的比值,即:

三.LOF算法流程

了解了 LOF 的定义以后,整个算法也就显而易见了:

1.对于每个数据点,计算它与其它所有点的距离,并按从近到远排序。

2.对于每个数据点,找到它的k-nearest-neighbor,计算LOF得分。

计算得分分为三步:

第一步计算点P的局部可达密度;

第二步计算点P的k邻域内所有点局部可达密度的平均值;

第三步通过第二步计算结果与第一步计算结果的比值,得到LOF分数.

3.如果LOF值越大,说明越异常,反之如果越小,说明越趋于正常。

四.LOF优缺点

优点

LOF 的一个优点是它同时考虑了数据集的局部和全局属性。异常值不是按绝对值确定的,而是相对于它们的邻域点密度确定的。当数据集中存在不同密度的不同集群时,LOF表现良好,比较适用于中等高维的数据集。

缺点

LOF算法中关于局部可达密度的定义其实暗含了一个假设,即:不存在大于等于 k 个重复的点。

当这样的重复点存在的时候,这些点的平均可达距离为零,局部可达密度就变为无穷大,会给计算带来一些麻烦。在实际应用时,为了避免这样的情况出现,可以把 k-distance 改为 k-distinct-distance,不考虑重复的情况。或者,还可以考虑给可达距离都加一个很小的值,避免可达距离等于零。

另外,LOF 算法需要计算数据点两两之间的距离,造成整个算法时间复杂度为O(n^2)。为了提高算法效率,后续有算法尝试改进。FastLOF (Goldstein,2012)先将整个数据随机的分成多个子集,然后在每个子集里计算LOF值。对于那些LOF异常得分小于等于 1 的,从数据集里剔除,剩下的在下一轮寻找更合适的 nearest-neighbor,并更新 LOF 值。

参考:https://www.zhihu.com/search?type=content&q=lof%E7%AE%97%E6%B3%95%E4%BB%8B%E7%BB%8D

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,874评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,102评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,676评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,911评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,937评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,935评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,860评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,660评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,113评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,363评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,506评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,238评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,861评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,486评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,674评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,513评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,426评论 2 352

推荐阅读更多精彩内容