MATLAB关于归一化、标准化

来源:互联网 发布:手机小说码字软件 编辑:程序博客网 时间:2024/06/11 15:18

困惑:归一化和标准化的差别?
二者的英文貌似都是data normalization,译者们是怎么把它们掰开的呢?Google上没查到相关的解释。所以从我现在能找到的资料来看,暂且置信于这两篇:
http://blog.sina.com.cn/s/blog_6b1c9ed50101byeu.html
http://blog.csdn.net/ding89629/article/details/7410191

归一化定义(国内网上广为流传的..随意看看就好)
归一化就是要把你需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。首先归一化是为了后面数据处理的方便,其次是保正程序运行时收敛加快。

综上所述,个人感觉,其实没有太大差别,或者说,不需要刻意去区别……

——————————————————————————————————————————

规范化主要方法
对原始数据train_data而言,一般的数据规范化有两种方式:

1)最小最大值法、线性变换
假设X有有限个实数,且每行的元素不全相等(否则,如果xmax=xmin,或者如果xmax无穷大或xmin无穷小,则y=x,不需要变化),则规范函数为:
y = (ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin
如果令ymax=1,ymin=0,则式子变为:
y = (x-xmin)/(xmax-xmin)
可以看出这种规范化函数使得原始数据train_data每一模式的每个特征分量规范成[0,1]上的数。

[Y,PS] = mapminmax(X,YMIN,YMAX)
把X的每个样本的特征值都规范化到[YMIN,YMAX]的区间上,返回规范化后的Y和规范化过程中的设置PS(可用于对其他数据集实现同样的规范化和反规范化)。YMIN和YMAX是可选参数,分别默认为-1和1。

例子:
将x1规范化到[-1,1]区间
x1 = [1 2 4; 1 1 1; 3 2 2; 0 0 0]
[y1,PS] = mapminmax(x1)

将x2规范化,注意,应用的是x1规范化过程中的设置PS,即是x1的xmin,xmax,ymin,ymax
x2 = [5 2 3; 1 1 1; 6 7 3; 0 0 0]
y2 = mapminmax(‘apply’,x2,PS)

还可以应用这个设置PS反规范化,从y1得到x1
x1_again = mapminmax(‘reverse’,y1,PS)

2)平均数方差法、零-均值规范化,z-score规范化
假设X有有限个实数,且每行的元素不全相等,则规范函数为:
y = (x-xmean)*(ystd/xstd) + ymean;
如果令ystd=1,ymean=0,则式子变为:
y = (x-xmean)/xstd;
可以看出这种规范化函数使得原始数据train_data每一模式的每个特征分量规范后服从均值为0,方差为1的正态分布。
优点是,当X的最大值和最小值未知,或孤立点左右了(1)法的规范化时,该方法更好。

[Y,PS] = mapstd(X,ymean,ystd)
基本同mapminmax了,ymean和ystd是可选参数,分别默认为0和1。

Z = zscore(X)
zscore在Statistics Toolbox下,也是规划化成固定均值和方差的正态分布,但是注意!与mapstd不同,zscore的均值和方差都是相对列向量而言。

可对比的例子:

>> x1 = [1 2 4; 1 1 1; 3 2 2; 0 0 0]>> [y1,PS] = mapstd(x1)y1 =   -0.8729   -0.2182    1.0911    1.0000    1.0000    1.0000    1.1547   -0.5774   -0.5774         0         0         0
>> y2=zscore(x1)y2 =   -0.1987    0.7833    1.3175   -0.1987   -0.2611   -0.4392    1.3908    0.7833    0.1464   -0.9934   -1.3056   -1.0247