数据清洗!即插即用!异常值、缺失值、离群值处理、残差分析和孤立森林异常检测,确保数据清洗的全面性和准确性,MATLAB程序!

适用平台:Matlab2021版及以上

数据清洗是数据处理和分析中的一个关键步骤,特别是对于像风电场这样的大型、复杂数据集。清洗数据的目的是为了确保数据的准确性、一致性和完整性,从而提高数据分析的质量和可信度,是深度学习训练和预测前的重要步骤。

  • 在实际应用中,数据可能会因为传感器故障、通信错误或人为输入错误而产生异常值或噪声数据。这些异常值会严重影响后续的数据分析和模型训练。清洗数据可以确保数据的准确性,减少噪声对分析结果的干扰。

  • 缺失值是数据集中常见的问题。如果不处理缺失值,可能会导致分析结果不准确或模型训练失败。通过填补缺失值,可以提高数据的完整性,确保每个数据点都有意义。

手动填充空值、删除异常值的方法需要耗费大量的时间,且准确性得不到保障,本程序以风电场数据为例,进行数据清洗和处理,包括异常值处理、缺失值处理、离群值处理、以及相关性分析,并将清洗后的数据保存到新的Excel文件中。

①异常值处理:

研究现状:

异常值检测与处理是数据预处理中的重要环节。常见方法包括统计方法(如Z-score、IQR)、机器学习方法(如支持向量机)、以及深度学习方法(如自编码器)。统计方法利用数据的统计特性(如均值、方差、中位数)进行异常值检测,适用于简单数据集。

本文方法:

  • 结合统计方法(删除全相同元素行)和基于RANSAC的鲁棒拟合方法,有效处理不同类型的异常值。

  • RANSAC方法能够在噪声和异常值存在的情况下进行可靠的模型拟合,适用于存在显著异常值的数据集。

②缺失值处理

研究现状:

①缺失值处理方法多种多样,包括删除法、填补法(如均值填补、中位数填补、最近邻填补)、插值法(如线性插值、样条插值)、以及模型预测法(如多重插补、矩阵分解)。

②简单填补方法(如均值填补)易于实现,但可能引入偏差。

③插值法利用数据的连续性进行填补,适用于时间序列数据。

④模型预测法利用机器学习模型对缺失值进行预测,精度高,但计算复杂。

本文方法:

  • 使用前向填补法简单有效,适用于时间序列数据,能够保留数据的趋势和模式。

  • 前向填补法计算成本低,适合于大规模数据集的快速处理。

③离群值处理

研究现状:

①离群值检测方法包括基于统计的检测方法(如Grubbs' Test、Tukey's Fences)、基于聚类的方法(如K-means、DBSCAN)、基于机器学习的方法(如孤立森林、LOF)。

②统计方法适用于简单数据集,易于实现。

③聚类方法通过分析数据点的密度或距离来识别离群值,适用于聚类明显的数据集。

④机器学习方法能够处理复杂数据分布和高维数据,具有较高的检测准确性。

本文方法:

  • 结合移动窗口统计特性(滑动窗线性插值)和基于残差的离群值检测方法(孤立森林),处理离群值的鲁棒性强。

  • 使用中位数绝对离差(MAD)方法进行滑动窗线性插值,能够平滑数据波动,适用于时间序列数据。

  • 残差分析结合孤立森林,能够有效识别复杂数据分布中的离群值。

④ 创新点总结

  • 多方法结合,处理全面

    • 本程序结合了统计方法、拟合方法、插值方法和机器学习方法,能够全面、有效地处理异常值、缺失值和离群值。

    • 通过删除全相同元素行、前向填补缺失值、滑动窗线性插值和RANSAC拟合等多种方法,保证数据处理的全面性和鲁棒性。

  • 高效计算,适用性广

    • 采用简单有效的前向填补和滑动窗线性插值方法,计算成本低,适用于大规模数据集的快速处理。

    • RANSAC拟合和孤立森林方法适用于复杂数据分布,能够处理高维数据和噪声数据。

  • 可视化展示,直观评估

    • 通过绘制处理前后的相关性热力图和特征对比图,直观展示数据处理效果,便于评估和验证处理方法的有效性。

    • 可视化展示有助于理解数据特征和变化,增强数据处理的透明度和解释性。

程序结果

各特征变量清洗前后的数据对比:

部分程序

%% 相关性极差的也定义为异常值
% 处理:采用Ransac拟合后替代  公众号:《创新优化及预测代码》
x = res_new(:, 1);   % 提取第1列数据作为自变量
y = res_new(:, end); % 提取最后一列数据作为因变量
xyPoints = [x y];    % 组合自变量和因变量% RANSAC直线拟合
sampleSize = 30;   % 每次采样的点数
maxDistance = 400; % 内点到模型的最大距离
fitLineFcn = @(xyPoints) polyfit(xyPoints(:, 1), xyPoints(:, 2), 1);                           % 拟合函数,采用polyfit进行线性拟合
evalLineFcn = @(model, xyPoints) sum((y - polyval(model, x)).^2, 2);                           % 距离估算函数,计算点到拟合线的距离
[modelRANSAC, inlierIdx] = ransac(xyPoints, fitLineFcn, evalLineFcn, sampleSize, maxDistance); % 使用RANSAC算法拟合直线,并提取内点的索引
modelInliers = polyfit(xyPoints(inlierIdx, 1), xyPoints(inlierIdx, 2), 1);                     % 对内点进行最小二乘法线性拟合figure;
plot(xyPoints(inlierIdx, 1), xyPoints(inlierIdx, 2), 'p',MarkerSize=10);    % 绘制内点
hold on;
plot(xyPoints(~inlierIdx, 1), xyPoints(~inlierIdx, 2), 'r.',MarkerSize=10); % 绘制外点
hold on;inlierPts = xyPoints(inlierIdx, :);                        % 提取内点数据
x2 = linspace(min(inlierPts(:, 1)), max(inlierPts(:, 1))); % 生成内点自变量范围的等间距点
y2 = polyval(modelInliers, x2);                            % 计算内点拟合直线上的值
plot(x2, y2, 'g-',LineWidth=2);                            % 绘制RANSAC直线拟合结果
hold off;title('最小二乘直线拟合 与 RANSAC直线拟合 对比');                    % 设置图标题
xlabel(variableNames{1});                                            % 设置X轴标签
ylabel(variableNames{end});                                          % 设置Y轴标签
legend('内点', '噪声点', 'RANSAC直线拟合', 'Location', 'NorthWest'); % 添加图例 % 公众号:《创新优化及预测代码》%% 残差-孤立森林  公众号:《创新优化及预测代码》
% 计算Ransac理论值
T_linear = (modelRANSAC(1) * res_new(:, 1) + modelRANSAC(2));       % 计算RANSAC理论直线值
for i = 1:size(T_linear, 1)if T_linear(i, end) < 0T_linear(i, end) = 0;                                       % 将理论值小于0的部分设为0end
end
residual_power = abs(res_new(:, end) - T_linear); % 计算实际值与理论值的残差% 孤立森林判断异常值
[error_pos2] = iso_forest([res_new(:, :) residual_power]); % 使用孤立森林算法检测异常值 % 公众号:《创新优化及预测代码》%% 替代异常值
for i = 1:size(error_pos2, 2)res_new(error_pos2{i, 1}, end) = T_linear(error_pos2{i, 1}); % 将检测出的异常值替换为理论值
end
res_new(~inlierIdx, end) = T_linear(~inlierIdx);                 % 将RANSAC检测出的异常值也替换为理论值

部分内容源自网络,侵权联系删除!

欢迎感兴趣的小伙伴关注并私信获取完整版代码,小编会不定期更新高质量的学习资料、文章和程序代码,为您的科研加油助力!

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

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

相关文章

BUCK电路布线规则、EMI分析

电源系列文章目录 本系列文章为博主在学习工作过程中的心得记录&#xff0c;欢迎评论区交流讨论。 BUCK电路工作原理、参数计算及工作模式分析BUCK电路布线规则、EMI分析电源电路中肖特基、续流二极管要求 目录 电源系列文章目录一、PCB布线规则1、输入电感与肖特基摆放2、输…

云原生容器技术入门:Docker、K8s技术的基本原理和用途

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《未来已来&#xff1a;云原生之旅》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、容器技术概述 1、什么是容器技术 2、容器技术的历史与发展 3…

QT事件处理系统之二:窗口部件的事件拦截,以及事件的传递顺序

1、案例说明 在父窗口中为selfLineEdit窗口安装事件过滤器,这样我们可以在父窗口中首先拦截来自于selfLineEdit本身产生的事件,并且决定该事件最终是否继续传递到selfLineEdit窗口本身。 2、关键代码 selfLineEdit.cpp #include "selfLineEdit.h" #include &l…

【树形dp 换根法 BFS】2581. 统计可能的树根数目

本文涉及知识点 CBFS算法 动态规划汇总 图论知识汇总 树形dp 换根法 BFS LeetCode 2581. 统计可能的树根数目 Alice 有一棵 n 个节点的树&#xff0c;节点编号为 0 到 n - 1 。树用一个长度为 n - 1 的二维整数数组 edges 表示&#xff0c;其中 edges[i] [ai, bi] &#xf…

将知乎专栏文章转换为 Markdown 文件保存到本地

一、参考内容 参考知乎文章代码 | 将知乎专栏文章转换为 Markdown 文件保存到本地&#xff0c;利用代码为GitHub&#xff1a;https://github.com/chenluda/zhihu-download。 二、步骤 1.首先安装包flask、flask-cors、markdownify 2. 运行app.py 3.在浏览器中打开链接&…

嵌入式学习——数据结构(哈希、排序)——day50

1. 查找二叉树、搜索二叉树、平衡二叉树 2. 哈希表——人的身份证——哈希函数 3. 哈希冲突、哈希矛盾 4. 哈希代码 4.1 创建哈希表 4.2 5. 算法设计 5.1 正确性 5.2 可读性&#xff08;高内聚、低耦合&#xff09; 5.3 健壮性 5.4 高效率&#xff08;时间复杂度&am…

Visual Studio开发环境搭建

原文&#xff1a;https://blog.c12th.cn/archives/25.html Visual Studio开发环境搭建 测试&#xff1a;笔记本原装操作系统&#xff1a;Windows 10 家庭中文版 资源分享链接&#xff1a;提取码&#xff1a;qbt2 注意事项&#xff1a;注意查看本地硬盘是否够用&#xff0c;建议…

2. 数据结构分析即索引库的crud

1. 数据库脚本 DROP TABLE IF EXISTS tb_hotel; CREATE TABLE tb_hotel (id bigint(0) NOT NULL,name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT COMMENT 酒店名称,address varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_090…

运营管理和服务支撑阶段

我前面的所有设备都部署好了&#xff0c;现在就需要运营管理和服务支撑 遇到问题了迅速解决&#xff0c;避免风险扩大 我们也可以给客户提供上面的服务&#xff0c;提高客户的预警能力&#xff0c;安全风险处理能力 我们不仅提供设备&#xff0c;还提供服务 我们公司成立了安…

【算法专题--链表】两两交换链表中的节点 -- 高频面试题(图文详解,小白一看就懂!!!)

目录 一、前言 二、题目描述 三、解题方法 ⭐双指针 -- 采用哨兵位头节点 &#x1f95d; 什么是哨兵位头节点&#xff1f; &#x1f34d; 解题思路 &#x1f34d; 案例图解 四、总结与提炼 五、共勉 一、前言 两两交换链表中的节点 这道题&#xff0c;可以说…

K8S - 在集群内反向代理外部资源 - headless service 的使用

在上一篇文章中 K8S - 理解ClusterIP - 集群内部service之间的反向代理和loadbalancer 介绍了 ClusterIP 的主要作用 : 在k8s 集群内部 代理 内部的多实例 service 但是ClusterIP 还有1个变种 -> 无头服务 (headless service) 它用于代理集群外部的 ip资源 当然代理外部资…

AI应用带你玩系列之SadTalker

前段时间我刷微信视频&#xff0c;我无意间点开了一个&#xff0c;画面缓缓展开&#xff0c;是一幅精致的水墨画&#xff0c;画中人物皆是古代装束&#xff0c;衣袂飘飘&#xff0c;仿佛能闻到墨香。然而&#xff0c;这宁静的画面突然被打破了&#xff0c;画中的人物开始动了起…

初识 SpringMVC,运行配置第一个Spring MVC 程序

1. 初识 SpringMVC&#xff0c;运行配置第一个Spring MVC 程序 文章目录 1. 初识 SpringMVC&#xff0c;运行配置第一个Spring MVC 程序1.1 什么是 MVC 2. Spring MVC 概述2.1 Spring MVC 的作用&#xff1a; 3. 运行配置第一个 Spring MVC 程序3.1 第一步&#xff1a;创建Mave…

鸿蒙开发系统基础能力:【@ohos.faultLogger (故障日志获取)】

故障日志获取 说明&#xff1a; 本模块首批接口从API version 8开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import faultLogger from ohos.faultLoggerFaultType 故障类型枚举。 系统能力&#xff1a; 以下各项对应的系统能力…

利用MSSQL模拟提权

点击星标&#xff0c;即时接收最新推文 本文选自《内网安全攻防&#xff1a;红队之路》 扫描二维码五折购书 利用MSSQL模拟提权 在MS SQL数据库&#xff0c;可以使用EXECUTE AS语句&#xff0c;以其他用户的上下文执行SQL查询。需要注意的是只有明确授予模拟&#xff08;Impers…

vuex的深入学习[基于vuex3]----篇(二)

store对象的创建 store的传递图 创建语句索引 创建vuex的语句为new Vuex.Store({…})Vuex的入口文件是index.js,store是index.js导出的store类store类是store.js文件中定义的。 Store的构造函数constructor 判断vuex是否被注入&#xff0c;就是将vue挂载在window对象上&am…

Java | Leetcode Java题解之第169题多数元素

题目&#xff1a; 题解&#xff1a; class Solution {public int majorityElement(int[] nums) {int count 0;Integer candidate null;for (int num : nums) {if (count 0) {candidate num;}count (num candidate) ? 1 : -1;}return candidate;} }

TLS握手中的RTT

文章目录 TLS 1.2 握手过程中的 RTT 次数TLS 1.3 1-RTT 初次TLS1.3 0-RTT 握手过程总结 TLS 1.2 握手过程中的 RTT 次数 TLS 1.2 握手通常需要2 RTT 才能完成。具体步骤如下&#xff1a; 第一次 RTT&#xff1a; 客户端发送 ClientHello&#xff1a;客户端生成一个随机数&…

26.3 Django路由层

1. 路由作用 在Django中, URL配置(通常称为URLconf)是定义网站结构的基础, 它充当着Django所支撑网站的目录. URLconf是一个映射表, 用于将URL模式(patterns)映射到Python的视图函数或类视图上. 这种映射机制是Django处理HTTP请求的基础, 它决定了当客户端发送请求时, Django如…

消息认证码解析

1. 什么是消息认证码 消息认证码(Message Authentication Code)是一种确认完整性并进行认证的技术&#xff0c;取三个单词的首字母&#xff0c;简称为MAC。 消息认证码的输入包括任意长度的消息和一个发送者与接收者之间共享的密钥&#xff0c;它可以输出固定长度的数据&#x…