统计分析——数据的预处理

来源:互联网 发布:独立域名 编辑:程序博客网 时间:2024/06/06 04:30

统计分析——数据的预处理

一. 数据的清洗
1. 数据清洗
A 异常值处理
I 删除
II 视为缺失值
III 平均值修正
IV 不处理
B 缺失值处理
I 删除
II 不处理
III 插补方法
a. 均值(mean)中位数(medium)众数(mode)
b. 使用固定值
c. 最近临插补:找与缺失样本临近样本
d. 回归方法:ployfit
e. 插值法:interp1函数,interp2函数,interp3函数,拉格朗日插值,牛顿插值
2. 数据的平滑处理
A smooth函数
B smoothts函数
C medfiltl函数
3. 数据的标准化变换
A 标准差标准化:

I
a. Z=zscore(X);
result: z=(X-mean(X))./std(X)
b. [Z,mu,sigma]=zscore(X);
mu=mean(X) sigma=std(X)
c. [Z,mu,sigma]=zscore(X,flag,dim);
i. flag=0 样本容量为n-1
flag=1 样本容量为n
ii. dim=1 列变换
dim=2 行变换
注:均值和标准差受离群值点的影响很大,经常用中位数M取代均值,其次用绝对值差取代标准差 (W是平均数或中位数)
B 极差归一化( )
I [R,xmin,xmax]=rescore(x,dim);
dim=1 列变换
dim=2 行变换
(代码见附录)
MATLAB主要的数据预处理函数
附录
一. 拉格朗日插值函数lagrange_interp()

function [ yi ] = lagrange_interp (X,Y,xi)n=length(X);       %得到已知数据长度m=length(xi);      %得到待插值数据长度yi=zeros(size(xi));for j=1:m          %待插值数据有m个,计算每个插值结果    for i=1:n       %已知的n个数据构造中间值temp=1;   %temp用于存储中间值        for k=1:n            if(i~=k)  %和自身标号相同的不相乘                temp=temp*(xi(j)-X(k))/(X(i)-X(k));            end        end        yi(j)=Y(i)*temp+yi(j);    endendend

二. 牛顿插值函数newton_interp()

function yi=newton_interp(X,Y,xi)syms t;             %定义自变量t,用于字符公式if(length(X)==length(Y))    n=length(X);    c(1:n)=0.0;else    disp('X和Y的维数不相等!');    return;endf=Y(1);             %f用来记录得到的牛顿插值公式的字符串表达式l=1;for i=1:n-1    y1=zeros(1,n-i);    for j=i+1:n        y1(j)=(Y(j)-Y(i))/(X(j)-X(i));    end    c(i)=y1(i+1);   %c记录差分    l=l*(t-X(i));    %l记录(x-x0)(x-x1)……的值     f=f+c(i)*l;     %累加得到差分公式    Y=y1;endf=simplify(f);       %简化得到的牛顿插值公式m=length(xi);       %开始输出for i=1:m    yi(i)=subs(f,'t',xi(i));   % 根据公式计算需要的值endyi=double(yi);     % 转换为数值型,为返回值end

三. 极差标准化程序rescore.m

function [R,xmin,xrange] = rscore(x,dim)%极差归一化变换%   R = rscore(X) 对X进行极差归一化变换,这里X可以是一个向量、矩阵或高维数组。%   若X是一个向量,返回变换后结果向量R = (X–min(X))./range(X);若X是一个矩阵,%   则用X的每一列的最小值和极差对该列进行极差归一化变换,返回变换后矩阵R;若X是%   一个高维数组,则沿X的首个非单一维方向计算最小值和极差,然后对X进行极差归一化%   变换,返回变换后高维数组R.  例如X是一个1×1×1×4的4维数组,由于X的前三维均%   为单一维,于是计算X的第4维方向上的最小值和极差,对X进行极差归一化变换,返回%   的R也是一个1×1×1×4的4维数组。%%   [R,xmin,xrange] = rscore(X) 还返回X的最小值xmin = min(X)和极差xrange = range(X).%%   [...] = rscore(X,dim) 用dim参数指定沿X的哪个维进行极差归一化变换,例如%   dim = 1,表示对X的各列进行极差归一化变换;dim = 2,表示对X的各行进行极差归一化变换。%%   请参考zscore, min 和 range 函数的用法.%   Copyright 2009 - 2010 xiezhh. %   $Revision: 1.0.0.0 $  $Date: 2009/12/2 15:58:36 $if isequal(x,[]), z = []; return; endif nargin < 2    % Figure out which dimension to work along.    dim = find(size(x) ~= 1, 1);    if isempty(dim), dim = 1; endend% Compute X's min and range, and standardize itxmin = min(x,[],dim);xrange = range(x,dim);xrange0 = xrange;xrange0(xrange0==0) = 1;R = bsxfun(@minus,x, xmin);R = bsxfun(@rdivide, R, xrange0);

参考文献
[1]MATLAB数据分析与数据挖掘实战
[2]MATLAB统计分析与应用40个案例分析

0 0