%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
%% 读取数据
res = xlsread('Wind_farm.xlsx');
res = res(5e3:1e4,:);
res(:,10)=[];
%% 异常值处理
% 一行元素全部相同为-99 直接删除
same_pos = [];
for i = 1:size(res,1)
if all(res(i,1:end-1) == res(i,1))
same_pos = [same_pos;i];
end
end
res(same_pos,:) =[];
%% 缺失值处理 采用前面的值替代
missing = isnan(res);
for i=1:size(res,1)
for j=1:size(res,2)
if missing(i,j) == 1
res(i,j) = res(i-1,j);
end
end
end
%% 离群值处理
[B,TF,L,U,C] = filloutliers(res(:,:),"clip","movmedian",15);%滑动窗线性插值
res_new = B;
%% 绘制处理前特征与标签相关性热力图
R1 = corrcoef(res_new(:,[1,3,5,7,11])); %风速与功率相关性强
figure;
pcolor(R1);
shading flat; % 去掉网格线
colorbar; % 显示颜色条
% 美化图形
title('处理前相关性热力图');
xlabel('变量X');
ylabel('变量Y');
axis equal tight; % 等比例轴,紧凑范围
%% 相关性极差的也定义为异常值
% 处理:采用Ransac拟合后替代
x = res_new(:,7);
y = res_new(:,end);
xyPoints = [x y];
% RANSAC直线拟合
sampleSize = 25; % 每次采样的点数,直线为2
maxDistance = 350; % 内点到模型的最大距离
fitLineFcn = @(xyPoints) polyfit(xyPoints(:,1),xyPoints(:,2),1); % 拟合方式采用 polyfit,这里不可以用x,y替换xyPoints(:,1),xyPoints(:,2)
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),'.'); % 内点
hold on;
plot(xyPoints(~inlierIdx,1),xyPoints(~inlierIdx,2),'ro'); % 外点
hold on;
inlierPts = xyPoints(inlierIdx,:);
x2 = linspace(min(inlierPts(:,1)),max(inlierPts(:,1)));
y2 = polyval(modelInliers,x2);
plot(x2, y2, 'g-'); % RANSAC直线拟合结果
hold off;
title('最小二乘直线拟合 与 RANSAC直线拟合 对比');
xlabel('X(m)');
ylabel('Y(m)');
zlabel('Z(m)');
legend('内点','噪声点','RANSAC直线拟合','Location','NorthWest');
%% 残差-孤立森林
% 计算Ransac理论值
T_linear = (modelRANSAC(1)*res_new(:,7)+modelRANSAC(2));
for i = 1:size(T_linear,1)
if T_linear(i,end)<0
T_linear(i,end)=0;
end
end
residual_power = abs(res_new(:,end) - T_linear);
% plot(T_linear)
% 孤立森林判断异常值
[error_pos2] = iso_forest([res_new(:,[1,3,5,7]) 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);
%% 绘制处理后特征与标签相关性热力图
R2 = corrcoef(res_new(:,[1,3,5,7,11]));
figure;
pcolor(R2);
shading flat; % 去掉网格线
colorbar; % 显示颜色条
% 美化图形
title('处理后相关性热力图');
xlabel('变量X');
ylabel('变量Y');
axis equal tight; % 等比例轴,紧凑范围
%% 保存清洗好的数据
save res res_new;
风机SCADA数据清洗(缺失值填补+异常值处理) MATALB代码
需积分: 0 154 浏览量
更新于2024-07-16
2
收藏 7.97MB RAR 举报
结合RANSAC算法、孤立森林算法以及滑动窗线性插值,清洗后保持原数据的特征和随机性。异常值处理采用Ransac法拟合并结合孤立森林算法检测替代,离群值采用滑动窗线性插值,清洗后数据效果提升,相关性进一步增强,但不失原数据的特征及随机性。
首先使用RANSAC算法对数据进行初步拟合和筛选,去除一些明显的异常值;然后使用孤立森林算法对剩余的数据进行进一步检测,找出那些与大多数数据点分布不一致的离群值。对于检测到的离群值或缺失值,可以使用滑动窗线性插值进行填充。
是我不懂
- 粉丝: 0
- 资源: 1
最新资源
- GEMM优化代码实现1-4第二种PPT
- 基于springboot的个性化推荐影院源码(java毕业设计完整源码).zip
- 基于springboot的个性化旅游推荐系统的设计与实现源码(java毕业设计完整源码+LW).zip
- 基于springboot的个性化智能学习系统源码(java毕业设计完整源码).zip
- 基于springboot的中医院问诊系统的设计与实现源码(java毕业设计完整源码).zip
- 基于springboot的中小学生成长档案管理系统的设计与实现源码(java毕业设计完整源码+LW).zip
- 机械设计钢板矫直机sw21全套设计资料100%好用.zip.zip
- 基于springboot的中药材管理系统源码(java毕业设计完整源码).zip
- 基于springboot的二手图书交易系统源码(java毕业设计完整源码).zip
- 基于springboot的二手物品交易系统的设计与实现源码(java毕业设计完整源码).zip
- 基于springboot的亚运会志愿者管理系统的设计与实现源码(java毕业设计完整源码).zip
- 基于springboot的交通感知与车路协同系统源码(java毕业设计完整源码).zip
- 机械设计光通信产品精密双芯片粘贴机proe4.0可编辑全套设计资料100%好用.zip.zip
- 基于springboot的人事档案管理系统的设计与实现源码(java毕业设计完整源码).zip
- 机械设计后轮盖自动堆叠设备(sw16可编辑+工程图)全套设计资料100%好用.zip.zip
- 基于springboot的人工智能领域复合型人才校企协同培养管理系统源码(java毕业设计完整源码+LW).zip