欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

R语言之离群点检验(part2)--局部离群点因子LOF检验

发布时间:2023/12/19 编程问答 60 豆豆
生活随笔 收集整理的这篇文章主要介绍了 R语言之离群点检验(part2)--局部离群点因子LOF检验 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

学习笔记
参考文献:《R语言与数据挖掘》


局部离群点因子检验

概述

局部离群点因子(LOF)是一种基于密度的局部离群点的算法。局部离群点因子算法,将一个点的局部密度与其邻域点的局部密度进行比较。如果前者远远小于后者,则该点相对于邻域点位于一个密度更稀疏的区域,则判定该点为离群点。
此处有一个LOF判别标准:
LOF值接近1,说明该点与其邻域点密度差不多,该点可能和邻域点同属一簇;
LOF值小于1,说明该点的密度高于其邻域点密度,该点为密集点;
LOF值大于1,说明该点的密度小于其邻域点密度,且值越大,该点越可能是异常点。

LOF数学原理

这里我就给一个LOF的计算公式:

这个LOF计算公式,涉及到局部可达密度、可达距离、k距离邻域、第k距离等概念。这里就不一一叙述了。为啥不一一叙述???因为下面的两篇文章已经将LOF的数学原理解释的相当清楚了,欢迎大家去学习。

  • LOF原理

LOF离群因子检测算法及python3实现
异常点/离群点检测算法——LOF

R语言实现

  • 相关函数
library(DMwR) lofactor(df, k = 5) #使用LOF算法计算局部离群点因子 #df为数据集 #k参数为LOF公式中的k,按照具体情况自行设置。

如何理解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检验的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。