DataWhale 组队学习 2021.05 组队学习系列笔记四
LOF 方法是一种典型的基于密度的高精度离群点检测方法。
在 LOF 方法中,通过给每个数据点都分配一个依赖于邻域密度的离群因子 LOF,进而判断该数据点是否为离群点。若 LOF >> 1, 则该数据点为离群点;若 LOF 接近于 1,则该数据点为正常数据点。
实现(sklearn):
sklearn.neighbors.LocalOutlierFactor
(n_neighbors=20, ***, algorithm='auto', leaf_size=30, metric='minkowski', p=2, metric_params=None, contamination='auto', novelty=False, n_jobs=None)[source]¶
- n_neighbors = 20:即k,检测的邻域点个数超过样本数则使用所有的样本进行检测
- algorithm = 'auto':使用的求解算法,使用默认值即可
- contamination = 0.1:范围为 (0, 0.5),表示样本中的异常点比例,默认为 0.1
- n_jobs = -1:并行任务数,设置为-1表示使用所有CPU进行工作
- p = 2:距离度量函数,默认使用欧式距离。(其他距离模型使用较少,这里不作介绍。具体参考官方文档)
from sklearn.neighbors import LocalOutlierFactor
clf = LocalOutlierFactor(n_neighbors=k + 1, algorithm='auto', contamination=0.1, n_jobs=-1)
clf.fit(data)
# 记录 k 邻域距离
predict['k distances'] = clf.kneighbors(predict)[0].max(axis=1)
# 记录 LOF 离群因子,做相反数处理
predict['local outlier factor'] = -clf._decision_function(predict.iloc[:, :-1])