最近实习比较清闲。两个项目都做得差不多了,模型构建基本完成。上班时候比较清闲,读了谢邦昌,吕晓玲的《数据挖掘方法与应用》的神经网络建模的部分。我觉得这本书真是比较适合统计学的学生来读。模型比较深入,但是描述得很清楚。后面还配有案例分析。下面总结一下今天的阅读体会。
首先,神经网络的基本思想我在之前的博文里已经讲过了。这里也不回顾了。
第二,神经网络中两种重要的函数:基函数和激励函数。
基函数负责的是输入,拿线性基函数来说事。线性基函数也就是一般所说的加权求和,也就是不同的输入节点的输入信号加权求和以后输入神经元,这个加权求和的过程就是线性基函数。当然,也有其他种类的基函数,比如径向基函数(对应着径向基函数神经网络)。
激励函数也可以是多种多样的,它负责处理输入,然后给出一个输出。比如恒等函数,输入什么就输出什么。再比如说,阈值函数,当输入大于某个值时,输出1,否则输出0.再比如sigmodial函数,将信号变换在[0,1]之间。基函数和激励函数的不同种类,对应着不同类型的神经网络。
第三,学习的过程。
一般来说,在神经网络学习的过程中,我们把样本一个一个输入网络进行学习,网络中传递的权值最初是被赋予的随机的很小的值。当输入的样本经过了基函数编码,激励函数传递之后,会得到一个输出。得到的输出和目标输出进行比较,会获得一个误差向量。我们将误差向量反向传播,便会相应的调整权值,也就是网络得到了学习。学习的样本越多,网络越精确,越聪明。
三种常用的神经网络介绍
一,多层感知器和BP神经网络
多层感知器的原理比较简单,它是最为典型的前馈神经网络。其基函数是线性的。如果激励函数都是二值阈值函数,则该网络为多层离散感知器,如果隐藏层的激励函数为Sigmoidal函数,便是所谓的BP网。利用BP网,我们不光可以分类,还可以函数逼近(这个比线性回归好像靠谱点)。BP神经网络应用很广,我隐约记得方开泰和导师合著的《正交试验》那本书里某一章节是讲神经网络建模的,只可惜当时没注意。
二,径向基函数神经网络
最常见的径向基函数是高斯函数,我们就用高斯函数来解释什么叫径向基函数。高斯函数是一个钟形的图像(正态),在均值处取值最大,两侧对称逐渐衰减。这就叫径向函数,在某一个方向上最大,其他地方逐步衰减。这个函数,是模仿了生物神经元“近兴奋远抑制”的特性,比之前的多层感知器似乎稍微精确靠谱那么一点。那么,对应着径向基函数,我们就要确定我们样本数据的中心,(靠近中心的兴奋,远离的抑制)。不同选择中心的方法也有好几种算法,包括K-means聚类算法,还有简单的正交最小二乘算法等。选择了中心之后,就可以进行学习,学习的过程和BP算法的原理类似。就不赘述了。
三、自组织特征映射网络
这是一个引入了竞争机制的学习网络,它与径向基函数不同,是通过竞争来达到模拟大脑“近兴奋远抑制”的效果。这里涉及到自组织特征映射理论,其算法大致如下。
首先还是随机化给网络节点的连接权值附一个小值。对于网络输入模式,我们计算所有的输入样本和输出界定啊连接权向量的距离。具有最小距离的节点获胜,然后通过某种算法(比如梯度法),来调整这个输出节点所连接的权向量的几何邻域中的连接权值。(这也是一种回馈)。然后再输入,在调整。这种网络在机器人视觉,机器控制,语音识别方面都得到了应用。是比较先进的一种神经网络。
介绍完这三种网络,我们需要数据挖掘的软件来实现,这本书里使用的是statistica,属于商业软件,要收费。但是这个软件里能做MLP,RBF,PNN,SOFM等神经网络。我使用的盗版spss17.0只能做MLP,RBF.关于spss做神经网络,我之前已经介绍过,操作比较傻瓜化,只需要把参数设定好就可以了。下面介绍一下R语言做神经网络。
R语言是开源的,最近刚知道有个nnet包能做神经网络,今天安装了试了试,感觉还行。输入要设定为dataframe,然后也是一堆参数设定。但是nnet只能做一层的神经网络。我之前转载的那篇文章中的代码就是做神经网络的。关于比较重要的参数,我说明一下:
size是指神经网络隐藏层的神经元个数。linout是线性输出单元的开关,线性输出用于逼近函数,非线性输出用于分类。decay是指学习率。
关于R做神经网络,似乎只有这一个包了,因此只能做单层的,可能局限性比较大,但是这是对于回归分析的一个很好的补充。之后做数据拟合的时候,可以考虑这个策略。另外,还应该掌握一些可视化的手段,把神经网络的结果反映出来。因为nnet给出来的就是个权值矩阵而已。
ps:每天晚上到这个点就精神。白天全天都困。今晚得早点睡了。