异常值处理是数据预处理中的一个重要步骤,随着大数据时代的到来,异常值处理也越来越重要。本文主要总结了一些常用的判断异常值的方法。 1、3-σ准则 要求数据服从正态分布,认为大于μ+3σ或小于μ—3σ的实验数据值作为异常值,其中μ为数据均值,σ为数据标准差 matlab代码示例
%异常值处理 %采用3西格玛方法 clc; clear all; data0=xlsread('C:\Users\Administrator\Desktop\数据预处理\data1703.xlsx','b2:i266283');%读取原始数据 %变量1的异常值处理 bl1=data0(1:237,1); [m,n]=size(bl1); ave=mean(bl1);%均值 sigma=sqrt((bl1'-ave)*(bl1-ave)/m);%标准差 fangcha=sigma^2;%方差 jicha=max(bl1)-min(bl1);%极差 sx=ave+3*sigma; xx=ave-3*sigma; ycz=[]; zcz=[]; s=1; s1=1; for i=1:m if bl1(i,1)<xx||bl1(i,1)>sx ycz(s,1)=bl1(i,1); ycz(s,2)=i; s=s+1; end if bl1(i,1)<sx&&bl1(i,1)>xx zcz(s1,1)=bl1(i,1); zcz(s1,2)=i; s1=s1+1; end end2、箱线图法 简单箱线图由五部分组成,分别是最小值、中位数、最大值和两个四分位数。第一四分位数Q1:又称“下四分位数”,等于该样本中所有数值由小到大排列后第25%的数字。中位数F:又称第二四分位数(Q2),又称“中位数”,等于该样本中所有数值由小到大排列后第50%的数字。第三四分位数:又称“上四分位数”,等于该样本中所有数值由小到大排列后第75%的数字。 异常值被定义为小于Q1-1.5IQR或大于Q3+1.5IQR的值。虽然这种标准有点任意性,但它来源于经验判断,经验表明它在处理需要特别注意的数据方面表现不错。 matlab代码示例
%异常值处理 %采用箱线法 clc; clear all; data0=xlsread('C:\Users\Administrator\Desktop\数据预处理\data1703.xlsx','b2:i266283');%读取原始数据 [m,n]=size(data0); w1=round(m/4); %第一四分位位置, %m1=m/2%中位数位置, w3=round(3*m/4);%第三四分位位置 %变量1的异常值处理 bl1=data0(:,1); [a1,b1]=sort(bl1);%[a,b]=sort(x);是从小到大排列,a是排序后结果,b是a结果中各元素的原始位置。 q11=a1(w1,1); %第一四分位数 q13=a1(w3,1); %第三四分位数 qr1=q13-q11; %四分位距 sx1=q13+1.5*qr1; %上限 xx1=q11-1.5*qr1; %下限 ycz1=[];%异常值矩阵 s1=1; for i=1:m if bl1(i,1)>sx1||bl1(i,1)<xx1 ycz1(s1,1)=bl1(i,1); ycz1(s1,2)=i; s1=s1+1; end end3、格拉布斯检验法 若检出了一个异常值,对除去已检出异常值后余下得数值继续用格拉布斯检验法检验,直到不能检出异常值为止。 4、马氏距离法 下图是方法步骤 下图是卡方分布表 matlab代码示例
%异常值处理 %采用马氏距离法 clc; clear all; data0=xlsread('C:\Users\Administrator\Desktop\数据预处理\data1703.xlsx','b2:i241');%读取原始数据 ave=mean(data0);%如果A是一个矩阵,mean(A)将中的各列视为向量,把矩阵中的每列看成一个向量,返回一个包含每一列所有元素的平均值的行向量。 [m,n]=size(data0); %计算矩阵协方差 xfc=cov(data0); %xfcni=inv(xfc);%计算矩阵协方差的逆 delta=zeros(m,n); for i=1:m delta(i,:)=data0(i,:)-ave(1,:);%计算样本与均值的差值 end