异常值处理

异常值处理是数据预处理中的一个重要步骤,随着大数据时代的到来,异常值处理也越来越重要。本文主要总结了一些常用的判断异常值的方法。
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
end

2、箱线图法
简单箱线图由五部分组成,分别是最小值、中位数、最大值和两个四分位数。第一四分位数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
end

3、格拉布斯检验法
格拉布斯检验法步骤
若检出了一个异常值,对除去已检出异常值后余下得数值继续用格拉布斯检验法检验,直到不能检出异常值为止。
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
%deltazz=delta';%n*m,样本与均值的差值的逆

%计算马氏距离
msjl=zeros(m,1);
for i=1:m
    msjl(i,1)=delta(i,:)/xfc*(delta(i,:)');
end
s=0;
for i=1:m
    if msjl(i,1)>2.18%置信度为0.975,自由度为8,对应的卡方值
        s=s+1;
    end
end

5、其他方法
可以参考文档《GBT 4883-2008 数据的统计处理和解释正态样本离群值的判断和处理》

注:部分内容参考了其他博主的文章,在此表示感谢!

  • 32
    点赞
  • 307
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值