多语言展示
当前在线:742今日阅读:103今日分享:49

MATLAB使用统计法卡方分布表剔除异常数据处理

对于从工业或者其他场合获取的数据表格,一般需要进行数据预处理才能够作为有价值的数据供分析和研究使用,下面分享给大家一种“MATLAB使用统计法卡方分布表剔除异常数据处理”方法,帮助大家进行数据清洗和处理。
工具/原料
1

电脑

2

MATLAB

3

样本数据表格

方法/步骤
1

使用xlsread读入样本数据 。A12=xlsread('样本数据.xlsx','sheet1');检查是否读入。

2

赋值和计算需要进行数据处理的数据行数。程序:HanData1=A12(:,[1:3]);             x1=(1:length(HanData1))';handle_x1=x1;                                     % length(HanData)为行数n1=size(x1,1);                                       % n=size(x,1)为行数计算。

3

然后对数据归一化处理,计算协方差矩阵,对每列归一化后的数据求均值。程序: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运行结果。

4

然后计算每行数据的卡方分布因子。MATLAB程序如下:m1=zeros(n1,1);for i=1:n1    m1(i)=(guiHanData1(i,:)-mHanData1)*inv(S1)*(guiHanData1(i,:)-mHanData1)';    % 计算每行数据的卡方分布因子end运行后结果如下图。

5

索引卡方分布因子大于预设卡方分布因子大于10的行标,预设值越大则删除的数据越少,可查看卡方分布表。程序:out1=find(m1>10);          计算结果。

6

取出卡方分布因子大于预设卡方分布因子大于10的所在行的数据保存至outData,即将要剔除的数据。outData1=HanData1(out1,:);    运行。

7

剔除卡方分布因子大于预设卡方分布因子大于10的所在行的数据。HanData1(out1,:)=[];handle_x1(out1,:)=[];     运行结果如下。

8

将数据处理的效果用图形显示出来。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 onxlabel('自变量');ylabel('因变量');legend('正常值','异常值')title('样本数据处理');%**************************************************************** 运行后图形效果如下。

9

完整的“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));     % 对每列归一化后的数据求均值endm1=zeros(n1,1);for i=1:n1    m1(i)=(guiHanData1(i,:)-mHanData1)*inv(S1)*(guiHanData1(i,:)-mHanData1)';    % 计算每行数据的卡方分布因子endout1=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 onxlabel('自变量');ylabel('因变量');legend('正常值','异常值')title('样本数据处理');%****************************************************************

注意事项

卡方分布因子的确定查看卡方分布表

推荐信息