完整版Matlab学习系列012数据预处理1剔除异常值及平滑处理.docx
《完整版Matlab学习系列012数据预处理1剔除异常值及平滑处理.docx》由会员分享,可在线阅读,更多相关《完整版Matlab学习系列012数据预处理1剔除异常值及平滑处理.docx(14页珍藏版)》请在冰豆网上搜索。
完整版Matlab学习系列012数据预处理1剔除异常值及平滑处理
012.数据预处理
(1)――剔除异常值及平滑处理
测量数据在其采集与传输过程中,由于环境干扰或人为因素有可能造成个别数据不切合实际或丢失,这种数据称为异常值。
为了恢复数据的客观真实性以便将来得到更好的分析结果,有必要先对原始数据
(1)剔除异常值;
另外,无论是人工观测的数据还是由数据采集系统获取的数据,都不可避免叠加上“噪声”干扰(反映在曲线图形上就是一些“毛刺和尖峰”)。
为了提高数据的质量,必须对数据进行
(2)平滑处理(去噪声干扰);
(一)剔除异常值。
注:
若是有空缺值,或导入Matlab数据显示为“NaN”(非数),需要①忽略整条空缺值数据,或者②填上空缺值。
填空缺值的方法,通常有两种:
A.使用样本平均值填充;B.使用判定树或贝叶斯分类等方法推导最可能的值填充(略)。
一、基本思想:
规定一个置信水平,确定一个置信限度,凡是超过该限度的误差,就认为它是异常值,从而予以剔除
二、常用方法:
拉依达方法、肖维勒方法、一阶差分法。
注意:
这些方法都是假设数据依正态分布为前提的。
1.拉依达方法(非等置信概率)
如果某测量值与平均值之差大于标准偏差的三倍,则予以剔除。
XX3Sx
丄
nn2
其中,X-xi为样本均值,Sx亠(xX)2为样本的标准偏nJxn1i/"
差。
注:
适合大样本数据,建议测量次数》50次。
代码实例(略)。
2.肖维勒方法(等置信概率)
在n次测量结果中,如果某误差可能出现的次数小于半次时,
就予以剔除。
这实质上是规定了置信概率为1-1/2n,根据这一置信概率,可计
算出肖维勒系数,也可从表中查出,当要求不很严格时,还可按下列
近似公式计算:
10.41n(n)
Tabl.肖维勒系数表
n
3
4
5
6
7
8
9
10
11
12
GJn
1.38
1.53
1.65
1.73
1.80
1.86
1.92
1.96
2.00
2.03
n
13
14
15
20
30
40
50
100
200
500
GJn
2.07
2.10
2.13
2.24
2.39
2.49
2.58
2.81
3.02
3.20
如果某测量值与平均值之差的绝对值大于标准偏差与肖维勒系
数之积,则该测量值被剔除
Sx
例1.利用肖维勒方法对下列数据的异常值(2.5000)进行剔除:
1.50341.50621.50341.50241.49852.50001.5007
1.50671.49931.4969
上述数据保存于文件erro.dat
代码:
x=load('error.dat');
n=length(x);
subplot(2,1,1);
plot(x,'o');
title('原始数据')
axis([0,n+1,min(x)-1,max(x)+1]);w=1+0.4*log(n);
yichang=abs(x-mean(x))>w*std(x);
%若用拉依达方法,把w改成3即可,但本组数据将不能成功剔除异常值。
x(yichang)=[];
saveerrornew.datx-ASCIIsubplot(2,1,2);
plot(x,'rs');
title('异常值剔除后数据');
axis([0,n+1,min(x)-1,max(x)+1]);
运行结果:
x=
1.5024
1.4985
2.5000
1.5007
1.5024
1.4985
1.5007
1.5067
1.50341.50621.5034
1.50671.49931.4969
y=
1.50341.50621.5034
1.49931.4969
原始数据
3.5Iiiir~
2.5-c
1.5-oo□ouooo
I-
[匚LiiIii_
‘0246810
3.一阶差分法(预估比较法)
用前两个测量值来预估新的测量值,然后用预估值与实际测量值
比较,若大于事先给定的允许差限值,则剔除该测量值
预估值
xnXn1(Xn1Xn2)
比较判别:
Xn?
nW
注:
该方法的特点是
(1)适合于实时数据采集与处理过程;
(2)精度除了与允许误差限的大小有关外,还与前两点测量值的
精确度有关;
(3)若被测物理量的变化规律不是单调递增或单调递减函数,这
一方法将在函数的拐点处产生较大的误差,严重时将无法使用。
(二)数据的平滑处理
对于一组测量数据(xi,yi)i=1,…”n不要直接就想着求出的拟合多项式的线性参数,而是要先平滑处理去掉“噪声”。
平滑处理在科学研究中广泛使用,它可以减少测量中统计误差带来的影响,尤其
被用于无法利用多次重复测量来得到其平均值的情况和当yi随xi
有徒然变化的那些测量段。
1.(2n+1点)单纯移动平均”平滑滤波
取出以yi为中心的前后各n个数据(yi-n,…,y-1,yi,…yi+n求
平均值代替yi,即
优点:
方法简单,计算方便。
缺点:
方法产生误差会造成信号失真;前后各n个数据无法平滑。
适用性:
适用于变化缓慢的数据。
注:
n越大平滑效果越好,但失真也越大。
例2.“9点单纯移动平均”平滑滤波
代码:
%建立“n点单纯移动平均”的滤波函数
%注意函数要单独保存为与函数名同名的.m文件
functionY=smooth_data(y,n)
m=length(y);
j=1;
fori=(n-1)/2+1:
(m-(n-1)/2)
p=i-(n-1)/2;
q=i+(n-1)/2;
Y(j)=sum(y(p:
q))/n;
j=j+1;
end
end
%主程序
clc
clear
t=-15:
0.5:
15;
n=length(t);
Y=5./(1+t.A2);%原始测试数据
y=Y+(0.5-rand(1,n));%给测试数据加上噪声干扰plot(1:
n,Y,1:
n,y,'-o',5:
n-4,y1,'-*');
legend('无噪声','含噪声','9点平滑后');
运行结果:
4JII||JI
'010203040506070
2.“加权移动平均”平滑滤波
加权的基本思想:
作平均的区间内中心处数据的权值最大,愈远离中心处的数据权值越小小。
这样就减小了对真实信号本身的平滑作用。
权重系数可以采用最小二乘原理,使平滑后的数据以最小均方差逼近原始数据。
即令
'2
min(y,kyik)
k
2
(yik
k2
2
(yik
k2
2
(%k
AAkAk2)0
A0AkA>k2)k0
A0AkA,k2)k20
归一系数
y-2
y-1
yo
y1
y2
y-2‘
35
31
9
-3
-5
3
y-1'
35
9
13
12
6
-5
yo'
35
-3
12
17
12
-3
y1'
35
-5
6
12
13
9
y2‘
35
3
-5
-3
9
31
k2
五点二次平滑权重系数表:
yo
1
35
3y2I2yi
17yo12yi3y2
3.用“smooth函数”平滑滤波
调用格式:
Z=smooth(Yspan,method)
说明:
乙平滑后的数据向量
Y:
被平滑的数据向量
span:
平滑点数,缺省为5点
method:
平滑方法,缺省为移动平滑,其它还有
‘moving'Movingaverage(default)单纯移动平均
‘lowess'Lowess(linearfit)线性加权平滑
‘loess'Loess(quadraticfit二次加权平滑
'sgolay'Savitzky-Golay
'rlowess'RobustLowess(linearfit)
'rloess'RobustLoess(quadraticfit)
例3.用matlab自带的平滑函数作平滑滤波实例。
代码:
t=-10:
0.5:
10;
n=length(t);
y=5./(1+t.A2);%原始测试数据
y1=y+0.5*(0.5-rand(1,n));%给测试数据加上噪声干扰
%调用多个滤波函数作滤波处理
y2=smooth(y1,3);y3=smooth(y1,9);
y4=smooth(y1,3,'lowess');y5=smooth(y1,9,'lowess');
y6=smooth(y1,3,'loess');y7=smooth(y1,9,'loess');
y8=smooth(y1,3,'rloess');y9=smooth(y1,9,'rloess');
figure
(1);%第一张图
subplot(3,2,1);
plot(t,y);axis([-1010-16]);gridon
title('无噪声信号');
subplot(3,2,2);
plot(t,y1,'-*');axis([-1010-16]);gridon
title('含噪声信号');subplot(3,2,3);
plot(t,y2,'-*');axis([-1010-16]);gridontitle('3点单纯移动平均');
subplot(3,2,4);
plot(t,y3,'-*');axis([-1010-16]);gridontitle('9点单纯移动平均');
subplot(3,2,5);
plot(t,y4,'-*');axis([-1010-16]);gridontitle('3点线性加权平滑');
subplot(3,2,6);
plot(t,y5,'-*');axis([-1010-16]);gridontitle('9点线性加权平滑');
figure
(2);%第二张图
subplot(3,2,1);
plot(t,y);axis([-1010-16]);gridontitle('无噪声信号');
subplot(3,2,2);
plot(t,y1,'-*');axis([-1010-16]);gridontitle('含噪声信号');
subplot(3,2,3);
plot(t,y6,'-*');axis([-1010-16]);gridontitle('3点二次加权平滑');
subplot(3,2,4);
plot(t,y7,'-*');axis([-1010-16]);gridontitle('9点二次加权平滑');
subplot(3,2,5);
plot(t,y8,'-*');axis([-1010-16]);gridontitle('3点rloess平滑');
subplot(3,2,6);
plot(t,y9,'-*');axis([-1010-1