Matlab入門:實現簡單的數據剔除

時間倉促,僅爲了數學建模入門使用函數

代碼簡單描述:spa

隨機生成一組數據code

手動添加奇怪的數據值blog

使用數據判斷對數據進行清洗數學

生成直方圖、求平均值對處理前、處理後的數據進行對比io

代碼以下:入門

 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);

刪除重複的行table

使用unique函數function

 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更新class

異常數據的處理

 

若確認數據在同一個樣本當中,絕大部分數據應該在均值爲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

>>
相關文章
相關標籤/搜索