|
|
这两天在完善自己系统的过程中要实现一个查找异常的功能,于是在朋友的指点下学习并实现了异常点查找的一个基本算法“局部异常因子算法-Local Outlier Factor(LOF)算法”。" }! T3 g5 \. B0 c: ^0 C* n
首先,找相关说明看看这是个什么东西吧。
W9 V" z4 A" v* N4 b# W8 w我参考了这一篇文章: 异常点/离群点检测算法——LOF
) i: X+ m5 k2 e, T( i1 _5 E- N3 R' ^* \大致明白了lof算法是在讲什么,我的理解还有很多不完善的地方,不过还是作为一个初学者写出来供大家批评指正。" ?. Y& p$ A8 h* ]
根据我的理解大致描述如下:
- P1 @& x' T3 m7 ^9 J1、 k-distance,点p的第k距离就是距离点p第k远的那个点的距离,k可以是任意值。在实际生活中可能会这样:小明说“小红家是离我家第五近的,小赵、小钱、小孙、小李家都比她家离我家近”所以此处小红家距离小明家的距离就是小明家k为5时的第k距离。
6 F3 D5 S- T1 r. l$ [" u2 F9 a2、k-distance neighborhood of p,第k距离领域,按照上面的例子就是{小赵、小钱、小孙、小李、小红},把离p最近的k个点放入一个数组就是第k距离领域了。
3 L1 S! }+ S# r3、reach-distance:可达距离。点o到点p的第k可达距离分两种情况,一种是p在o的第k距离领域那个数组中,这时候可达距离等于第k距离,第二种就是p离点o比较远,不在o的第k距离领域中,此时的可达距离即为真实距离。依然使用上述的例子,小赵家在小明家的第k邻域中,所以可达距离就是第k距离,就是小红家的距离,而二狗子家里小明家很远,可达距离就是真实距离了。
2 w4 K- s _3 j$ m4、local reachability density:局部可达密度。点p的局部可达密度是指点p第k距离邻域中所有成员到点p的可达距离的平均值的倒数,有点复杂,不过多读几遍还是蛮好理解的,就不举例子了。
7 h- t9 X4 B% g, T8 x6 F5、local outlier factor:局部离群因子。点p的局部离群因子即为领域中所有点的局部可达密度的平均数比点p的局部可达密度,不做解释。2 J" }, ]' f. {2 F0 B
到这里为止就是我对lof算法的一个大致理解,具体讲解还要看上面我参考的那篇文章,写的很清楚。
9 j& M* P: _& H1 [1 z. B# N接下来我找了网上的一篇对此算法的实现,很遗憾没有php版本,于是我就找到了这篇文章:基于密度的局部离群点检测(lof算法) (Java 实现)
; I: m# G: \9 N0 ~& e* E; N- k如题所示,是一篇Java实现,于是我就在大神的基础上对其进行修改,改成了一个php的版本。因为对迭代器理解的不是很好,所以迭代器实现部分改成了一般函数,有机会再进行完善。6 y- [0 E* ]5 W' `- \* T+ ]7 z1 g
如下:
+ H4 d# m w( x$ F8 Z[code][/code]到此这篇关于PHP局部异常因子算法-Local Outlier Factor(LOF)算法的具体实现解析的文章就介绍到这了,更多相关PHP局部异常因子算法-Local Outlier Factor(LOF)算法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
6 [- u5 H, w* ^! x$ d7 H* v2 Y1 [: g% N: W0 K/ _
来源:http://www.jb51.net/article/216672.htm
% m- @5 e' p# a; i5 ^8 m# ?# e免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|