LOF(Local Outlier Factor)原理
文章目录
- 1定义
- 2 k近邻距离(k-distance of an object p)
- 3 k近邻
- 4 可达距离
- 5 局部可达密度
- 6 lof
- 参考:
1定义
LOF(Local Outlier Factor)是一种描述异常值的方法。
2 k近邻距离(k-distance of an object p)
假设p是查询点,离p最近的第K个点为o,则点p的k近邻距离记为k−distance(o)k-distance(o)k−distance(o),一般情况下可以认为k−distance(o)k-distance(o)k−distance(o)等于po之间的距离d(p,o)d(p,o)d(p,o)。
3 k近邻
假设p是查询点,距离小于k近邻距离的点,都属于点p的k近邻,由集合Nk−distance(p)(p)N_{k-distance(p)}(p)Nk−distance(p)(p)表示,简记为Nk(p)N_k(p)Nk(p)。
如果对k近邻算法很熟悉的话,以上两个定义都是很自然而然的定义。
4 可达距离
假设p是查询点,o是p的第k个近邻点,则定义p的可达距离:
reach-distk(p,o)=max{k−distance(o),d(p,o)}\text{reach-dist}_k(p, o) = \max \left\{k-distance(o), d(p, o)\right\}reach-distk(p,o)=max{k−distance(o),d(p,o)}
值得注意的是:k−distance(o)k-distance(o)k−distance(o)是第k个近邻点o的k近邻距离,不是查询点p的k近邻距离(网上博客很多都是错误的)。因此通俗的讲:
对于查询点p而言,假设其第k个近邻点为o,则p的可达距离为o到o的第k个近邻点距离和po的最大值。
5 局部可达密度
假设p是查询点,o是p的近邻点集合N中的任一点,则定义p的可达密度:
lrdk(p)=(1/∑o∈Nk(p)reach-dist k (p,o)∣Nk (p)∣)\operatorname{lrd}_{\operatorname{k}}(p)=\left( 1 / \frac{\underset{o \in N_{\operatorname{k}}(p)}{\sum} \text { reach-dist }_{\text {k }}(p, o)}{\left|N_{\text {k }}(p)\right|}\right) lrdk(p)=1/∣Nk (p)∣o∈Nk(p)∑ reach-dist k (p,o)
局部可达密度等于p的所有k近邻点集合(从第一个近邻点到第k个近邻点)对应的可达距离平均值的倒数。∣Nk (p)∣\left|N_{\text {k }}(p)\right|∣Nk (p)∣这里应该表示查询点p的近邻数量,一般情况等于k
6 lof
假设p是查询点,o是p的近邻点集合N中的任一点,lof定义如下:
LOFk(p)=(∑o∈Nk(p)lrdk(o)lrdk(p)∣Nk (p)∣)\operatorname{LOF}_{\operatorname{k}}(p)=\left( \frac{\underset{o \in N_{\operatorname{k}}(p)}{\sum} \frac{{lrd}_{\operatorname{k}}(o)} {{lrd}_{\operatorname{k}}(p)}}{\left|N_{\text {k }}(p)\right|}\right) LOFk(p)=∣Nk (p)∣o∈Nk(p)∑lrdk(p)lrdk(o)
可以看出,lof计算不难,但要计算所有近邻点的局部可达密度,所以应该是比较耗时的。
参考:
lof原文:《LOF: Identifying Density-Based Local Outliers》
Charu C. Aggarwal《data mining》8.5.2.1 Local Outlier Factor (LOF)
sklearn 源码1
pdal源码1