Local Outlier Factor
什么是Local Outlier Factor?
LOF(Local Outlier Factor),又称局部异常因子算法。
区别于Isolation Forest算法(切分次数),LOF算法以距离为切入点,做异常检测。
以上图为例,可以很简单的理解距离做异常检测来源的想法。
LOF的几个概念
1.d(p,o)
两点p和o之间的距离;
2.k-distance第k距离
dk(p)=d(p,o)dk(p)=d(p,o),并且满足:
a) 在集合中至少有不包括p在内的k个点o'∈C{x≠p}, 满足d(p,o')≤d(p,o) ;(就是包括圈边的点,最少为k)
b) 在集合中最多有不包括p在内的k−1个点o'∈C{x≠p},满足d(p,o,)<d(p,o);(就是不含圈边的点,最多为k-1)
p的第k距离,也就是距离p第k远的点的距离,不包括p(这句话很重要)
3.k-distance neighborhood of p:第k距离邻域
点p的第k距离邻域Nk(p),就是p的第k距离即以内的所有点,包括第k距离。
因此p的第k邻域点的个数 |Nk(p)|≥k。
4. reach-distance:可达距离
点o到点p的第k可达距离定义为:
reach−distancek(p,o)=max{k−distance(o),d(p,o)}
也就是,点o到点p的第k可达距离,至少是o的第k距离,或者为o、p间的真实距离。
这也意味着,离点o最近的k个点,o到它们的可达距离被认为相等,且都等于dk(o)。
如图4,o1到p的第5可达距离为d(p,o1),o2到p的第5可达距离为d5(o2)。 (这是一个矢量)
好了,接下来到最重要的东西了
LOF的本质
local reachability density:局部可达密度
表示点p的第k邻域内点到p的平均可达距离的倒数。
这个值的理解可以这么来,首先p的第k距离邻域的应该是死的,所以就看上面的可达距离。从上图中可以看出来,可达距离越小,说明越是同一簇中的数据。所以局部可达密度越大,密度越高,我们就认为越可能属于同一簇。(反之亦然)
ps:这里有个点不是很懂,为什么重复点会导致可达距离之和为0
local outlier factor:局部离群因子
其实这个式子我不是很懂。但其实只要看懂上面的就好了。局部可达密度之比,第k邻域内的点和p点相比。首先我们假设为同一簇,那么这个比值应该是接近于1的。然后外面有一个加,就是把第k邻域内的点全部算一遍。最后再除以这个个数。嗯,分母是为了让它趋近于1,这样我们有一个比较量。
下面给出官方的说法
如果这个比值越接近1,说明p的其邻域点密度差不多,p可能和邻域同属一簇;如果这个比值越小于1,说明p的密度高于其邻域点密度,p为密集点;如果这个比值越大于1,说明p的密度小于其邻域点密度,p越可能是异常点(可以结合上面的图来理解)。
总结
基于距离结合密度的概念是LOF的核心思想
参考
异常点/离群点检测---LOF:https://blog.****.net/wangyibo0201/article/details/51705966