【机器学习】 Local Outlier Factor(LOF)算法
参考
局部异常因子算法-Local Outlier Factor(LOF)
Outlier detection with Local Outlier Factor (LOF)
LOF算法
局部异常因子LOF算法(Local Outlier Factor),是一种基于距离的异常检测算法。
理解LOF算法可以从理解下面几个概念开始:
k-distance:第k距离
代表点
和点
之间的距离
点
的第k距离:
,
是距离
第k远的点(不包括
自身)
上图
表示
的第5距离
k-distance neighborhood of p:第k距离邻域
点
的第k距离邻域
,就是
的第k距离以内的所有点的个数,包括第k距离上的点,不包括点
上图中
reach-distance:可达距离
点
到点
的第k可达距离定义为:
-
注意上面提到的是:点
的第k距离、点
的第k距离邻域,圆心是
这里提到的是:点
到点
的第k可达距离,圆心是
上图中,
-
上图中,
-
local reachability density:局部可达密度
点
的第k距离局部可达密度表示为:
点
的第k距离临域中所有的点,这些点到点
的第k可达距离的平均值的倒数
注意这里圆心是点 ,点 是点 的第k距离临域中的点
这个值的含义可以这样理解,首先这代表一个密度,密度越高,我们认为越可能属于同一簇,密度越低,越可能是离群点。如果 和周围邻域点是同一簇,那么可达距离越可能为较小的 ,导致可达距离之和较小,密度较高;如果p和周围邻域点较远,那么可达距离可能都会取较大值 ,导致密度较小,越可能是离群点。
local outlier factor:局部离群因子
点
的局部离群因子表示为:
点
的第k距离邻域
中所有的点,这些点的第k距离局部可达密度的平均值,与点
的第k距离局部可达密度的比值
也就是说,点 这个值是点 邻域点的密度的平均值比上点 的密度
如果这个比值越接近1,说明 与其邻域点密度差不多, 可能和邻域同属一簇;如果这个比值越小于1,说明 的密度高于其邻域点密度, 为密集点;如果这个比值越大于1,说明 的密度小于其邻域点密度, 越可能是异常点
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
结语
如果您有修改意见或问题,欢迎留言或者通过邮箱和我联系。
手打很辛苦,如果我的文章对您有帮助,转载请注明出处。