LOF(局部离群因子)异常值检测

2024-05-03 20:36

本文主要是介绍LOF(局部离群因子)异常值检测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

LOF(Local Outlier Factor,局部离群因子)异常值检测的原理和实现步骤时,我们可以进一步详细解释如下:

LOF(局部离群因子)异常值检测代码获取戳此处代码获取戳此处代码获取戳此处代码获取戳此处

原理

LOF算法基于密度的概念来判断数据集中的异常点。它比较每个数据点与其邻近点的局部密度,以确定该点是否异常。如果一个点的局部密度明显低于其邻近点,则它被视为异常点。

LOF算法的关键在于“局部”的概念,这意味着它考虑了数据点的邻近区域,而不是全局数据集。这使得LOF算法能够识别局部异常点,即使它们在整个数据集中的位置并不异常。

实现步骤

  1. 计算k距离(k-distance):
    • 对于数据集中的每个点p,找到距离它最近的k个点的最大距离,这个距离就是p的k距离。
    • k距离表示了p的邻域大小。
  2. 计算k距离邻域(k-distance neighborhood):
    • 对于数据集中的每个点p,找到所有距离p不超过其k距离的点,这些点组成的集合就是p的k距离邻域。
  3. 计算可达距离(Reachability Distance):
    • 对于点p和其k距离邻域中的点o,p关于o的可达距离定义为o的k距离和p与o之间的实际距离中的较大值。
    • 可达距离用于避免距离p很近但k距离很大的点对p的局部密度产生过大的影响。
  4. 计算局部可达密度(Local Reachability Density,LRD):
    • 对于点p,其局部可达密度是其k距离邻域中所有点关于p的可达距离之和的倒数,再除以k。
    • 局部可达密度越高,说明p的邻域点越密集,p越可能是正常点。
  5. 计算局部离群因子(Local Outlier Factor,LOF):
    • 对于点p,其LOF是其k距离邻域中所有点的局部可达密度与p的局部可达密度的比值的平均值。
    • 如果LOF接近1,说明p的密度与其邻域点相似,p是正常点;如果LOF远大于1,说明p的密度明显低于其邻域点,p是异常点。
  6. 异常检测:
    • 根据LOF值,设定一个阈值来判断哪些点是异常点。通常,LOF值大于某个阈值的点被认为是异常点。

注意事项

  • k值的选择对LOF算法的结果有很大影响。k值太小可能导致误报(将正常点误判为异常点),k值太大可能导致漏报(漏掉一些真正的异常点)。
  • LOF算法对高维数据可能不太有效,因为高维空间中点的距离度量可能不太准确。
  • LOF算法的计算复杂度较高,对于大规模数据集可能需要较长的计算时间。

实际应用

LOF算法在欺诈检测、网络安全、工业监测等领域都有广泛的应用。例如,在信用卡欺诈检测中,LOF算法可以帮助识别出与正常交易模式显著不同的异常交易。在网络安全领域,LOF算法可以用于检测网络流量中的异常模式,从而识别出可能的网络攻击。

部分代码展示

function lof = LOF(dist,K)
m=size(dist,1);                 %m为对象数,dist为两两之间的距离
distance = zeros(m,m);
num = zeros(m,m);               %distance 和num用来记录排序后的顺序,和对象编号顺序
kdistance = zeros(m,1);         %计算每个对象的kdistance
count  = zeros(m,1);            %k邻域的对象数
reachdist = zeros(m,m);         %计算两两之间的reachable-distance
lrd = zeros(m,1);
lof = zeros(m,1);
%计算k-距离
for i=1:m[distance(i,:),num(i,:)]=sort(dist(i,:),'ascend');kdistance(i)=distance(i,K+1); count(i) = -1;%自己的距离为0,要去掉自己for j = 1:mif dist(i,j)<=kdistance(i)count(i) = count(i)+1;endend
end
for i = 1:mfor j=1:i-1reachdist(i,j) = max(dist(i,j),kdistance(j));reachdist(j,i) = reachdist(i,j);end

数据集格式为excel

结果图

这篇关于LOF(局部离群因子)异常值检测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/957592

相关文章

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

Python中异常类型ValueError使用方法与场景

《Python中异常类型ValueError使用方法与场景》:本文主要介绍Python中的ValueError异常类型,它在处理不合适的值时抛出,并提供如何有效使用ValueError的建议,文中... 目录前言什么是 ValueError?什么时候会用到 ValueError?场景 1: 转换数据类型场景

Spring中Bean有关NullPointerException异常的原因分析

《Spring中Bean有关NullPointerException异常的原因分析》在Spring中使用@Autowired注解注入的bean不能在静态上下文中访问,否则会导致NullPointerE... 目录Spring中Bean有关NullPointerException异常的原因问题描述解决方案总结

Python中的异步:async 和 await以及操作中的事件循环、回调和异常

《Python中的异步:async和await以及操作中的事件循环、回调和异常》在现代编程中,异步操作在处理I/O密集型任务时,可以显著提高程序的性能和响应速度,Python提供了asyn... 目录引言什么是异步操作?python 中的异步编程基础async 和 await 关键字asyncio 模块理论

详解Python中通用工具类与异常处理

《详解Python中通用工具类与异常处理》在Python开发中,编写可重用的工具类和通用的异常处理机制是提高代码质量和开发效率的关键,本文将介绍如何将特定的异常类改写为更通用的ValidationEx... 目录1. 通用异常类:ValidationException2. 通用工具类:Utils3. 示例文

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close