1. 背景
在LOF之前的异常检测算法大多是基于统计方法的,或是借用了一些聚类算法用于异常点的识别(如DBSCAN, OPTICS)。但这些方法都有一些不完美的地方:
1. 基于统计的方法:通常需要假设数据服从特定的概率分布,这个假设往往是不成立的;
2. 聚类方法:通常只能给出 0/1 的判断(是不是异常点),不能量化每个数据点的异常程度。
相比较而言,基于密度的LOF(Local Outlie Factor)算法要更简单、直观。它不需要对数据的分布做太多要求,还能量化每个数据点的异常程度(outlierness)。
2. LOF 算法
基于密度的离群点检测方法有一个基本假设:非离群点对象周围的密度与其邻域周围的密度类似,而离群点对象周围的密度显著不同于其邻域周围的密度。LOF 就是基于密度来判断异常点的,通过给每个数据点都分配一个依赖于邻域密度的离群因子 LOF,进而判断该数据点是否为离群点。如果LOF>=1,则该点为离群点,如果LOF近似1,则该点为正常数据点。
3. 几个基本概念
3.1 k邻近距离
在距离数据点P最近的几个点中,第k个最近的点跟点P之间的距离称为点P的K-邻近距离,记为k-distance (p),公式如下:
,其中点O为距离点P最近的第k个点。
3.2 k距离领域
以点P为圆心,以k邻近距离为半径画圆,这个圆以内的范围就是k距离领域。
3.3 可达距离
这个可达距离大家需要留意点,点P到点O的第k可达距离: