关于数据归一化的几点探讨

自我上一次在学校更新博客以来,已经过去将近四个月了,而这也是目前我离开哈尔滨最长的一段时间。虽然错过了很多有意思的活动,但总体来说毕竟是收获更大。

我的好奇心经常会给我一些意外惊喜,例如:工地开装载机的小杨,今年还不到20岁,据说高中还没读完就开始出来闯了。他答应教我学开装载机的时候,我以为他也就是给我讲讲哪个操作杆怎么用罢了。而事实上他用了很长的时间给我讲解装载机的主要分类、功能,各种装载机具有什么样的优缺点……说实话,那位兄弟受教育程度不高,但是却具备相当高的学习素质——我不知道现在已经有多少人不相信“循序渐进”了,但我清楚抱着“不想知道某项技术是怎么来的,只想知道是怎么用的”思想的人,永远都是消费者而不是创造者。

不要小看民工,他们在一线工作的过程中往往能闪现出无穷的智慧。而这又令我联想到如今的国情,“中国从来就是不缺乏人才的”——我的这个观点更加坚定。盛唐和晚清都应该是人才济济的,不同的是,人才要么在朝为官(特指古代人才),要么流落乡野罢了。所以,如果没决心去改变,那就不要抱怨。个人无法改变教育,改变某种大环境是吧,那就从自身上多下功夫,这样要有效得多。

叨叨那么多,下面开始正题。

我在阅读同济大学粟洪、程进二位老师的《神经网络技术在预应力混凝土桥梁可靠度分析中的应用》一文时,发现文中使用的数据归一方法与我熟悉的线性归一不同,用的是[(x-均值)/方差]的方法。

首先,来回顾一下常用的归一化方法,主要是Matlab自带函数premnmx、mapminmax(详解),或者自己编写几行程序,算法都是这样的:

  •  y=(ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin----归一到[-1,1]
  • y=0.1+(x-min)/(max-min)*(0.9-0.1)---归一到[0.1,0.9]
  • p(i,: )=(p(i,: )-min(p(i,: )))/(max(p(i,: ))-min(p(i,: )))---------归一到[0,1]

归一化的目的,是将数据都转换到1附近么?这大概是我过去犯的一个认识上的错误。这里的“一”应当是“统一”的意思。即,祛除一组数据中的奇异(过大或过小的几个点)元素,或者统一不同单位不同数量级的数据,而并不一定是非要归到1上来。

为此,做了一个试验:

  1. 选取一个函数g(x,y)=f(x,y),自变量的随机分布已知;
  2. 生成训练样本,归一化的过程中,一次用线性一次用[(x-均值)/方差]的方法来做;
  3. 训练BP神经网络;
  4. 再根据随机给定的自变量获得若干对应的精确解答;
  5. 比较预测值与精确值之间的误差,发现无论用那种归一的方法,误差均能控制在1%以下。

所以,我认为,对于归一化的问题,可以根据实际情况和自己的需要,将数据“统一”到任意的地方去,结果都是一样的,不知道我这样理解对不对?

*欢迎转载,转载请标明来源:十千牛,文章地址: http://10kn.com/normalization/

欢迎关注十千牛微信公众号

说不定我这一生涓滴意念,侥幸汇成河,而且是一条大长河

7 条评论

Leave a Reply

Your email address will not be published. Required fields are marked *