神经网络与回归方法分析(数学建模)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多元回归与神经网络的应用
摘要
本文主要是通过整理分析数据,以得出题目中所给出的i x 与j y 的函数关系.由于数据并不是很充足,我们选择了所有数据为样本数据和部分数据为验证数据。
我们首先采用了多元回归方法,由于数据之间并没有明显的线性或者其它函数关系,模型很难选择,得到的结论对于1y 来说残值偏大,效果很差,于是我们引用了BP 神经网络,经过选择合适的参数,多次训练得到合适的网络,拟合得到了相对精确的结果,并进行了验证,最后将三种模型进行了对比。
关键字: 多元线性回归 多元非线性回归 最小二乘法 牛顿法 BP 神经网络
1.问题重述
现实生活中,由于客观事物内部规律的复杂性及人们认识程度的限制,人们常收集大量的数据,基于数据的统计分析建立合乎基本规律的数学模型,然后通过计算得到的模型结果来解决实际问题.回归分析法和神经网络是数学建模中常用于解决问题的有效方法.本文要解决的主要问题是:通过对所给数据的分析,分别用回归方法或神经网络来确立x i 与y i
之间的函数关系,并验证结论。
2.问题分析
题目要求我们使用神经网络或回归方法来做相关数据处理,相比较之下,我们对回归方法比较熟悉,所以首先选取了回归方法。
得到相关函数,并分析误差,再利用神经网络模型建立合理的网络,进行误差分析并和前者比较,得出合理的结论。
3.符号说明
4.模型建立与求解
4.1多元回归方法
它是研究某个变量与另一些变量的函数关系.主要内容是从一组样本数据出发,通过合理分析得到正确的函数关系,建立相应的表达式,并通过相关软件处理得到相应的系数。
4.1.1多元线性回归方法
1.回归模型的一般形式为:Y=0112
2...m m X X X ββββε+++++
其中01,,...,m βββ是待估计参数,e 是随机误差即残差。
残差ε服从均数为0,方差为2σ的正态分布。
这就是线性回归的数学模型。
12Y y y ⎧⎫
⎪⎪=⎨⎬⎪⎪⎩⎭
,X =11
14491494501
504111x x x x x
x ⎛⎫ ⎪ ⎪
⎪
⎪ ⎪ ⎪ ⎪⎝
⎭,01234ββββββ⎛⎫
⎪ ⎪
⎪ ⎪
= ⎪ ⎪ ⎪
⎪ ⎪⎝⎭
,1
2εεε
⎛⎫= ⎪
⎪⎝⎭
, 那么多元线性回归数学模型可也写成矩阵形式:Y X βε=+ 其中ε的分量是独立的。
2.参数β的最小二乘估计.为了估计参数β,我们采用最小二乘估计法.设
014,,...,b b b 分别是参数014,,...,βββ的最小二乘估计,则回归方程为
^
01144...y b b x b x =+++
由最小二乘法知道,014,,...,b b b 应使得全部观察值y α
与回归值^
y α
的偏差平
方和Q 达到最小,即使
2
^
Q y y α
αα=⎛⎫-∑
⎪⎝⎭
=最小
所以Q 是014,,...,b b b 的非负二次式,最小值一定存在。
根据微积分中的极值原理,014,,...,b b b 应是下列正规方程组的解:
^
^20,20,
j j
Q
Q y y
b y y x b αααααααδδδδ⎛⎫ ⎪=--= ⎪⎝
⎭
⎛⎫ ⎪=--= ⎪⎝⎭
∑⎧⎨⎩∑
显然,正规方程组的系数矩阵是对称矩阵,用A 来表示,则'A X X =,则其右端常数项矩阵B 亦可以用矩阵X 和Y 来表示:'B X Y =,所以可以得到回归方程的回归系数:
()1
1
'
'b A B X X X Y --==
3.由于利用偏回归方程和i Q 可以衡量每个变量在回归中所起的作用大小(即影响程度),设h S 是p 个变量所引起的回归平方和,1
h
S 是(p-1)个变量
所引起的回归平方和(即除去i x ),则偏回归平方和i Q 为
1
2
*
p
j j h j i
j ii
i j
h
b Q b S S
b B B c
==-=-=
∑∑
就是去掉变量i x 后,回归平方和所减少的量。
4.建立模型
453423121x b x b x b x b b y i ⨯+⨯+⨯+⨯+=
5.模型的求解
我们通过MATLAB ,求得其回归系数,并最终得到i x 与i y 的函数关系:
12341
12342
339.849916.811411.548967.541415.5485,
164.55800.1874 1.797629.972812.4426,y x x x x y x x x x ⎧=-++-⎪⎨
=-+-++⎪⎩ 同时通过MATLAB 可以得出i x 与i y 的误差结果如下:
由此,我们可得出结论,采用多元线性回归得出的函数关系对于1y 残差太大,效果很差,对于2y 的拟合也并不是很完美。
4.1.2非线性回归方法
1.数据标准化
我们选用的是非线性模型LSE 的Gauss-Newton 算法:
采用Z-score 标准化法,即对序列12,,...,m x x x 进行变换:
i
i
s
x x y -
-=, (1其中,1
1
N
i
i N
x x -
==
∑,2
111N i s i N x x =-
=
-⎛⎫-∑ ⎪
⎝⎭
,则构成新序列,均值为0,方差
为1.。
首先考虑单参数的非线性回归模型: (),i
i
i
f
x Y
βε
=+
其残差平方和函数为
()()2
1
,N i S i i f Y X ββ==
-⎡⎤∑⎣⎦
要使()S β取极小值,则令其一阶导数为0,来求β.一个近似的方法是用Taylor 近似展开来代替。
设β的初值为1β,则在1β点附近函数有近似Taylor 展式:
()()()
()1
1
1
,,,i
i
i
df
f
f d X X X βββββ
β
β≈+
-
可以求的其导数值,简记为: ()()1
1
,i
i
df
d X Z βββ
β=
∣
则
()()()()()()2
2
1
1
11111,.N
N
i i S i i i i i f Y X Z Y Z ββββββββ====⎡⎤
⎡⎤----∑∑⎢⎥⎣
⎦⎣⎦
即为线性回归
()()1
1
.i
i
i Z Y ββ
βε
=+
的残差和.上式被称为拟线性模型.其最小二乘估计是
)()()]()([)
()
()(1~
'
111'12
1
1
1
1
1
~
2ββββββββY Z Z Z Z Z Y n
i i
n
i i
i
-===⋅=
∑∑
如果我们有β的初值,就可以得到另一个新值,进而可以得到一个序列,写出一个迭代表达式,即
1
n β
+与
n
β
的关系。
若在迭代过程中有
1
n β
+=
n
β
,即()S β的一阶导数为0,
此时()S β取得一个极值。
为了避免迭代时间过长或迭代来回反复,可以引入进步长控制函数n
t
,
'1
1[Z()Z()]n
n n n n n dS
t d ββββββ
-+=-'1'2[Z()Z()]()[Y (X,)]
n n n n n n t Z f βββββ-=--
n
t
由计算机程序根据误差自动调整.上述算法一般称为Gauss-Newton 算法.
2.建立非线性回归模型:采用多元二次多项式函数 设函数:
2
2
1
1
2
2
3
3
4
4
5
1
6
1
2
7
1
3
8
1
4
9
2
10
2
3
1
2
2
11
2
4
12
3
13
3
4
14
4
y b b x b x b x b x b x b x x b x x b x x b x b x x b x x b x b x x b x
=++++++++++++++通过Gauss-Newton 算法和MATLAB 计算最终得出以下结果:
21234112
1
22131422324334
2412212575.940129.457127.81901597.99601695.57780.87100.4665
35.3093 2.1549 1.289824.79770.912131.894694.336757.08592483.447814.5988 5.8585y x x x x x x x x x x x x x x x x x x x x y x x =--+-++--+-++++-=--2
3411222
1314223243342412.5802302.89100.48880.09558.72100.49710.2123 3.04590.141024.6923 5.203310.1871x x x x x x x x x x x x x x x x x x ⎧⎪⎪⎪
⎪⎪⎨+-++⎪⎪⎪+-+--+-⎪⎪+⎩
通过MATLAB 编写相应程序所得结果如下:
1
2
,y y
的残差图
由图可以明显看出误差很大,拟合效果不好。
综合多元非线性和多元线性这两种模型,我们可以发现y1并不适合这两种模型,y2模拟相对较好,但误差并没有足够小,不再我们的预期效果之内。
于是我们采用了BP 神经网络。
4.2神经网络
4.2.1模型的原理
BP (Back Propagation)神经网络是一种多层前馈神经网络。
其由输入层、中间层、输出层组成的阶层型神经网络,中间层可扩展为多层。
相邻层之间各神经元进行全连接,而每层各神经元之间无连接,网络按有教师示教的方式进行学习,当一对学习模式提供给网络后,各神经元获得网络的输入响应产生连接权值(Weight ),隐含层神经元将传递过来的信息进行整合,通常还会在整合过程添加一个阈值,这是模仿生物学中神经元必须达到一定阈值才会触发的原理。
输入层神经元数量由输入样本的维数决定,输出层神经元数量由输出样本的维数决定,隐藏层神经元合理选择。
然后按减小希望输出与实际输出误差的方向,从输出层经各中间层逐层修正各连接权,回到输入层。
此过程反复交替进行,直至网络的全局误差趋向给定的极小值,即完成学习的过程。
BP 网络的核心是数学中的“负梯度下降”理论,即BP 的误差调整方向总是沿着误差下降最快的方向进行。
.
相关传递函数(或激励函数):
阈值型(一般只用于简单分类的MP 模型中)
0,0
()1,0
x f x x <⎧=⎨>=⎩
线性型(一般只用于输入和输出神经元) ()f x x = S 型(常用于隐含层神经元)
1
()1x
f x e -=+ 或 1()1x x e f x e ---=+
BP 神经网络模型
通常还会在激励函数的变量中耦合一个常数以调整激励网络的输出幅度。
4.2.2 模型的建立与求解
步骤1、准备训练网络的样本
我们此次的BP网络是一个4输入2输出的网络,如下表所示:
步骤2、确定网络的初始参数
步骤3、初始化网络权值和阈值
因为是4个输入因子8个隐含层神经元,则第一层与第二层之间的权值w(t)
ij ⨯的随机数矩阵:
为84
[-0.044 0.325 -0.099 0.149
-0.031 0.180 0.332 0.350
0.2393 0.364 0.206 0.187
0.1475 0.248 0.394 0.322
-0.005 0.191 0.163 0.269 0.1475 0.307 0.139 0.192 -0.026 0.339 0.300 0.023 -0.072 0.394 0.013 0.233]
神经网络的阈值是用来激活神经元而设置的一个临界值,有多少个神经元就会有多少个阈值,则第二层神经元的阈值(t)ij B 为81⨯ 的矩阵: [-0.058
0.212 0.230 0.264 0.345 0.391 0.284 0.190]T
同理,第二层与第三层之间的权值(t)jk w 为28⨯ 的随机数矩阵: [0.364 -0.091 0.331 0.322 0.176 -0.084 0.081 0.144 0.190 -0.039 0.142 0.004 0.214 0.20 -0.075 -0.003] 同理,第三层阈值(t)jk B 为21⨯ 的矩阵:
[-0.038 0.002] 步骤4、计算第一层神经元的输入与输出
假设第一层神经元中放置的是线性函数,所以网络第一层输入和输出都等于实际输入样本的值, 所以第一层输出值1O =X 。
但是,因为输入和输出样本的量纲以及量级都不相同,所以须进行归一化处理。
步骤5、计算第二层神经元的输入
对于第二层,神经元的输入是第一层所有的神经元的值与阈值的和,即
2ij ij I w X B ones =⨯+⨯ ,其中ones 是一个全为1的矩阵,所以2I 是一个850⨯ 的矩阵,很容易得出2I 。
步骤6、计算第二层神经元的输出
假设第二层神经元激励函数为单极S 型函数,即为1
f(x)1x
e -=
+ ,所以第二层神经元的输出2
21
1I O e
-=
+ .所以第二层输出也是一个850⨯ 的矩阵。
步骤7、计算第三层的输入和输出
第三层输入与第二层输入相似,即32jk jk I w O B ones =⨯+⨯ ,所以3I 是一个
250⨯ 的矩阵。
步骤8、计算能量函数E
能量函数,即网络输出与实际输出样本之间的误差平方和,其目的是在达到
预定误差就可以停止训练网络。
Y 是归一化处理后的实际输出样本。
则:
23(Y O )136.9006E =-=∑
步骤9、计算第二层与第三层之间的权值和阈值调整量
权值调整量:32(Y O )O jk jk
E
w w η
η∂∆=-=-⨯-⨯∂ ,jk w ∆ 是一个28⨯ 的矩阵 [-33.644 -39.7786 -38.55 -40.2511 -41.395 -41.33 -37.804 -38.256 -11.433 -11.8610 -12.38 -12.077 -12.935 -13.32 -12.509 -12.633]
同理,阈值调整量:3B (Y O )jk jk
E
ones B η∂∆=
=-⨯-⨯∂ ,jk B ∆ 是一个21⨯ 矩阵:
[-67.628 -22.343]
步骤10、计算第一层与第二层之间的权值和阈值调整量
因为对于传递函数1f (x)1x
e
-=
+,有 '
(x)(x)[1(x)]f f f =- , 故权值调整量: 322(Y )(1)ij jk ij
E
w w O O O X w η
η∂∆=-=-⨯⨯-⨯⨯-⨯∂ 所以ij w ∆ 是一个84⨯ 的矩阵: -0.183 0.482 0.710 -3.319 0.056 -0.135 -0.193 0.769 -0.099 0.547 0.615 -2.893 -0.138 0.635 0.438 -2.696 -0.072 0.132 0.615 -1.432 0.0764 -0.39 0.320 0.728 -0.062 0.251 -0.066 -0.730 -0.101 0.323 0.1105 -1.263 同理,阈值调整量:322B (Y )(1)ij jk ij
E
w O O O ones B η∂∆=
=-⨯⨯-⨯⨯-⨯∂
所以ij B ∆ 为81⨯ 的矩阵: [-7.113
1.674 -6.119 -5.1014
-3.945 0.2310 -0.9220 -2.335]T
步骤11 计算调整之后的权值和阈值
(t 1)(t)w +(t)(t 1)(t)+B (t)(t 1)(t)w +(t)
(t 1)(t)+B (t)jk jk jk jk jk
jk jk jk jk jk
ij ij ij ij ij ij ij ij ij ij
E
w w w w E
B B B B E
w w w w E
B B B B ηηηη
∂+=-+=∆∂∂+=-+=∆∂∂+=-+=∆∂∂+=-+=∆∂
此算法是让网络沿着E 变化量最小的方向搜索,所以经过一段时间的训练之后,神经网络会慢慢蜷缩收敛,直到完全拟合成目标输出值或接近目标输出值。
下面是y1的神经网络训练动态图:
步骤12 还原网络输出的值
因为在训练网络时,将输入和输出的样本经过了归一化的处理,所以要将3O 还原成原始数据的量级。
根据此算法,我们编出了matlab 程序,最终拟合结果如下:
可以看出结果并不理想,相对于回归模型,误差并没有减小。
4.2.3模型的修正
由于模型的参数没有选择好,隐含层数量不足,模拟的效果并不好,于是我们重
最大训练次数5000
学习速率0.05
隐含神经元层数 3
训练目标误差
3
10 65
.0-
⨯
第一层隐含神经元个数8
第二层隐含神经元个数12
第三层隐含神经元个数8
第一层隐含神经元传递函数Logsig函数
第二层隐含神经元传递函数Tansig函数
第二层隐含神经元传递函数Logsig函数
通过编写MATLAB工具箱程序,训练得到了下面的结果:
由此得到的结果从视觉上非常完美。
我们用训练得到的网络验证了全部数据并提取了误差:可以得到只有几个数据不是那么精确。
评价与总结
我们抽取了部分数据,分别检验了回归模型和通过神经网络算法训练得到的网络,得到了误差,在此我们进行了具体的对比:
Y1各种方法的误差如下表所示:
Y2各种方法的误差如下表所示:
从对比中我们可以得出,无论是通过模拟的视觉效果上还是最后的误差对比中,我们可以明显的得出,神经网络相对于回归模型误差小,得到的结果更加的精确。
而回归模型中非线性相对于线性拟合的效果更好一些,对于1y和2y,不管是哪种模型,对于y2的拟合效果要比y1更精确。
神经网络具有很强的鲁棒性、记忆能力、非线性映射能力以及强大的自学习能力,因此有很大的应用市场。
但是实际神经网络也特别的不稳定,例如学习效率和神经元数量等参数对最后训练的结果影响非常的大,神经网络把一切问题的特征都变为数字,把一切推理都变为数值计算,其结果势必是丢失信息,因此理论和学习算法还有待于进一步完善和提高。
而回归分析法在分析多因素模型时,更加简单和方便;运用回归模型,只要采用的模型和数据相同,通过标准的统计方法可以计算出唯一的结果,但在图和表的形式中,数据之间关系的解释往往因人而异,不同分析者画出的拟合曲线很可能也是不一样的;回归分析可以准确地计量各个因素之间的相关程度与回归拟合程度的高低,提高预测方程式的效果;在回归分析法时,由于实际一个变量仅受单个因素的影响的情况极少,要注意模式的适合范围,所以一元回归分析法适用确实存在一个对因变量影响作用明
显高于其他因素的变量是使用。
多元回归分析法比较适用于实际经济问题,受多因素综合影响时使用。
但是有时候在回归分析中,选用何种因子和该因子采用何种表达式只是一种推测,这影响了用电因子的多样性和某些因子的不可测性,使得回归分析在某些情况下受到限制。
不管是哪种方法都有各自的优缺点。
合理选择适合问题的方法是最重要的。
5.参考文献
【1】姜启源.数学模型.北京:高等教育出版社,2003.
【2】赵静,但琦等,数学建模与数学实验,北京:高等教育出版社施普林格出版社,2000年
【3】李庆扬,王能超,易大义.数值分析(第四版)[M].北京:清华大学出版社,2001.
【4】张德丰.MATLAB数值计算方法.北京:机械工业出版社,2010.
【5】王惠文,《偏最小二乘回归方法及应用》,国防科技出版社,北京,1996.
【6】徐国章,等.曲线拟合的最小二乘法在数据采集中的应用【J】.冶金自动化增刊,2004年
【7】(美)里德.数值分析与科学计算.北京:清华大学出版社,2008.
【8】(美)约翰逊.数值分析与科学计算.北京:科学出版社,2012.
【9】姜绍飞,张春丽,钟善桐.BP网络模型的改进方法探讨【J】哈尔滨建筑大学学报,2000.
【10】郝中华.《B P神经网络的非线性思想》. 洛阳师范学院学报2008.3(4) 【11】巨军让,卓戎.《B P神经网络在Matlab中的方便实现》.新疆石油学院学报.2008.2
【12】周开利,康耀红编著.《神经网络模型及其MATLAB仿真程序设计》.2006:10-43
附录:程序1
x1=xlsread('F:\建模题\新建 Microsoft Excel 工作表.xls','B2:B51');
x2=xlsread('F:\建模题\新建 Microsoft Excel 工作表.xls','C2:C51');
x3=xlsread('F:\建模题\新建 Microsoft Excel 工作表.xls','D2:D51');
x4=xlsread('F:\建模题\新建 Microsoft Excel 工作表.xls','E2:E51');
y1=xlsread('F:\建模题\新建 Microsoft Excel 工作表.xls','F2:F51');
y2=xlsread('F:\建模题\新建 Microsoft Excel 工作表.xls','G2:G51');
x=[x1,x2,x3,x4];
x0=ones(size(x,1),1);
t=1:50;
X=[x0,x];
[b,bint,r,rint,statsl]=regress(y1,X);
[b1,bint,r1,rint,statsl]=regress(y2,X);
plot(t,r,t,r1)
legend('误差y1','误差y2');
程序2
M文件
function f=myfun(beta,x)
f=beta(1)+beta(2)*x(:,1)+beta(3)*x(:,2)+beta(4)*x(:,3)+beta(5)*x(:,4) +beta(6)*x(:,1).*x(:,1)+beta(7)*x(:,1).*x(:,2)+beta(8)*x(:,1).*x(:,3) +beta(9)*x(:,1).*x(:,4)+...
beta(10)*x(:,2).*x(:,2)+beta(11)*x(:,2).*x(:,3)+beta(12)*x(:,2).*x(:, 4)+beta(13)*x(:,3).*x(:,3)+beta(14)*x(:,3).*x(:,4)+beta(15)*x(:,4).*x (:,4);
end
function f=myfun(beta1,x)
f=beta1(1)+beta1(2)*x(:,1)+beta1(3)*x(:,2)+beta1(4)*x(:,3)+beta1(5)*x (:,4)+beta1(6)*x(:,1).*x(:,1)+beta1(7)*x(:,1).*x(:,2)+beta1(8)*x(:,1) .*x(:,3)+beta1(9)*x(:,1).*x(:,4)+...
beta1(10)*x(:,2).*x(:,2)+beta1(11)*x(:,2).*x(:,3)+beta1(12)*x(:,2).*x (:,4)+beta1(13)*x(:,3).*x(:,3)+beta1(14)*x(:,3).*x(:,4)+beta1(15)*x(: ,4).*x(:,4);
end
x=[x1,x2,x3,x4];
[beta,r1] = nlinfit(x,y1,'myfun',rand(1,15)-0.5)
[beta1,r2] = nlinfit(x,y2,'myfun',rand(1,15)-0.5)
t=1:50;
plot(t,r1,t,r2)
legend('误差y2','实际y1');
legend('误差y1','实际y2');
程序3
function main()
clc
clear all;
close all;
warning off;
InputNum=50;%输入的数据个数
TestNum=50;%测试的数据个数
FutureNum=2;%预测的数据个数
HiddenNum=6;%隐藏神经元个数
Il=4; %输入神经元个数
Ol=2; %输出神经元个数
x1=xlsread('F:\建模题\新建 Microsoft Excel 工作表.xls','B2:B51')'; x2=xlsread('F:\建模题\新建 Microsoft Excel 工作表.xls','C2:C51')'; x3=xlsread('F:\建模题\新建 Microsoft Excel 工作表.xls','D2:D51')'; x4=xlsread('F:\建模题\新建 Microsoft Excel 工作表.xls','E2:E51')'; y1=xlsread('F:\建模题\新建 Microsoft Excel 工作表.xls','F2:F51')'; y2=xlsread('F:\建模题\新建 Microsoft Excel 工作表.xls','G2:G51')';
XX=[x1;x2;x3;x4];
YY=[y1;y2];
[In,minp,maxp,tn,mint,maxt]=premnmx(XX,YY);%对样本进行初始化
Out=tn;
%TestIn=In;
%TestOut=Out;
count=50000;%训练次数
rate=0.035;%学习速率
E0=0.65*10^(-3);%目标误差
P1=0.5*rand(HiddenNum,Il)-0.1;%输入层与隐含层之间权值T1=0.5*rand(HiddenNum,1)-0.1;%输入层与隐含层之间阈值
P2=0.5*rand(Ol,HiddenNum)-0.1;%隐含层与输出层层之间权值T2=0.5*rand(Ol,1)-0.1; %隐含层与输出层之间的阈值ErrHistory=[];
for i=1:count
Mid=logsig(P1*In+repmat(T1,1,InputNum));%传递
SOut=P2*Mid+repmat(T2,1,InputNum);
E=Out-SOut;%误差
SSE=sumsqr(E);
EH=[];
EH=[EH SSE];
%调整权值和阈值
if SSE<E0,break,end
Adjust2=E;
Adjust1=P2'*Adjust2.*Mid.*(1-Mid);
dP2=Adjust2*Mid';
dT2=Adjust2*ones(InputNum,1);
dP1=Adjust1*In';
dT1=Adjust1*ones(InputNum,1);
%根据调整量进行改正权值和阈值
P2=P2+rate*dP2;
T2=T2+rate*dT2;
P1=P1+rate*dP1;
T1=T1+rate*dT1;
end
Mid=logsig(P1*In+repmat(T1,1,TestNum));
SOut=P2*Mid+repmat(T2,1,TestNum);
a=postmnmx(SOut,mint,maxt);
x=1:50;
newk=a(1,:);
newh=a(2,:);
figure;
subplot(2,1,1);
plot(x,newk,'r-o',x,y1,'b--+');
subplot(2,1,2);
plot(x,newh,'r-o',x,y2,'b--+');
程序4
clc;
close all;
clear all;
% 原始数据
x1=xlsread('F:\建模题\新建 Microsoft Excel 工作
表.xls','B2:B51')';
x2=xlsread('F:\建模题\新建 Microsoft Excel 工作
表.xls','C2:C51')';
x3=xlsread('F:\建模题\新建 Microsoft Excel 工作
表.xls','D2:D51')';
x4=xlsread('F:\建模题\新建 Microsoft Excel 工作
表.xls','E2:E51')';
y1=xlsread('F:\建模题\新建 Microsoft Excel 工作
表.xls','F2:F51')';
y2=xlsread('F:\建模题\新建 Microsoft Excel 工作
表.xls','G2:G51')';
%输入数据矩阵
p=[x1;x2;x3;x4];
%目标数据矩阵
t=[y1;y2];
%利用mapminmax函数对数据进行归一化
[pn,input_str]=mapminmax(p);
[tn,output_str]=mapminmax(t);
%建立BP神经网络
net=newff(p,t,[8 12 8],{,'logsig','tansig','purelin'});%purelin(训练函数)logsig(学习函数)purelin(性能函数)
%10轮回显示一次结果
net.trainParam.show=10;
%学习速度为0.05
net.trainParam.lr=0.05;
%最大训练次数为5000次
net.trainParam.epochs=5000;
%均方误差
net.trainParam.goal=0.65*10^(-3);
%网络误差如果连续6次迭代都没有变化,训练将会自动终止
%为了让程序继续运行,用以下命令取消这条设置
net.divideFcn= '';
%开始训练,其中pn,tn分别为输入输出样本
net=train(net,pn,tn);
%利用训练好的网络,基于原始数据对BP网络仿真
an=sim(net,pn);
an
%利用mapminmax函数把仿真得到的数据还原为原始的数量级a=mapminmax('reverse',an,output_str);
x=1:50;
newy1=a(1,:);
newy2=a(2,:);
figure(2);
%绘制y1对比图
subplot(2,1,1);plot(x,newy1,'r-o',x,y1,'b--+');
legend('仿真y1','实际y1');
xlabel('序号');ylabel('y1值');
title('运用神经网络y1学习和测试对比图');
%绘制y2对比图
subplot(2,1,2);plot(x,newy2,'r-o',x,y2,'b--+');
legend('仿真y2','实际y2');
xlabel('序号');ylabel('y2值');
title('运用神经网络y2学习和测试对比图');
%测试
xnew=[x1;x2;x3;x4]
xnew=mapminmax(‘apply’,xnew,input_str);
ynewn=sim(net,xnewn);
ynew=mapminmax(‘reverse’,xnew,output_str);。