当我们需要对多个指标进行拟合、作图、相干性分析等操作时,如果不同指标之间的量级差距过大会直接影响最终结果,因此我们需要对数据归一化处理,结束后还可以反归一化处理回到真实值。下面介绍matlab中的归一化函数mapminmax的实用操作:

mapminmax函数是按行操作的,输入数组如果是一维的,需要是行向量,如果是二维的,则按行归一化。

1. [Y,PS] = mapminmax(X,Ymin,Ymax)

Y是按行归一化后的数组;PS是训练样本的数据的映射,即PS中包含了训练数据的最大值和最小值,如果不需要反归一化或者对所有指标都采用相同的映射就可以不写;X是需要归一化的数据,注意考虑是否要转置;Ymin和Ymax是期望的每一行的最小值与最大值,不写默认是-1和1,一般都写成0和1。

clc;clear;
x=[2,3,4,5,6;7,8,9,10,11]
guiyix=mapminmax(x,0,1)

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

在用神经网络进行训练以及测试时,就用到了 ‘apply’ 。使用神经网络时,我们有训练测试两大样本集,上式的X是测试样本,对于测试样本来说,归一化应该和训练样本一致即最大值和最小值应该是训练集的最大值与最小值。假设y是测试样本,一共两个测试样本,则代码如下:

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

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

现在的结果是归一化之后算出来的,有时候我们需要对结果进行反归一化,回到原来的量级,就用到了 ‘reverse’:

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