数据预处理之基于预测的(线性,ARIMA)异常值检测#matlab

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

1.基于预测的异常值检测方法

基于预测的异常值检测方法,特别是结合线性回归和ARIMA(自回归积分滑动平均模型)模型,是数据分析中常用的技术。这些方法的核心思想是利用模型的预测能力来识别与预期值偏差较大的数据点,这些点往往被视为异常值。以下是对这两种方法及其异常值检测的详细介绍:

2.基于线性回归异常值检测

2.1 线性回归异常检测介绍

线性回归模型:线性回归是统计学中的一个基本模型,用于通过一系列自变量(特征)来预测一个因变量(目标变量)。在线性回归模型中,异常值通常被定义为那些与模型预测值存在显著偏差的数据点。

以标准化残差为依据衡量异常值:为了更好地评估残差的大小,可以将其标准化(即将残差除以其标准差)。标准化残差大于某个阈值(如2或3)的数据点被视为异常值。本文使用正态分布生成随机数据,所以阈值设为3。

2.2 线性回归案例代码

接下来利用matlab实例代码介绍:

% 清除命令窗口

clc

% 清除工作空间中的所有变量

clear

% 创建示例数据

% 设置随机数生成器的种子为'default',以便得到可重复的结果

rng('default');

% 定义数据点的数量

n = 100;

% 创建一个从1到n的列向量作为自变量x

x = (1:n)';

% 创建一个因变量y,它是自变量x的两倍加5,再加上一些随机的正态分布噪声

% randn(n,1)*10 生成一个n行1列的矩阵,其元素来自均值为0、标准差为10的正态分布

y = 2*x + 5 + randn(n,1)*10;

% 插入一些异常值

% 将第20、50、80个数据点的y值增加50,使其成为异常值

y([20, 50, 80]) = y([20, 50, 80]) + 50;

% 绘制原始数据

figure; % 创建一个新的图形窗口

scatter(x, y, 'filled'); % 使用散点图绘制原始数据,'filled'表示填充标记

title('原始数据'); % 设置图形标题

xlabel('X'); % 设置x轴标签

ylabel('Y'); % 设置y轴标签

% 线性回归模型拟合

% 使用fitlm函数拟合线性模型

mdl = fitlm(x, y);

% 预测值

% 使用predict函数基于拟合的模型预测y值

y_pred = predict(mdl, x);

% 计算残差

% 残差是观测值与预测值之间的差异

residuals = y - y_pred;

% 设置残差的阈值,超过该阈值的点被视为异常值

% 这里使用残差的3倍标准差作为阈值

threshold = 3 * std(residuals);

isAnomaly = abs(residuals) > threshold;% 0为正常值,1为异常值

% 创建一个逻辑数组isAnomaly,如果残差的绝对值大于阈值,则对应位置为true

% 绘制结果

figure; % 创建一个新的图形窗口

hold on; % 保持当前图形,以便在同一图形上添加更多内容

scatter(x, y, 'filled'); % 绘制原始数据

plot(x, y_pred, 'r', 'LineWidth', 1.5); % 绘制预测值的线,使用红色并设置线宽为2

scatter(x(isAnomaly), y(isAnomaly), 'filled', 'r');

% 绘制异常值,使用红色填充标记

title('线性回归异常值检测'); % 设置图形标题

xlabel('X'); % 设置x轴标签

ylabel('Y'); % 设置y轴标签

legend('原始数据', '预测值', '异常值'); % 添加图例

hold off; % 释放当前图形,以便可以添加新的图形

最终,matlab输出的异常点为20、50、80,线性回归异常值检测图如下:

3.基于ARIMA异常值检测

3.1 ARIMA异常检测介绍

ARIMA模型:ARIMA模型是一种用于时间序列数据预测的统计模型,它由自回归(AR)、差分(I)和移动平均(MA)三个部分组成。ARIMA模型通过捕捉时间序列数据中的自相关性和趋势来进行预测。

以预测误差为依据衡量异常值:使用ARIMA模型对时间序列数据进行预测后,可以计算每个数据点的预测误差(即实际值与预测值之差)。与线性回归类似,预测误差远大于其他数据点的预测误差的数据点被视为异常值。标准化残差大于某个阈值(如2或3)的数据点被视为异常值。本文使用正态分布生成随机数据,所以阈值设为3。

3.2 ARIMA案例代码

接下来利用matlab实例代码介绍:

clc

clear

% 创建时间序列数据

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

n = 100;

y = cumsum(randn(n,1)); % 随机游走时间序列

% 插入一些异常值

y([20, 50, 80]) = y([20, 50, 80]) + 20;

% 绘制原始数据

figure;

plot(y);

title('原始时间序列数据');

xlabel('时间');

ylabel('值');

% 自动选择最佳的 p, d, q 组合

bestAIC = Inf;

bestModel = [];

bestPQD = [0, 0, 0];

maxP = 3; % 最大 p 值

maxD = 2; % 最大 d 值

maxQ = 3; % 最大 q 值

for p = 0:maxP

for d = 0:maxD

for q = 0:maxQ

try

% 拟合 ARIMA 模型

mdl = arima(p, d, q);

fit = estimate(mdl, y, 'Display', 'off');

% 计算 AIC 值

aic = aicbic(logL, numParams);

if aic < bestAIC

bestAIC = aic;

bestModel = fit;

bestPQD = [p, d, q];

end

catch

% 如果模型估计失败,跳过

continue

end

end

end

end

fprintf('最佳 ARIMA 模型: p = %d, d = %d, q = %d\n', bestPQD(1), bestPQD(2), bestPQD(3));

% 拟合 ARIMA 模型

mdl = arima(bestPQD(1),bestPQD(2),bestPQD(3)); % 这里选择最优ARIMA(p,d,q) 模型

fit = estimate(mdl, y);

% 预测值

[y_pred, y_pred_mse] = forecast(fit, n, 'Y0', y);

% 计算残差

residuals = y - y_pred;

% 设置残差的阈值,超过该阈值的点被视为异常值

threshold = 3 * sqrt(y_pred_mse);

isAnomaly = abs(residuals) > threshold;

% 绘制结果

figure;

hold on;

plot(y, 'b'); % 原始数据

plot(y_pred, 'r', 'LineWidth', 1.5); % 预测值

plot(find(isAnomaly), y(isAnomaly), 'r*', 'MarkerSize', 5); % 异常值

title('ARIMA 异常值检测');

xlabel('时间');

ylabel('值');

legend('原始数据', '预测值', '异常值');

hold off;

最终,matlab输出的异常点为20、50、80,ARIMA异常值检测图如下:

其中,ARIMA(0,0,0)模型参数如下图,但是实际情况中p=d=q=0一般是不存在的,此处是作者随机生成的正态数据的结果。

4.4 基于预测的优缺点

优点:

简单易懂:线性回归模型基于简单的数学公式,易于理解和实现。

可解释性强:模型的参数(系数)具有明确的物理含义,能够清晰地解释自变量对因变量的影响程度。

计算效率高:线性回归算法的计算量较小,适用于大规模数据集的训练和预测。

缺点:

对非线性关系拟合能力有限:线性回归模型只能捕捉变量之间的线性关系,对于非线性关系的数据拟合效果较差。

对异常值敏感:由于最小二乘法的目标是最小化误差平方和,线性回归模型对异常值(离群点)非常敏感,一个异常值可能会对模型的结果产生较大的影响。

对多重共线性敏感:当自变量之间存在高度相关性(多重共线性)时,线性回归模型的参数估计可能不准确,模型的表现可能不稳定。

基于预测的异常值检测具有其独特的优缺点,以下是详细的介绍:

优点

广泛适用性:这种方法不依赖于大量的先验知识,适用于各种数据类型。无论是数值型数据、时间序列数据还是其他复杂类型的数据,只要能够建立相应的预测模型,就可以进行异常值检测。

高准确性:基于机器学习的预测方法,如使用ARIMA模型或深度学习模型,能够更好地挖掘数据的内在特征,提高异常值检测的准确性。这些方法通过学习和训练大量数据,能够识别出复杂模式中的异常点。

缺点

误报和漏报:在某些情况下,基于预测的方法可能会出现误报(将正常数据误判为异常)或漏报(未能检测出真正的异常数据)。这可能是由于模型的预测误差、数据噪声或异常值的复杂性导致的。

计算复杂性和资源需求:某些基于预测的方法,尤其是基于机器学习的方法,需要大量的计算复杂性和计算资源来进行训练和预测。这可能会增加实施成本和时间成本。

对高维数据的挑战:对于高维数据,基于距离和密度的方法可能会出现空间分布稀疏等问题,导致异常值检测的准确性下降。

模型选择和参数调整:选择合适的预测模型和调整模型的参数是一个挑战。不同的数据和问题可能需要不同的模型和参数设置,这需要一定的专业知识和经验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/349250.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jenkins For Windows编译构建C#项目环境搭建(完整版)

安装Jenkins 下载Windows安装包 官方下载地址 选择稳定版&#xff0c;这里下载的是最新版&#xff0c;如需下载指定版本点击 以前的发行版 配置java环境 下载 java jdk 17 jdk17官方下载链接 这里下载的是msi版本的安装包 安装jdk17 双击运行安装包&#xff0c;一直下…

VS2022 使用C++访问 mariadb 数据库

首先,下载 MariaDB Connector/C++ 库 MariaDB Products & Tools Downloads | MariaDB 第二步,安装后 第三步,写代码 #include <iostream> #include <cstring> #include <memory> #include <windows.h>#include <mariadb/conncpp.hpp>…

RocketMq使用简单案例

1. 在pom.xml中添加rocketmq依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.3</version> </dependency> 注意&#xff1a;rocketmq的版本需要…

开源VisualFbeditor中文版,vb7 IDE,VB6升级64位跨平台开发安卓APP,Linux程序

吴涛老矣&#xff0c;社区苦无64位易语言&#xff0c;用注入DLL增强菜单&#xff0c;做成VS一样的界面 终归是治标不治本&#xff0c;一来会报毒&#xff0c;二来闭源20年没更新了 开源的VB7&#xff0c;欢迎易语言的铁粉进群&#xff1a;1032313876 【Freebasic编程语言】编绎…

预告|博睿数据将受邀出席GOPS全球运维大会北京站!

GOPS全球运维大会作为国内外运维领域最具影响力的技术盛会之一&#xff0c;旨在汇聚全球运维精英&#xff0c;分享运维领域的前沿技术、实践经验与创新理念。6月28日&#xff0c;博睿数据&#xff08;bonree.com&#xff0c;股票代码688229&#xff09;将受邀出席第二十三届 GO…

React 18

创建 React 18 脚手架项目 全局安装 create-react-app npm install -g create-react-app yarn global add create-react-app . 确认是否已安装 create-react-app npm list -g create-react-app yarn global list | grep create-react-app . 如果安装失败 有时&#xff0…

动作识别综合指南

本文将概述当前动作识别&#xff08;action recognition&#xff09;的方法和途径。 为了展示动作识别任务的复杂性&#xff0c;我想举这个例子&#xff1a; 你能明白我在这里做什么吗&#xff1f;我想不能。至少你不会确定答案。我正在钻孔。 你能弄清楚我接下来要做什么吗&…

RabbitMQ实践——配置Prometheus和Grafana报表

大纲 启用rabbitmq_prometheus插件安装启动Prometheus创建用户下载并解压修改配置启动 安装启动grafana安装启动配置数据源 在《RabbitMQ实践——在Ubuntu上安装并启用管理后台》中我们已经安装成功RabbitMQ及其管理后台。在此基础上&#xff0c;我们将打通它和Prometheus、Gra…

【npm】console工具(含胶囊,表格,gif图片)

这是一款控制台花样输出工具 相对丰富的输出方式 文本输出属性值输出胶囊样式输出表格输出图片输出&#xff08;含动图&#xff09; 安装 npm install v_aot引用 import v_aot from "v_aot";字段说明 字段类型属性字符串值字符串类型default 、 primary 、 suc…

Zabbix 7.0 新增功能亮点(二)——history.push API方法

Zabbix7.0LTS一经发布便吸引了众多运维小伙伴的关注&#xff0c;乐维社区forum.lwops.cn也伴随着不少小伙伴的热议与探讨&#xff0c;话不多说&#xff0c;抓紧上车。 前面我们介绍了zabbix 7.0 新增功能亮点&#xff08;一&#xff09;——T参数&#xff0c;本篇将向大家介绍z…

Three.js的渲染器:WebGLRenderer、CSS3DRenderer、SVGRenderer

我们都晓得渲染器是负责将场景中的3D对象转换为2D图像&#xff0c;然后显示在屏幕上&#xff0c;three.js内置了多种渲染器&#xff0c;来应对不同的和需求&#xff0c;贝格前端工场老司机&#xff0c;简要和大家分享下。 一、渲染器的定义和作用 在Three.js中&#xff0c;渲…

2024热门骨传导耳机购买推荐!精选五款好用不贵!

对于很多喜欢运动健身的小伙伴&#xff0c;在现在市面上这么多种类耳机的选择上&#xff0c;对于我来说的话还是很推荐大家去选择骨传导运动耳机的&#xff0c;相较于普通的入耳式蓝牙耳机&#xff0c;骨传导耳机是通过振动来传输声音的&#xff0c;而入耳式耳机则是通过空气传…

多款可观测产品全面升级丨阿里云云原生 5 月产品月报

云原生月度动态 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》&#xff0c;从趋势热点、产品新功能、服务客户、开源与开发者动态等方面&#xff0c;为企业提供数字化的路径与指南。 趋势热点 &#x1f947; 阿里云云原生产品负责人李国强&#xff1a;推进可…

NestJS学习笔记

一、安装NestJS CLI工具 环境检查 //查看node版本 node -v//查看npm版本 npm -v 安装nest/cli 使用npm全局安装nestjs/cli npm i -g nestjs/cli 查看nest版本 nest -v 结果如图&#xff1a; 创建nest项目 //命令行创建nest项目 nest new 【项目名】 VScode扩展下载 1、…

deepin V23 RC2 正式发布!

deepin 是一款基于 Linux 的开源桌面操作系统&#xff0c;今天 deepin V23 RC2 正式发布&#xff0c;欢迎体验与反馈&#xff01;感谢每一位 deepiner 提供想法与建议&#xff0c;让我们一起为打造美观易用、安全可靠的开源操作系统而努力&#xff01; 【功能新增与优化】 新增…

VBA基础知识

运算符 &#xff1a; 不等于 : <> 文本连接符号 & 方法&#xff1a;Offset&#xff08;行&#xff0c;列&#xff09; &&#xff1a;这是字符串连接运算符&#xff0c;用于将两个字符串或表达式连接成一个字符串。 VBA&#xff1a;Debug.Print&#xff08…

WordPress、Typecho 站点如何让 CloudFlare 缓存加速

众所周知 WordPress、Typecho 都是著名动态博客站点(一个最简单的判断依据就是都要依赖结合数据库),这类站点在 CDN 缓存上都有一个致命的缓存弊端就是动静态请求的区分,理论上要让 CDN 绕过所有的动态请求,缓存所有的静态请求,否则就会造成前端登录和非登录状态的混乱,…

flask基础3-蓝图-cookie-钩函数-flask上下文-异常处理

目录 一&#xff1a;蓝图 1.蓝图介绍 2.使用步骤 3.蓝图中的静态资源和模板 二.cookie和session 1.cookie 2.flask中操作cookie 3.session 4.session操作步骤 三.请求钩子 四.flask上下文 1.介绍 2.请求上下文&#xff1a; 3.应用上下文 3.g对象 五&#xff1a;…

计算机视觉基础课程知识点总结

图像滤波 相关: 核与图像同向应用&#xff0c;不翻转。 卷积: 核在应用前翻转&#xff0c;广泛用于信号处理和深度学习&#xff08;现在常说的二维卷积就是相关&#xff09;。 内积: 向量化的点积操作&#xff0c;是相关和卷积的一部分。 模板匹配&#xff1a;通过在图像中…

docker一些常用命令以及镜像构建完后部署到K8s上

docker一些常用命令以及镜像构建完后部署到K8s上 1.创建文件夹2.删除文件3.复制现有文件内容到新建文件4.打开某个文件5.查看文件列表6.解压文件&#xff08;tar格式&#xff09;7.解压镜像8.查看镜像9.删除镜像10.查看容器11.删除容器12.停止运行容器13.构建镜像14.启动容器15…