R语言之离群点检验(part2)--局部离群点因子LOF检验
学习笔记
参考文献:《R语言与数据挖掘》
局部离群点因子检验
概述
局部离群点因子(LOF)是一种基于密度的局部离群点的算法。局部离群点因子算法,将一个点的局部密度与其邻域点的局部密度进行比较。如果前者远远小于后者,则该点相对于邻域点位于一个密度更稀疏的区域,则判定该点为离群点。
此处有一个LOF判别标准:
LOF值接近1,说明该点与其邻域点密度差不多,该点可能和邻域点同属一簇;
LOF值小于1,说明该点的密度高于其邻域点密度,该点为密集点;
LOF值大于1,说明该点的密度小于其邻域点密度,且值越大,该点越可能是异常点。
LOF数学原理
这里我就给一个LOF的计算公式:
这个LOF计算公式,涉及到局部可达密度、可达距离、k距离邻域、第k距离等概念。这里就不一一叙述了。为啥不一一叙述???因为下面的两篇文章已经将LOF的数学原理解释的相当清楚了,欢迎大家去学习。
- LOF原理
LOF离群因子检测算法及python3实现
异常点/离群点检测算法——LOF
R语言实现
- 相关函数
如何理解k呢?举个例子(设置k=5):你要抓几个人来实验,此时你身边有n个人,以你为中心,这n个人离你的距离为[1m, 2m, 2m, 4m, 5m, 5m, 5m, 6m, 6m, 7m…],你想要抓离你最近的5个人,你按照距离从小到大依次抓人,当你抓到第5个人时,你发现有3个人离你的距离都为5m,这可咋整呢,要抓哪位仁兄呢?为了公平起见,且量大从优,你把这3个距离你5m的人都抓去做实验,那么离你最近的7个人就被你选入了实验中。
从原理的角度来说,当设置k=5时,就有7个点参与了目标点的局部密度计算。
- 案例
利用R自带的鸢尾花数据集来进行离群点检验。
代码1:
library(DMwR) data(iris)#提取其中的数值型变量 iris2 <- iris[, 1:4] #LOF法 lof_score <- lofactor(iris2, k = 5)#绘制密度曲线 plot(density(lof_score), main = 'lof密度曲线', xlab = 'Lof值')图像:
代码2:
#离群点行号 (out_point <- order(lof_score, decreasing = T)[1:5]) #[1] 42 107 23 110 63#绘制矩阵散点图 n <- nrow(iris2) pch <- rep(".", n) pch[out_point] <- "+" col <- rep("black", n) col[out_point] <- "red" pairs(iris2, pch = pch, col = col,main = "散点图矩阵")图像:
总结
以上是生活随笔为你收集整理的R语言之离群点检验(part2)--局部离群点因子LOF检验的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 魔兽世界萨尔去哪了
- 下一篇: 时间序列与R语言应用(part1)--时