Matlab 归一化函数premnmx [-1,1]
Matlab 归一化函数premnmx
(1)基本算法:函数目的是把数据处理成[-1,1]之间,算法是:
如a=[2,4,3,5],那么计算过程就是:
2*(2-2)/(5-2)-1=-1;
2*(4-2)/(5-2)-1=1/3=0.6666;
2*(3-2)/(5-2)-1=-0.6666
2*(5-2)/(5-2)-1=1;
(2)标准函数: [pn,minp,maxp,tn,mint,maxt] = premnmx(p,t)是对P和T分别按照行进行归一化处理。
其中:pn:p的归一化结果,minp: p的每行的最小值,maxp: p的每行的最大值
tn: t矩阵的归一化结果,mint: t矩阵的最小值,maxt: t矩阵的最大值
举例分析:[pn,minp,maxp,tn,mint,maxt]=premnmx([2,4,3,5;4,2,1,6],[5,2,3,8])
P为2行4列数据,对每行分别进行归一化,pn结果是:
pn =
-1.0000 0.3333 -0.3333 1.0000
0.2000 -0.6000 -1.0000 1.0000
minp =
2
1
maxp =
5
6
t为1行4列的数据,对其归一化结果为 tn:
tn =0 -1.0000 -0.6667 1.0000
mint =2
maxt=8
反归一化
p=postmnmx(pn,mint,maxt)
结果p跟输入是一样的。
但是这个是适用于比较老版的MATLAB,对于新版MATLAB表达为
mapminmax
这个函数是十分常用的归一化函数,最常用的是进行多元回归,包括神经网络以及支持向量机回归过程当中。下面我们通过一个实例进行介绍。我们以A=[100 200 300 400]为例。
在MATLAB主窗口中输入[A1,PS]=mapminmax(A),这里PS是一种对应关系,里面包括一些相应的特征值。
-
对应关系说明
MATLAB 帮助文档中告诉我们,这种对应关系是
y = (ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin
在A向量中我们可以看到xrows代表行数,行数为1,并且对这一行向量来说,x最大值是400,最小值是100,x的变化范围时300。至于后面的关于y的,在归一化一维向量时,可以忽略不看,我们只需要知道ymin=-1,ymax=1,就可以。
我们可以验证某一个元素的值,比方说200,则y=1*(200-100)/(400-100)+(-1)=-1/3=-0.333.
-
-
-
-
-
对其他数值进行归一化
我们可以利用这个对应关系PS对其他数值进行归一化,但是有个前提,这个数必须要在xmin 和xmax之间,不然归一化的结果,与整体进行归一化,结果会不一样,例如,我们用如上对应关系归一化260,输入命令
temp= mapminmax('apply',260,PS)
结果如下,我们可以看到,用对应关系PS进行归一化,与整体进行归一化结果一致。
-
-
反例:
但是我们如果归一化不介于xmin 和xmax之间的数,结果就会出现不同,如下:
我们可以看到单独归一化500与整体归一化的结果不一样,所以用这种方式归一化其他值的时候一定要注意这一点。
-
-
-
-
反归一化
我们还是以最开始的向量A=[100 200 300 400]进行示例,进行归一化之后归一化的结果
A1=[-1.0000 -0.3333 0.3333 1.0000],那么我们要反归一化得到原来的值,怎么处理呢?
在MATLAB主窗口输入如下命令:A2= mapminmax('reverse',A1,PS) 回车
我们可以看到A2=[100 200 300 400]=A,成功的进行了反归一化。
END -