数学建模异常值处理

%计算矩阵行列数(r:行数,c:列数)
[r,c] = size(S);
temp = isnan(S);%将矩阵转化为0、1矩阵来查找缺项
for i = 1:c
    for j = 1:r
         Location_1 = find(temp ==1);%输出NaN数据的位置
    end
end
F = fillmissing(S,'movmedian',10);%利用窗口长度为10的移动均值填充缺失数据
E = F(:,2:98); %去除时间变量
%%%判断负荷数据是否符合正态分布
%a = F(:,2);
%[h,p]=lillietest(a)    %判断是否正态。h=0
%返回值h为假设,只有0和1两种情况,h=0假设符合正态分布,h=1假设不符合正态分布
%返回值p为方差概率,也可以说事情的发生概率,p<0.05(显著性水平通常取0.05,还有0.025和0.01三种情况)为不可能事件,拒绝;p>0.05,接受
%D= reshape(E,97,1075);%将矩阵行列变换
%检测并替换数据中的离群值
for k = 1:97
    C1{k}={};
    x = 1:1075;
    A = E(:,k);
    t = days(0:length(x)-1);%
    [B,TF,U,L,C] = filloutliers(A,'clip','movmedian',days(4),'SamplePoints',t);%矩阵B为去除异常数据之后的矩阵
%     plot(t,A,t,B,'o')%L、U 和 C 参数表示离群值检测方法使用的下阈值、上阈值和中心值。
%     legend('Original Data','Filled Data')
    L(TF);%TF是一个逻辑数组,指示 A 中的离群值的位置
    [q_i,w_i] = find(TF ==1);%查看异常数据位置
    C1{k} = B;
end
New_data =cell2mat(C1);%元胞数组转换
xlswrite('New_data',New_data);%将输出数据导入excel
%进行归一化处理
label = I(:,end);%类别标签
stdData = zscore(I(:,1:41));%标准化
New_data1 = mapminmax(stdData,0,1);%归一化
xlswrite('New_data1',New_data1);%将归一化的数据导入excel
    原文作者:马小玖
    原文地址: https://blog.csdn.net/weixin_42160583/article/details/106769222
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞