数据归一化的Matlab实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据归一化汇总
============外一篇有关mapminmax的用法详解by
faruto==================================
几个要说明的函数接口:
[Y,PS]=mapminmax(X)
[Y,PS]=mapminmax(X,FP)
Y=mapminmax('apply',X,PS)
X=mapminmax('reverse',Y,PS)
用实例来讲解,测试数据x1=[124],x2=[523]; >>[y,ps]=mapminmax(x1)
y=
-1.0000-0.3333 1.0000
ps=
name:'mapminmax'
xrows:1
xmax:4
xmin:1
xrange:3
yrows:1
ymax:1
ymin:-1
yrange:2
其中y是对进行某种规范化后得到的数据,这种规范化的映射记录在结构体ps中.让我们来看一下这个规范化的映射到底是怎样的?
Algorithm
It is assumed that X has only finite real values,and that the elements of each row are not all equal.
•y=(ymax-ymin)*(x-xmin)/(xmax-xmin)+ymin;
•[关于此算法的一个问题.算法的假设是每一行的元素都不想相同,那如果都相同怎么办?实现的办法是,如果有一行的元素都相同比
如xt=[111],此时xmax=xmin=1,把此时的变换变为y=
ymin,matlab内部就是这么解决的.否则该除以0了,没有意义!]
也就是说对x1=[124]采用这个映射f:2*(x-xmin)/(xmax-xmin)+(-1),就可以得到y=[-1.0000-0.3333 1.0000]
我们来看一下是不是:对于x1而言xmin=1,xmax=4;
则y(1)=2*(1-1)/(4-1)+(-1)=-1;
y(2)=2*(2-1)/(4-1)+(-1)=-1/3=-0.3333;
y(3)=2*(4-1)/(4-1)+(-1)=1;
看来的确就是这个映射来实现的.
对于上面algorithm中的映射函数其中ymin,和ymax是参数,可以自己设定,默认为-1,1;
比如:
>>[y,ps]=mapminmax(x1)
>>ps.ymin=0;
>>[y,ps]=mapminmax(x1,ps)
y=
00.3333 1.0000
ps=
name:'mapminmax'
xrows:1
xmax:4
xmin:1
xrange:3
yrows:1
ymax:1
ymin:0
yrange:1
则此时的映射函数为:f:1*(x-xmin)/(xmax-xmin)+(0),是否是这样的这回你可自己验证.O(∩_∩)O
如果我对x1=[124]采用了某种规范化的方式,现在我要对x2=[523]采用同样的规范化方式[同样的映射],如下可办到:
>>[y1,ps]=mapminmax(x1);
>>y2=mapminmax('apply',x2,ps)
y2=
1.6667-0.33330.3333
即对x1采用的规范化映射为:f:2*(x-1)/(4-1)+(-1),(记录在ps中),对x2也要采取这个映射.
x2=[5,2,3],用这个映射我们来算一下.
y2(1)=2(5-1)/(4-1)+(-1)=5/3=1+2/3=1.66667
y2(2)=2(2-1)/(4-1)+(-1)=-1/3=-0.3333
y2(3)=2(3-1)/(4-1)+(-1)=1/3=0.3333
X=mapminmax('reverse',Y,PS)的作用就是进行反归一化,讲归一化的数据反归一化再得到原来的数据:
>>[y1,ps]=mapminmax(x1);
>>xtt=mapminmax('reverse',y1,ps)
xtt=
124
此时又得到了原来的x1(xtt=x1);
=================================
Matlab数字归一化问题(by yingzhilian)
/viewthread.php?tid=26409&extra=page%3D1&sid=Xs3tJ M
-------------------------------------------------------
归一化化定义:我是这样认为的,归一化化就是要把你需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。首先归一化是为了后面数据处理的方便,其次是保正程序运行时收敛加快。
在matlab里面,用于归一化的方法共有三种:
(1)premnmx、postmnmx、tramnmx
(2)prestd、poststd、trastd
(3)是用matlab语言自己编程。
premnmx指的是归一到[-11],prestd归一到单位方差和零均值。(3)关于自己编程一般是归一到[0.10.9]。具体用法见下面实例。
为什么要用归一化呢?首先先说一个概念,叫做奇异样本数据,所谓奇异样本数据数据指的是相对于其他输入样本特别大或特别小的样本矢量。
下面举例:
m=[0.110.150.320.4530;
0.130.240.270.2545];
其中的第五列数据相对于其他4列数据就可以成为奇异样本数据(下面所说的网络均值bp)。奇异样本数据存在所引起的网络训练时间增加,并可能引起网络无法收敛,所以对于训练样本存在奇异样本数据的数据集在训练之前,最好先进