MATLAB数据预处理-归一化-mapminmax

转自https://blog.csdn.net/hqh45/article/details/42965481

在新版MATLAB中,使用BP神经网络的premnmx函数会出现Warning: PREMNMX is an obsolete function. 的提示

在新版MATLAB中,把旧函数premnmx 、postmnmx 、tramnmx换成新函数mapminmax

对于模式识别或者其他统计学来说,训练数据和测试数据应该是每一列是一个样本,每一行是多个样本的同一维,即对于一个M*N的矩阵来说,样本的维度是M,一共N列N个样本。

其主要调用形式有:

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)

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

x=[2,3,4,5,6;7,8,9,10,11];
mapminmax(x,0,1)
fp.ymin=0;
fp.ymax=1;
mapminmax(x,fp) 

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

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)

但对于训练样本和测试样本,一般是将两者合起来一起归一化,例如要将train,test一起归一化:

[mtrain,ntrain]=size(train);
[mtest,ntest]=size(test);
dataset=[train;test];
[dataset_scale,ps]=mapminmax(dataset',0,1);
train=dataset_scale(1:mtrain,:);
test=dataset_scale((mtrain+1):(mtrain+mtest),:);

 

对于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);
y=mapminmax('reverse',yy,ps)

 

posted @ 2018-07-07 10:45  Horse-Ma  阅读(10207)  评论(0编辑  收藏  举报