【机器学习】 Local Outlier Factor(LOF)算法

参考

局部异常因子算法-Local Outlier Factor(LOF)
Outlier detection with Local Outlier Factor (LOF)

LOF算法

局部异常因子LOF算法(Local Outlier Factor),是一种基于距离的异常检测算法。
理解LOF算法可以从理解下面几个概念开始:

k-distance:第k距离

d ( p , o ) d(p, o) 代表点 p p 和点 o o 之间的距离
p p 的第k距离: d k ( p ) = d ( p , o ) d_k(p) = d(p,o) o o 是距离 p p 第k远的点(不包括 p p 自身)
图1
上图 d 5 ( p ) d_5(p) 表示 p p 的第5距离

k-distance neighborhood of p:第k距离邻域

p p 的第k距离邻域 N k ( p ) N_k(p) ,就是 p p 的第k距离以内的所有点的个数,包括第k距离上的点,不包括点 p p
图2
上图中 N 5 ( p ) = 6 N_5(p) = 6

reach-distance:可达距离

o o 到点 p p 的第k可达距离定义为:
r e a c h reach - d i s t a n c e k ( o , p ) = m a x { o k o p } distance_k(o,p) = max \lbrace{点o的第k距离,o到p的距离\rbrace}

注意上面提到的是:点 p p 的第k距离、点 p p 的第k距离邻域,圆心是 p p
这里提到的是:点 o o 到点 p p 的第k可达距离,圆心是 o o
图3
上图中, r e a c h reach - d i s t a n c e 5 ( o 1 , p ) = o 1 p distance_5(o_1,p) = 点o_1到点p的距离
上图中, r e a c h reach - d i s t a n c e 5 ( o 2 , p ) = o 2 5 distance_5(o_2,p) = 点o_2的第5距离

local reachability density:局部可达密度

p p 的第k距离局部可达密度表示为:
p p 的第k距离临域中所有的点,这些点到点 p p 的第k可达距离的平均值的倒数

注意这里圆心是 o o ,点 o o 是点 p p 的第k距离临域中的点

l r d k ( p ) = N k ( p ) p k p k lrd_k(p) = \dfrac{N_k(p)}{p的第k距离邻域中所有的点,这些点到p的第k可达距离的和}

这个值的含义可以这样理解,首先这代表一个密度密度越高,我们认为越可能属于同一簇,密度越低,越可能是离群点。如果 p p 和周围邻域点是同一簇,那么可达距离越可能为较小的 d k ( o ) d_k(o) ,导致可达距离之和较小,密度较高;如果p和周围邻域点较远,那么可达距离可能都会取较大值 d ( o , p ) d(o,p) ,导致密度较小,越可能是离群点。

local outlier factor:局部离群因子

p p 的局部离群因子表示为:
p p 的第k距离邻域 N k ( p ) N_k(p) 中所有的点,这些点的第k距离局部可达密度的平均值,与点 p p 的第k距离局部可达密度的比值

L O F k ( p ) = p k N k ( p ) k p k LOF_k(p) = \dfrac{点p的第k距离邻域N_k(p)中所有的点,这些点的第k距离局部可达密度的平均值}{点p的第k距离局部可达密度}

也就是说,点 p p 这个值是点 p p 邻域点的密度的平均值比上点 p p 的密度

如果这个比值越接近1,说明 p p 与其邻域点密度差不多, p p 可能和邻域同属一簇;如果这个比值越小于1,说明 p p 的密度高于其邻域点密度, p p 为密集点;如果这个比值越大于1,说明 p p 的密度小于其邻域点密度, p p 越可能是异常点

python中LOF算法的使用

pip install -U scikit-learn
//使用pip安装sklearn
from sklearn.neighbors import LocalOutlierFactor

clf = LocalOutlierFactor(n_neighbors=20, contamination=0.1)
//n_neighbors就是上面介绍中的k,第k邻域
//contamination是异常点在全部点中的比例

y_pred = clf.fit_predict(X)  
//X是点的坐标,一个列表。每个元素又是一个列表,列表的两个数字元素,是点的坐标
//y_pred是预测的结果,1代表是inlier,-1代表是outlier

X_scores = clf.negative_outlier_factor_
//X_scores是计算的结果,都是负数,绝对值越大,越是outlier

结语

如果您有修改意见或问题,欢迎留言或者通过邮箱和我联系。
手打很辛苦,如果我的文章对您有帮助,转载请注明出处。

猜你喜欢

转载自blog.csdn.net/Zhang_Chen_/article/details/90612028