MATLAB使用统计法卡方分布表剔除异常数据处理
的有关信息介绍如下:对于从工业或者其他场合获取的数据表格,一般需要进行数据预处理才能够作为有价值的数据供分析和研究使用,下面分享给大家一种“MATLAB使用统计法卡方分布表剔除异常数据处理”方法,帮助大家进行数据清洗和处理。
使用xlsread读入样本数据 。
A12=xlsread('样本数据.xlsx','sheet1');
检查是否读入。
赋值和计算需要进行数据处理的数据行数。
程序:
HanData1=A12(:,[1:3]);
x1=(1:length(HanData1))';
handle_x1=x1; % length(HanData)为行数
n1=size(x1,1); % n=size(x,1)为行数
计算。
然后对数据归一化处理,计算协方差矩阵,对每列归一化后的数据求均值。
程序:
for i=1:size(HanData1,2) % size(HanData,2)为列数
guiHanData1(:,i)=(HanData1(:,i)-mean(HanData1(:,i)))/std(HanData1(:,i)); % 对数据归一化处理
S1=cov(guiHanData1); % 计算协方差矩阵
mHanData1(:,i)=mean(guiHanData1(:,i)); % 对每列归一化后的数据求均值
end
运行结果。
然后计算每行数据的卡方分布因子。
MATLAB程序如下:
m1=zeros(n1,1);
for i=1:n1
m1(i)=(guiHanData1(i,:)-mHanData1)*inv(S1)*(guiHanData1(i,:)-mHanData1)'; % 计算每行数据的卡方分布因子
end
运行后结果如下图。
索引卡方分布因子大于预设卡方分布因子大于10的行标,预设值越大则删除的数据越少,可查看卡方分布表。
程序:
out1=find(m1>10);
计算结果。
取出卡方分布因子大于预设卡方分布因子大于10的所在行的数据保存至outData,即将要剔除的数据。
outData1=HanData1(out1,:);
运行。
剔除卡方分布因子大于预设卡方分布因子大于10的所在行的数据。
HanData1(out1,:)=[];
handle_x1(out1,:)=[];
运行结果如下。
将数据处理的效果用图形显示出来。
MATLAB程序如下:
%画图
figure('NumberTitle', 'off', 'Name', '数据处理');
subplot(2,2,1);
plot(handle_x1,HanData1(:,3),'o',x1(out1),outData1,'ro','LineWidth',2.5);
% hold on
% plot(x(out),outData,'ro');
grid on
xlabel('自变量');
ylabel('因变量');
legend('正常值','异常值')
title('样本数据处理');
%****************************************************************
运行后图形效果如下。
完整的“MATLAB使用统计法卡方分布表剔除异常数据处理”程序代码如下:
A12=xlsread('样本数据.xlsx','sheet1'); %读入样本数据
%*******剔除不正常数据***************************************
HanData1=A12(:,[1:3]);
x1=(1:length(HanData1))';handle_x1=x1; % length(HanData)为行数
n1=size(x1,1); % n=size(x,1)为行数
for i=1:size(HanData1,2) % size(HanData,2)为列数
guiHanData1(:,i)=(HanData1(:,i)-mean(HanData1(:,i)))/std(HanData1(:,i)); % 对数据归一化处理
S1=cov(guiHanData1); % 计算协方差矩阵
mHanData1(:,i)=mean(guiHanData1(:,i)); % 对每列归一化后的数据求均值
end
m1=zeros(n1,1);
for i=1:n1
m1(i)=(guiHanData1(i,:)-mHanData1)*inv(S1)*(guiHanData1(i,:)-mHanData1)';
% 计算每行数据的卡方分布因子
end
out1=find(m1>10);
% 索引卡方分布因子大于预设卡方分布因子大于10的行标,预设值越大则删除的数据越少,可查看卡方分布表
outData1=HanData1(out1,:);
% 取出卡方分布因子大于预设卡方分布因子大于10的所在行的数据保存至outData,即将要剔除的数据
HanData1(out1,:)=[]; handle_x1(out1,:)=[];
% 剔除卡方分布因子大于预设卡方分布因子大于10的所在行的数据
%画图
figure('NumberTitle', 'off', 'Name', '数据处理');
subplot(2,2,1);
plot(handle_x1,HanData1(:,3),'o',x1(out1),outData1,'ro','LineWidth',2.5);
% hold on
% plot(x(out),outData,'ro');
grid on
xlabel('自变量');
ylabel('因变量');
legend('正常值','异常值')
title('样本数据处理');
%****************************************************************