数学建模 数据预处理

数据标准化处理

zscore标准化

在matlab中,我们可以直接利用zscore(x)这个函数来将数据标准化。
其核心思想是:
z=(x-mean(x))./std(x)

  • 当x是一个向量时,采用z方法得到的仍然是一个向量。
  • 当x是一个矩阵的时候,采用zscore方法仍然是一个矩阵,在计算的过程中使用的均值及标准差使用的是每一列的均值与方差。

mapminmax标准化

对每行最小最大标准化
调用格式

  1. [Y,PS] = mapminmax(X,YMIN,YMAX)

  2. [Y,PS] = mapminmax(X,FP)

  3. Y = mapminmax(‘apply’,X,PS)

  4. X = mapminmax(‘reverse’,Y,PS)

  5. dx_dy = mapminmax(‘dx_dy’,X,Y,PS)

对于1和2的调用形式来说,X是预处理的数据,Ymin和Ymax是期望的每一行的最小值与最大值,FP是一个结构体成员主要是FP.ymin, FP.ymax.这个结构体就可以代替Ymin和Ymax,1和2的处理效果一样,只不过参数的带入形式不同。

x = 2:10;
[y,ps] = mapminmax(x,0,1);
y1 = mapminmax(x,ps);

而对于3式,在模式识别或者统计学里,PS是训练样本的数据的映射,即PS中包含了训练数据的最大值和最小值,这里的X是测试样本,对于测试样本来说,预处理应该和训练样本一致即最大值和最小值应该是训练集的最大值与最小值。假设y是测试样本,一共两个测试样本,则代码如下:

x=[2,3,4,5,6;7,8,9,10,11];
y=[2,3;4,5];
[xx,ps]=mapminmax(x,0,1);
mapminmax('apply',y,ps)

对于4式,是预处理之后的数据进行反转得到原始数据。

x=[2,3,4,5,6;7,8,9,10,11];
y=[2,3;4,5];
[xx,ps]=mapminmax(x,0,1);
yy=mapminmax('apply',y,ps);
mapminmax('reverse',yy,ps)

mapstd 标准化

Process matrices by mapping each row’s means to 0 and deviations to 1
主要调用形式有:

  1. [Y,PS] = mapstd(X,ymean,ystd)

  2. [Y,PS] = mapstd(X,FP)

  3. Y = mapstd(‘apply’,X,PS)

  4. X = mapstd(‘reverse’,Y,PS)

  5. dx_dy = mapstd(‘dx_dy’,X,Y,PS)
    用法与mapminmaxx相似,可以参考mapminmax.

划分训练集和测试集

function [train,test] = split_train_test(X,test_ratio)
% x是原数据集,分出训练样本和测试样本
ndata = size(X,1);        
%ndata样本数
num_test=ndata*test_ratio;
R = randperm(ndata);         
%1到n这些数随机打乱得到的一个随机数字序列作为索引
test = X(R(1:num_test),:);  
R(1:num_test) = [];
train = X(R,:);   

缺失值检测及处理

缺失值检测

clearvars
X= [0.7883 nan 0.8111 0.6587 0.6543 0.8259 0.8486 0.6834 0.8495 0.7846
    0.7633 0.7287 0.7629 0.8552 0.7564 0.7455 0.7800 0.9490 0.8918 0.8954
    0.4745 0.5126 0.8810 0.8903 0.8288 0.7850 0.8032 0.8862 0.3987 0.3970
    0.8246 0.7603 0.6888 0.8977 0.7926 0.7856 0.6509 0.8902 0.6799 0.9877
    0.8791 0.8736 0.8183 0.9446 0.9202 0.9263 0.9185 0.9505 0.8620 0.8873
    0.9538 0.9257 0.9285 0.9434 0.9154 0.8871 0.9357 0.8760 0.9579 0.9741
    0.8785 0.8542 0.8537 0.9027 0.8729 0.8485 0.8473 0.9044 0.8866 0.9035
    0.6305 0.6187 0.6313 0.7415 0.6398 0.6142 0.5734 0.8980 0.6186 0.7382
    0.8928 nan 0.5608 0.8419 0.8464 0.7616 0.8234 0.6384 0.9604 0.8514];
nanvalue = find(isnan(X));% nanvalue为缺失数据的总下标
[m,n] = find(isnan(X));% m为缺失数据所在行,n为缺失数据所在列
X(isnan(X)) = 0;% 缺失值置0,也可以用X(m,n)=0

删除处理

  • 删除样本
  • 删除变量
  • 改变权重:当删除缺失数据会改变数据结构时,通过对完整数据按照不同的权重进行加权,可以降低删除缺失数据带来的偏差

填充处理

  • 0填充
  • 平均数填充
    使用每个变量的均值去填补该变量的缺失值。最不为方法学者推荐。
  • 回归填充
    根据变量间的相关,利用其他变量的信息通过建立回归方式去推算缺失值。
  • 聚类填充
  • 插值填充
  • 平均同质项目法
    假设个体在某一因子的某些条目上存在缺失值,通过平均其他几个条目得分来填补缺失值。比如某个样本缺失物理成绩,根据观察化学成绩和数学成绩与物理成绩接近,可以用两者平均值来替代。

异常值(离群点)检测及处理

异常值检测

属性异常值检测

对于特定的属性,即一组向量中的异常值检测。

  • 三倍标准差法则检测
    当数据服从正态分布:
    根据正态分布的定义可知,距离平均值3δ之外的概率为 P(|x-μ|>3δ) <= 0.003 ,这属于极小概率事件,在默认情况下我们可以认定,距离超过平均值3δ的样本是不存在的。 因此,当样本距离平均值大于3δ,则认定该样本为异常值。
    当数据不服从正态分布:
    当数据不服从正态分布,可以通过远离平均距离多少倍的标准差来判定,多少倍的取值需要根据经验和实际情况来决定。
  • 中位数(基于箱线图的检测)
  • 回归检测

样本异常值检测

筛选出多维度样本的异常值。

  • 基于模型的技术
    首先建立一个数据模型,异常是那些同模型不能完美拟合的对象;如果模型是簇的集合,则异常是不显著属于任何簇的对象;在使用回归模型时,异常是相对远离预测值的对象。
  • 基于邻近度的技术:通常可以在对象之间定义邻近性度量,异常对象是那些远离其他对象的对象。
  • 基于密度的技术:仅当一个点的局部密度显著低于它的大部分近邻时才将其分类为离群点。
  • 基于聚类

异常值处理

你可能感兴趣的:(Matlab)