神经网络在数据拟合中的应用[摘要] 相对于回归分析等方法,神经网络在拟合曲线的平滑度、精度等方面具有优势。
本文通过两个实例,介绍了用BP人工神经网络来进行数据拟合处理的方法。
表明采用神经网络方法进行数据拟合处理具有实用和精确的特点。
[关键词] 曲线拟合BP网络引言在科研生产中,我们经常会处理这样一些数据,它们的特点是:有一组输入,并且有一组对应的输出,但由于受到各种确定和随机因素的影响,我们难于找到输入输出之间的对应关系,更无法用函数关系来表示对应关系。
大多数情况下,人们用数学上的曲线拟合来解决这个问题,例如一元线性回归分析,二次曲线拟合等方法。
但是实际中大多数对应关系很复杂,难于拟合或者拟合出的残差较大,而且这种曲线拟合方法难以处理具有多个输入多个输出的情况。
神经网络方法在处理这样的数据时具有优势。
具有偏差和至少一个S 型隐含层加上一个线性输出层的BP人工神经网络能够逼近任何有理函数。
我们可以利用BP人工神经网络来进行数据拟合处理,能够得到平滑的曲线,不会出现数据有极值点的现象。
一、BP人工神经网络的结构BP网络是典型的多层网络,分为输入层,隐含层,输出层,层与层之间采用全互联方式,同一层神经元之间不存在相互连接,如图1:图1BP网络结构二、BP人工神经网络在频率特性校正中的应用我们以感应线圈的灵敏度-频率特性数据为例,说明BP网络的设计。
为了纠正频率响应特性,需要找到灵敏度-频率特性之间的对应关系,但由于物理变化过程十分复杂,很难找到它们之间的函数表达式,于是用BP人工神经网络拟合灵敏度-频率特性曲线,输入矩阵是一组频率数值,用T表示,输出矩阵是对应的灵敏度数值,用V 表示。
1.选取神经元数:输入矩阵T有6个数据,是一个列向量,则输入层有一个神经元,如图1,是一个16×6矩阵;是偏差向量,隐含层的激活函数;是输出层的向量,是输出层的偏差;输出层的激活函数;A2即V为输出目标矢量,有6个数据,输出层一个神经元。
关键在于如何选取隐含层的神经元数。
一般而言网络隐含层神经元数越多功能越强,但也不能太多,经反复试验决定采用16个神经元。
2.确定激活函数:隐含层采用对数S型激活函数,输出层采用线性激活函数。
为隐含层的输出向量,隐含层神经元数设为i (i=16) , 其中第i个神经元的输出为(公式1)图5中,Tj 是输入矩阵c中的一个元素,代表一个浓度值,共有6个浓度值。
输出层神经元数设为k (k=1),其输出为(公式2)误差函数定义为(公式3)图2 频率-灵敏度曲线3.BP网络训练:训练的目的是确定各个矩阵的权值,偏差值:BP网络,输入为频率值T,输出是灵敏度V,数据取自标定实验,构成训练集:输入矩阵T: [0,0.52,1.49,3.49,5.43,9.36]输出矩阵V: [1,0.969,0.936,0.896,0.867,0.828]用训练集训练网络,一般刚开始时网络训练时间比较长,有可能不成功,这就需要调整神经元数,初始矩阵,直到成功为止。
会得到W1,B1,W2,B2几个矩阵,用得到矩阵再次训练……直到err goal = 0.000002 successfully训练成功得到拟合的曲线,如图2所示。
4.测试BP网络:测试的目的是考察我们设计训练的BP网络性能,表1中有训练集和测试集的数据:表1 训练结果T BP网络输出的V 测试集的V T BP网络输出的V 测试集的V0 1.0003 1 3.49 0.8955 0.89550.515 0.9683 0.9682 3.495 0.8954 0.89540.52 0.9681 0.9681 5.425 0.8671 0.86710.525 0.9678 0.9677 5.43 0.8671 0.86711.485 0.9366 0.9365 5.435 0.8670 0.86701.49 0.9365 0.9365 9.355 0.8279 0.82791.495 0.9364 0.9364 9.36 0.8279 0.82793.485 0.8956 0.8955 9.365 0.8278 0.8279从表中可以看出测试集数据精度达到0.0003。
通过BP网络的运算可以预测出所有未知数据,也就是获得了频率与灵敏度之间的对应关系,在此基础上,我们可以校正频率特性。
三、BP人工神经网络在蓄电池电压拟合中的应用我们在对蓄电池进行浮充充电时,为了保护蓄电池免遭损坏,需要了解蓄电池浮充电压与温度的关系,通常这个关系是一一对应的非线性关系。
由于温度和浮充电压间的关系不会突变,所以通过BP人工神经网络的运算, 可以得到平滑的温度-浮充电压曲线。
在厂家只提供少量数据且未知函数表达式的情况下就可以高精度地预测出所有未知数据,通过BP人工神经网络的运算可以精确地得到温度和浮充电压关系曲线上的所有数值。
1.选取神经元数:因为输入输出各是一组数据,所以采用输入层一个神经元,输出层一个神经元;设输入矩阵为T,输出目标矢量为V 。
关键在于如何选取隐含层的神经元数。
隐含层的神经元数不能太少,否则网络不能很好地学习,需要训练的次数太多,训练精度也不高。
一般而言网络隐含层神经元数越多功能越强,但也不能太多,通常如果能够解决问题,再加上一两个神经元以加快误差的下降速度。
经验公式有两个:S1=4r+1s或者S1= + (1→10)其中S1是隐含层的神经元数;r是输入层的神经元数;s是输出层的神经元数;S1=4*1+1*1= 5个神经元或者S1= + (1→10) =3→12经反复试验决定采用8个神经元, S1=8。
2.确定激活函数:BP网络中神经元的激活函数是非线性的,且必须是连续可微和单调上升的有界函数。
输入/输出关系也是为非线性,其值可连续变化。
隐含层采用双曲正切S型激活函数,输出层采用线性激活函数。
隐含层神经元数设为i (i=8) , 其中第i个神经元的输出为A1i = tansig i=1,2, … ,8 (公式4)输出层神经元数设为k (k=1),其输出为A2 = purelink=1 (公式5)误差函数定义为err = (公式6)3.BP网络训练:有时对BP网络进行训练会出现不成功的情况,下面的例子说明如何处理这种情况。
BP网络输入为某一温度值,输出是测量电压值的基准值,将其和实际测量的蓄电池浮充电压値比较,若超出允许范围则报警。
T代表温度,V代表测量电压值的基准值。
实际工作温度是0oC至41oC,训练时0至41的数据造成网络训练困难,所以改为-20至20,只要加上20就是实际温度值。
将蓄电池制造厂提供的数据分为两个集合,训练集是:输入矩阵T = -20: 2 : 20;输出矩阵VV=[ 14.4,14.38,14.32,14.24,14.18,14.12,14.04,13.98,13.92,13.86,13.78,13.72,13 .66,13.58,13.52,13.46,13.38,13.32,13.26,13.2,13.2];编写训练程序:首先设定参数如下:max_epoch = 30000;err_goal = 0.002;程序运行结果:TRAINBP: 30000/30000 epochs, SSE = 0.00260954.W1 =[-0.1094-0.1207-1.0054-0.96311.50950.44681.76310.9540] TB1 =[-1.27481.24890.41200.1571-0.68910.9935-1.58330.0657] TW2 =[0.32280.2993-0.08830.2113 1.0839-0.0217-0.7304-0.2670]B2 =13.8159Unsuccessfully.网络训练不成功。
用得到的W1,B1,W2,B2再次训练……直到err_goal =0.0015 successfully,得到:W1 =[-0.1094-0.1207-1.0054-0.96311.50950.44681.76310.9540] TB1 =[1.27481.24890.4120 0.1571-0.68910.9935-1.58330.0657] TW2 =[0.32280.2993-0.08830.21131.0839-0.0217-0.7304 -0.2670]B2 =13.81594.测试BP网络用最后得到的矩阵修改程序,然后输入测试集数据,求出误差,测试集是:T= -19:2:21V=[ 14.4,14.34,14.28,14.22,14.14,14.08,14.02,13.96,13.88,13.82,13.76,13.68,13 .62,13.56,13.48,13.42,13.36,13.3,13.22,13.2,13.2];运行结果如图3:图3 蓄电池浮充电压-温度曲线TRAINBP: 0/10000 epochs, SSE = 0.0942136.TRAINBP: 100/10000 epochs, SSE = 0.00825354.TRAINBP: 145/10000 epochs, SSE = 0.0049739.测试集的SSE = 0.0942136,误差平方和<10mV,满足了要求。
综合上述,我们可以得出结论:按照四步法使用BP神经网络方法进行数据拟合处理,具有简单实用的特点,并且拟合出来的数据十分精确。
参考文献:[1](美)Martin T. Hagan 等著,戴葵等译《神经网络设计》,机械工业出版社2002年9月第1版.[2]侯培国,《基于人工神经网络的自动变速控制系统仿真研究》,自动化仪表,2005,26(10).。