• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Matlab入门:实现简单的数据剔除

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

时间仓促,仅为了数学建模入门使用

代码简单描述:

随机生成一组数据

手动添加奇怪的数据值

使用数据判断对数据进行清洗

生成直方图、求平均值对处理前、处理后的数据进行对比

代码如下:

 1 >> aa=randn(1000,1)/10;
 2 >> aa(100)=aa(100)+3;
 3 >> aa(301)=aa(301)+5;
 4 >> aa(501)=aa(501)+7;
 5 >> aa(701)=aa(701)-14;
 6 >> plot(aa);
 7 >> hist(aa,100);
 8 >> a=mean(aa)
 9 
10 a =
11 
12    -0.0023
13 
14 >> c=std(aa)
15 
16 c =
17 
18     0.5318
19 
20 >> num=find(aa>(a+3*c)|aa<(a-3*c))
21 
22 num =
23 
24    100
25    301
26    501
27    701
28 
29 >> std(aa)
30 
31 ans =
32 
33     0.5318
34 
35 >> for i = 1:1000
36 if((aa(i)>(a+3*c)|aa(i)<(a-3*c)))
37 aa(i)=0;
38 else continue;
39 end
40 end
41 >> len=length(aa);
42 >> std(aa)
43 
44 ans =
45 
46     0.0996
47 
48 >> plot(aa);
49  
50 >> mean(aa)
51 
52 ans =
53 
54    -0.0033
55 
56 >> hist(aa,100);

删除重复的行

使用unique函数

 1 >> A=[1,2,3;4,5,6;3,5,7;1,2,3]
 2 
 3 A =
 4 
 5      1     2     3
 6      4     5     6
 7      3     5     7
 8      1     2     3
 9 
10 >> unique(A,\'rows\',\'stable\')
11 
12 ans =
13 
14      1     2     3
15      4     5     6
16      3     5     7

 


 

9/15更新

异常数据的处理

 

若确认数据在同一个样本当中,绝大部分数据应该在均值为4or5个标准偏差之内

对坏数据的处理

①个别处理

②按照一定百分比剔除最大与最小的一部分数据,exp(上下各剔除百分之2.5%),坏数据去除以后对统计量重新计算

 

这里是对②实现的简单例子


使用trimmean函数对坏数据进行剔除
调用格式
m=trimmean(X,percent)
忽略数据上下各percent/2 %后的均值

 

可以使用下列m函数去除坏数据

% trim.c 文件
function data=trim(data,outval)
%去除坏数据 包括NaN、Inf和异常大小数据

if nargin<2
    outval=4;
end
outliers = (isnan(data)|abs(data)==inf);
[n,m]=size(data);
if m>1,
    data(any(outliers\'),:)=[];
else
    data(find(outliers\'),:)=[];
end
[n,m]=size(data);
mu=mean(data);
sigma=std(data);
outliers=(abs(data-ones(n,1)*mu)>outval*ones(n,1)*sigma);
if m>1,
    data(any(outliers\'),:)=[];
else
    data(find(outliers\'),:)=[];
end

 

下面是函数调用实例

>> clear all;
>> c=[nan;ones(100,1);inf;100] %含有nan inf和一个不正常大的数100

c =

   NaN
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
   Inf
   100

>> mean(c),trimmean(c,5)

ans =

   NaN


ans =

     1

>> c=trim(c)

c =

     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1

>> 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
接触Matlab10年后的一个总结,随时使用Matlab要掌握的一些要点发布时间:2022-07-18
下一篇:
Matlab 数据补全方法发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap