您的位置:首页 > 编程语言 > MATLAB

MATLAB关于归一化、标准化

2017-08-16 18:17 288 查看
困惑:归一化和标准化的差别?

二者的英文貌似都是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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: