您的位置:首页 > 编程语言 > Python开发

局部离群点检测——LOF算法的Python实现

2018-03-01 19:51 537 查看
局部离群点LOF算法(Local Outlier Factor)是一种常用的离群点检测算法,在数据处理、危险侦测等方面都有广泛的使用,这篇博文将介绍如何使用Python语言,简单地使用LOF算法对离群点进行检测。

LOF检测算法简介

LOF全称Local Outlier Factor,是一种基于点之间距离、密度的一种算法,为了解决简单测距检测方法,通用性不高、不够准确的问题,本算法引用了k阶邻域等一系列概念,保障了算法可以在多个聚合性不同的点集的域中运用,并且有很高的准确性。

LOF算法详述

LOF算法中的几个重要定义:第k距离、第k距离邻域、可达距离、局部可达密度,下面以此进行介绍:

1、对象a的第k距离

存在正整数k,对象a的第k距离表示为
k-distance(a)
,在数据集合A中存在一个对象o,当满足:

数据集中至少有k个对象o’,使
dist(a, o') <= dist(a, o)


数据集中至多有k-1个对象o’,使
dist(a, o') < dist(a, o)


时,则对象a的第k距离
k-distance(a) = dist(a, o)


2、第k距离邻域

理解了第k距离的定义,第k距离邻域的定语就顺理成章了:

数据集合A中,
dist(a, o') <= k-distance(a, o)
的所有点o’的集合

就是a的第k距离邻域。

3、可达距离

数据对象a对数据集中的任意一点o的可达距离:

reach-dist(a, o) = max{k_distance(a, o), dist(a, o)}


通俗地理解,如果这个点o在a的第k距离邻域内,那么a到o的可达距离就是a的第k距离:
reach-dist(a, o) = k-distance(p)
,反之,若o不在第k距离邻域里,那么a到o的可达距离就等于a到o的距离:
reach-dist(a, o) = dist(a, o)


4、局部可达密度

点a的局部可达密度,可以这样理解:

点a的第k距离邻域上的所有点 到a的可达距离
reach-dist(a, o')
的平均数的导数

局部可达密度直观地反映了点a与整个数据集中其他点的距离关系,可达密度越小,越有可能是离群点。

补充

计算到局部可达密度,就可以很好地解决离群点检测的问题了,最简单粗暴的方法就是:设置一个阈值Y,低于Y的就是所需要的离群点。当然这种方法最简单也最不精准,可以通过概率分布等计算等方面来更好地解决这个问题,当然,自2000年,LOF算法诞生至今,已经出现了许多优秀的改进版算法,例如加权子空间检测算法SPOD,基于局部信息熵,对优选子空间进行选取,再计算得到其加权k邻域、可达密度,大大提升了算法的准确性。

后续,我将介绍这些优秀的改进算法并通过Python语言实现,持续更新,希望大家支持,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: