Matlab自带的数据标准化方法(mapminmax和mapstd)详细解析

转自:http://blog.sina.com.cn/s/blog_b3509cfd0101bt9u.html

Matlab神经网络工具箱自带了两个数据标准化处理命令,一个是mapminmax,另一个是mapstd。下面,分别对这两个命令进行解析。

 

一、mapminmax

mapminmax按行逐行地对数据进行标准化处理,将每一行数据分别标准化到区间[ymin, ymax]内,其计算公式是:y = (ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin。如果某行的数据全部相同,此时xmax=xmin,除数为0,则Matlab内部将此变换变为y = ymin

 

(1) [Y,PS] = mapminmax(X,YMIN,YMAX)——将数据X归一化到区间[YMIN,YMAX]内,YMINYMAX为调用mapminmax函数时设置的参数,如果不设置这两个参数,这默认归一化到区间[-1, 1]内。标准化处理后的数据为YPS为记录标准化映射的结构体。

【例1Matlab命令窗口输入:X=12+8*randn(6,8); [Y,PS] = mapminmax(X,0,1),则将随机数矩阵X按行逐行标准化到区间[0,1]内,并返回标准矩阵Y和结构体PS(至于它的作用,将在后面介绍到),它记录了X的行数、X中各行的最大值与最小值等信息。这里:

PS =

         name: 'mapminmax'

        xrows: 6

         xmax: [6x1 double]

         xmin: [6x1 double]

       xrange: [6x1 double]

        yrows: 6

         ymax: 1

         ymin: 0

       yrange: 1

    no_change: 0

         gain: [6x1 double]

      xoffset: [6x1 double]

 

(2) [Y,PS] = mapminmax(X,FP) ——YMINYMAX组成的结构体FP作为映射参数(FP.yminFP.ymax.)对进行标准化处理。

【例2Matlab命令窗口输入:XX=12+8*randn(6,8); FP.ymin=-2; FP.ymax=2; [YY,PSS] = mapminmax(XX,FP),则将随机数矩阵X按行逐行标准化到区间[-2,2]内,并返回标准矩阵YY和结构体PSS

 

(3) Y = mapminmax('apply',X,PS) ——根据已有给定的数据标准化处理映射PS,将给定的数据X标准化为Y

【例3在例1的基础上,Matlab命令窗口输入:XXX=23+11*randn(6,8); YYY= mapminmax('apply',XXX,PS),则根据例1的标准化映射,将XXX标准化(结果可能不全在先前设置的[YMIN,YMAX]内,这取决于XXX中数据相对于X中数据的最大值与最小值的比较情况)。注意:此时,XXX的行数必须与X的行数(PS中已记录)相等,否则无法进行;列数可不等。

 

(4) X = mapminmax('reverse',Y,PS) ——根据已有给定的数据标准化处理映射PS,将给定的标准化数据Y反标准化。

【例4在例1的基础上,Matlab命令窗口输入:YYYY=rand(6,8); XXXX = mapminmax('reverse', YYYY,PS),则根据例1的标准化映射,将YYYY反标准化。注意:此时,YYYY的行数必须与X的行数(PS中已记录)相等,否则无法进行;列数可不等。

 

(5) dx_dy = mapminmax('dx_dy',X,Y,PS) ——根据给定的矩阵X、标准化矩阵Y及映射PS,获取逆向导数(reverse derivative)。如果给定的XYmn列的矩阵,那么其结果dx_dy是一个1×n结构体数组,其每个元素又是一个m×n的对角矩阵。这种用法不常用,这里不再举例。

 实例:

x=[1 3.5 5;20 35 40; 100 250 300];
[y,ps] = mapminmax(x,0,1)
y2=[0 0.625 0.5 1;0 0.75 0.5 1;0 0.75 0.5 1];
 y1 = mapminmax('reverse',y2,ps)

则运行后

归一后:y=

 0    0.6250    1.0000
         0    0.7500    1.0000
         0    0.7500    1.0000

反归一后:y1=

    1.0000    3.5000    3.0000    5.0000
   20.0000   35.0000   30.0000   40.0000
  100.0000  250.0000  200.0000  300.0000

注意与y1要与x的行数相等!!

 

 

二、mapstd

mapstd按行逐行地对数据进行标准化处理,将每一行数据分别标准化为均值为ymean(默认为0)、标准差为ystd(默认为1)的标准化数据,其计算公式是:y = (x-xmean)*(ystd/xstd) + ymean。如果设置的ystd=0,或某行的数据全部相同(此时xstd =0),存在除数为0的情况,则Matlab内部将此变换变为y = ymean

 

mapstd有以下五种使用方式,与mapminmax基本类似,这里不再举例。

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

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

Y = mapstd('apply',X,PS)

X = mapstd('reverse',Y,PS)

dx_dy = mapstd('dx_dy',X,Y,PS)

你可能感兴趣的:(matlab,MATLAB)