数据预处理之基于密度的LOF异常值检测#matlab

基于统计的异常值检测可见上篇文章。以下介绍基于密度的LOF异常值检测:

5.LOF介绍

基于密度的异常值检测方法LOF(Local Outlier Factor,局部离群因子)是一种经典的异常检测算法,它通过计算数据点相对于其局部邻域的密度偏差来识别异常值。

算法概述:全称:Local Outlier Factor;提出者:Markus M. Breunig等人;提出时间:2000年

核心思想:通过衡量每个数据点与其邻近点之间的密度关系来确定离群值。

6.LOF工作原理

LOF算法的工作原理可以概括为以下几个步骤:

(1)计算局部密度:对于每个数据点,计算它与其k个最近邻居之间的局部密度。局部密度表示了一个数据点周围的数据点数量,密度越高表示该点越接近正常区域。

(2)计算可达距离:计算每个数据点与其k个最近邻居之间的可达距离。可达距离是一个数据点与其邻近点之间的距离,考虑了局部密度的影响。

(3)计算局部离群因子(LOF):LOF是一个数据点的局部异常因子,表示该点的局部密度与其邻近点的局部密度之比。LOF越大,表示该点越可能是离群值。

(4)判定离群值:根据计算得到的LOF值,可以根据事先定义的阈值来判定数据点是否为离群值。

7.LOF适用背景

LOF算法在多个领域都有广泛的应用,包括但不限于:

欺诈检测:信用卡、电话卡欺诈使用等。工业检测:计算机网络的非法入侵等。活动监控:实时手机活跃度,实现检测移动手机诈骗行为等。网络性能:计算机网络性能检测等。生态监测:生态系统失调、异常自然气候等的发现等。公共服务:公共卫生中的异常疾病爆发等。

8.LOF代码

作者自编的LOF代码可通过关注 公众号:早星数学建模 后,在公众号后台回复LOF获得。接下来利用matlab代码介绍:

%% 5 基于密度LOF异常值检测

%LOF值可以衡量每个数据点的异常程度

% 清除工作区中的所有变量和命令行窗口

clear all;

clc;

% 创建随机数据,或者直接导入自己的数据替代data

rng('default'); % 固定随机数生成器种子

data = [randn(100,2) * 0.75 + ones(100,2); ... 

randn(20,2) * 0.5 - ones(20,2)]; % 生成100个正态分布的点,缩放和偏移% 生成20个正态分布的点,缩放和偏移

%此处的data可以不是二维,1-n维都可以

% 绘制数据

figure;

scatter(data(:,1), data(:,2), 'filled'); % 绘制二维数据的散点图

title('原始数据'); % 图表标题

xlabel('X'); % X轴标签

ylabel('Y'); % Y轴标签

% 调用LOF异常值检测函数

[isAnomaly, anomalyIndices, bestK] = LOF(data);% 调用作者编写的LOF函数

% 输出最佳的k值

fprintf('最佳的k值是: %d\n', bestK);

% 绘制数据和异常点

figure;

scatter(data(:,1), data(:,2), 'filled'); % 绘制所有数据点的散点图

hold on;

scatter(data(isAnomaly,1), data(isAnomaly,2), 'filled', 'r'); % 用红色标记异常点

title('LOF 异常点检测'); % 图表标题

xlabel('X'); % X轴标签

ylabel('Y'); % Y轴标签

legend('正常点', '异常点'); % 图例

hold off; % 关闭图

最终,matlab输出data的异常值位置为1  6  7   50   58  70  75  77  79  96  106  118。异常值检测的散点图如下:

9.LOF优缺点

优点:

适用性广:LOF算法可以应用于各种类型的数据集,并且对于不同密度区域内的异常点具有较好的鲁棒性。

量化异常程度:LOF算法不仅可以判断数据点是否为异常值,还可以给出每个数据点的异常程度,便于进一步的分析和处理。

可视化:LOF算法的结果可以通过可视化的方式呈现,帮助用户更直观地理解数据中的异常模式。

缺点:

选择合适的k值:k值的选择对LOF算法的性能有很大影响,需要根据实际数据集进行调整,在作者提供的LOF代码中可以自动输出最优k,即代码中的bestk。

处理大规模数据集:对于大规模数据集,LOF算法的计算复杂度较高,可能需要采用一些优化策略来提高效率。

解释性:虽然LOF算法可以给出每个数据点的异常程度,但对于异常值的具体原因可能需要进一步的分析和解释。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值