Matlab笔记——数据预处理——剔除异常值及平滑处理
012. 数据预处理(1)——剔除异常值及平滑处理 测量数据在其采集与传输过程中, 由于环境干扰或人为因素有可 能造成个别数据不切合实际或丢失, 这种数据称为异常值。为了恢复 数据的客观真实性以便将来得到更好的分析结果, 有必要先对原始数 据(1)剔除异常值; 另外,无论是人工观测的数据还是由数据采集系统获取的数据, 都不可避免叠加上“噪声”干扰(反映在曲线图形上就是一些“毛刺 和尖峰” ) 。为了提高数据的质量,必须对数据进行(2)平滑处理(去 噪声干扰) ; (一)剔除异常值。 注:若是有空缺值,或导入 Matlab 数据显示为“NaN” (非数) , 需要①忽略整条空缺值数据,或者②填上空缺值。 填空缺值的方法,通常有两种:A. 使用样本平均值填充;B. 使 用判定树或贝叶斯分类等方法推导最可能的值填充(略) 。 一、基本思想: 规定一个置信水平, 确定一个置信限度, 凡是超过该限度的误差, 就认为它是异常值,从而予以剔除。 二、常用方法:拉依达方法、肖维勒方法、一阶差分法。 注意:这些方法都是假设数据依正态分布为前提的。 1.拉依达方法(非等置信概率) 如果某测量值与平均值之差大于标准偏差的三倍, 则予以剔 除。 xix 3Sx 其中,x 准偏差。 注:适合大样本数据,建议测量次数≥50 次。 代码实例(略) 。 2.肖维勒方法(等置信概率) 在 n 次测量结果中,如果某误差可能出现的次数小于半次时, 就予以剔除。 这实质上是规定了置信概率为 1-1/2n,根据这一置信概率,可 计算出肖维勒系数,也可从表中查出,当要求不很严格时,还可按下 列近似公式计算: 11 为样本均值,S (x i x)2 为样本的标x x in i1 n1 i1 nn 1 2 n 10.4ln(n) Tab1. 肖维勒系数表 1 n n ωω n n 1 12 2 0000 1 3456789 0 5 00 11 5 1 0 2 0 3 0 4 0 5n n 3 ωω 1 4 n n 如果某测量值与平均值之差的绝对值大于标准偏差与肖维勒系 数之积,则该测量值被剔除。 xix nSx 例1.利用肖维勒方法对下列数据的异常值 ()进行剔除: 上述数据保存于文件 代码: x=load( );x=load( ); n=length(x);n=length(x); subplot(2,1,1);subplot(2,1,1); plot(x, o );plot(x, o ); title( title( 原始数据原始数据 ) ) axis([0,n+1,min(x)-1,max(x)+1]);axis([0,n+1,min(x)-1,max(x)+1]); w=1+*log(n);w=1+*log(n); yichang = abs(x-mean(x)) w*std(x);yichang = abs(x-mean(x)) w*std(x); % % 若用拉依达方法,把若用拉依达方法,把 w w 改成改成 3 3 即可,但本组数据将不能成功剔除异常值。即可,但本组数据将不能成功剔除异常值。 x(yichang)=[];x(yichang)=[]; save x -ASCIIsave x -ASCII subplot(2,1,2);subplot(2,1,2); plot(x, rs );plot(x, rs ); title( title( 异常值剔除后数据异常值剔除后数据 ); ); axis([0,n+1,min(x)-1,max(x)+1]);axis([0,n+1,min(x)-1,max(x)+1]); 运行结果:x = y = 3.一阶差分法(预估比较法) 用前两个测量值来预估新的测量值, 然后用预估值与实际测量值 比较,若大于事先给定的允许差限值,则剔除该测量值。 预估值 ˆ n x n1 (x n1 x n2 ) x 比较判别: ˆ n Wx n x 注:该方法的特点是 (1)适合于实时数据采集与处理过程; (2)精度除了与允许误差限的大小有关外,还与前两点测量值 的精确度有关; (3)若被测物理量的变化规律不是单调递增或单调递减函数, 这一方法将在函数的拐点处产生较大的误差,严重时将无法使用。 (二)数据的平滑处理 对于一组测量数据(xi,yi) i=1,…,n,不要直接就想着求出 的拟合多项式的线性参数,而是要先平滑处理去掉“噪声” 。平滑处 理在科学研究中广泛使用,它可以减少测量中统计误差带来的影响, 尤其被用于无法利用多次重复测量来得到其平均值的情况和当yi随 xi 有徒然变化的那些测量段。 1.“ (2n+1 点)单纯移动平均”平滑滤波 取 出 以yi为 中 心 的 前 后 各n个 数 据 (yi-n, …,yi-1,yi,…yi+n)求平均值代替 yi,即 yi n1 y i12n1 k n 优点:方法简单,计算方便。 缺点: 方法产生误差会造成信号失真; 前后各 n 个数据无法平滑。 适用性:适用于变化缓慢的数据。 注:n 越大平滑效果越好,但失真也越大。 例2.“9 点单纯移动平均”平滑滤波 代码: % % 建立“建立“n n 点单纯移动平均”的滤波函数点单纯移动平均”的滤波函数 % % 注意函数要单独保存为与函数名同名的注意函数要单独保存为与函数名同名的.m.m 文件文件 function Y=smooth_data(y,n)function Y=smooth_data(y,n) m=length(y);m=length(y); j=1;j=1; for i=(n-1)/2+1:(m-(n-1)/2)for i=(n-1)/2+1:(m-(n-1)/2) p=i-(n-1)/2; p=i-(n-1)/2; q=i+(n-1)/2; q=i+(n-1)/2; Y(j)=sum(y(p:q))/n;Y(j)=sum(y(p:q))/n; j=j+1; j=j+1; endend endend % % 主程序主程序 clcclc clearclear t=-15::15;t=-15::15; n=length(t);n=length(t); Y=5./(1+t.^2); %Y=5./(1+t.^2); % 原始测试数据原始测试数据 y=Y+(1,n)); %y=Y+(1,n)); % 给测试数据加上噪声干扰给测试数据加上噪声干扰 y1=smooth_data(y,9); %y1=smooth_data(y,9); % 调用函数作调用函数作 9 9 点滤波处理点滤波处理 plot(1:n,Y,1:n,y, -o ,5:n-4,y1, -* );plot(1:n,Y,1:n,y, -o ,5:n-4,y1, -* ); legend( legend( 无噪声无噪声 , , 含噪声含噪声 , 9 , 9 点平滑后点平滑后 ); ); 运行结果: 2.“加权移动平均”平滑滤波 加权的基本思想: 作平均的区间内中心处数据的权值最大,愈远离中心处 的数据权值越小小。这样就减小了对真实信号本身