神经网络与回归方法分析(数学建模).doc
多元回归与神经网络的应用摘要 本文主要是通过整理分析数据,以得出题目中所给出的与的函数关系.由于数据并不是很充足,我们选择了所有数据为样本数据和部分数据为验证数据。我们首先采用了多元回归方法,由于数据之间并没有明显的线性或者其它函数关系,模型很难选择,得到的结论对于来说残值偏大,效果很差,于是我们引用了BP神经网络,经过选择合适的参数,多次训练得到合适的网络,拟合得到了相对精确的结果,并进行了验证,最后将三种模型进行了对比。关键字: 多元线性回归 多元非线性回归 最小二乘法 牛顿法 BP神经网络 1.问题重述 现实生活中,由于客观事物内部规律的复杂性及人们认识程度的限制,人们常收集大量的数据,基于数据的统计分析建立合乎基本规律的数学模型,然后通过计算得到的模型结果来解决实际问题.回归分析法和神经网络是数学建模中常用于解决问题的有效方法.本文要解决的主要问题是:通过对所给数据的分析,分别用回归方法或神经网络来确立与之间的函数关系,并验证结论。2.问题分析题目要求我们使用神经网络或回归方法来做相关数据处理,相比较之下,我们对回归方法比较熟悉,所以首先选取了回归方法。得到相关函数,并分析误差,再利用神经网络模型建立合理的网络,进行误差分析并和前者比较,得出合理的结论。3.符号说明的自变量个数回归系数残差Q偏差平方和分别为两个变量序列的均值第一层网络与第二层网络之间的权值第二层神经元的阈值第二层与第三层之间的权值第三层神经元的阈值第二层与第三层权值调整量第二层与第三层阈值调整量第一层与第二层权值调整量第一层与第二层阈值调整量 Logsig函数Tansig函数偏差平方和观察值回归值估计参数回归平方和(p-1)个变量所引起的回归平方和(即除去)偏回归平方和4.模型建立与求解4.1多元回归方法它是研究某个变量与另一些变量的函数关系.主要内容是从一组样本数据出发,通过合理分析得到正确的函数关系,建立相应的表达式,并通过相关软件处理得到相应的系数。4.1.1多元线性回归方法1.回归模型的一般形式为:Y=其中是待估计参数,e是随机误差即残差。残差服从均数为0,方差为的正态分布。这就是线性回归的数学模型。 , 那么多元线性回归数学模型可也写成矩阵形式:其中的分量是独立的。2.参数的最小二乘估计.为了估计参数,我们采用最小二乘估计法.设分别是参数的最小二乘估计,则回归方程为 由最小二乘法知道,应使得全部观察值与回归值的偏差平方和Q达到最小,即使 =最小所以Q是的非负二次式,最小值一定存在。根据微积分中的极值原理,应是下列正规方程组的解: 显然,正规方程组的系数矩阵是对称矩阵,用A来表示,则,则其右端常数项矩阵B亦可以用矩阵X和Y来表示:,所以可以得到回归方程的回归系数: 3.由于利用偏回归方程和可以衡量每个变量在回归中所起的作用大小(即影响程度),设是p个变量所引起的回归平方和,是(p-1)个变量所引起的回归平方和(即除去),则偏回归平方和为 就是去掉变量后,回归平方和所减少的量。4.建立模型5. 模型的求解我们通过MATLAB,求得其回归系数,并最终得到与的函数关系:同时通过MATLAB可以得出与的误差结果如下: 由此,我们可得出结论,采用多元线性回归得出的函数关系对于残差太大,效果很差,对于的拟合也并不是很完美。4.1.2非线性回归方法1.数据标准化我们选用的是非线性模型LSE的Gauss-Newton算法:采用Z-score标准化法,即对序列进行变换: , (1其中,则构成新序列,均值为0,方差为1.。 首先考虑单参数的非线性回归模型: 其残差平方和函数为 要使取极小值,则令其一阶导数为0,来求.一个近似的方法是用Taylor近似展开来代替。设的初值为,则在点附近函数有近似Taylor展式: 可以求的其导数值,简记为: 则 即为线性回归 的残差和.上式被称为拟线性模型.其最小二乘估计是 如果我们有的初值,就可以得到另一个新值,进而可以得到一个序列,写出一个迭代表达式,即与的关系。若在迭代过程中有=,即的一阶导数为0,此时取得一个极值。为了避免迭代时间过长或迭代来回反复,可以引入进步长控制函数, 由计算机程序根据误差自动调整.上述算法一般称为Gauss-Newton算法. 2.建立非线性回归模型:采用多元二次多项式函数 设函数:通过Gauss-Newton算法和MATLAB计算最终得出以下结果:通过MATLAB编写相应程序所得结果如下:的残差图由图可以明显看出误差很大,拟合效果不好。综合多元非线性和多元线性这两种模型,我们可以发现并不适合这两种模型,模拟相对较好,但误差并没有足够小,不再我们的预期效果之内。于是我们采用了BP神经网络。4.2神经网络4.2.1模型的原理 BP (Back Propagation)神经网络是一种多层前馈神经网络。其由输入层、中间层、输出层组成的阶层型神经网络,中间层可扩展为多层。相邻层之间各神经元进行全连接,而每层各神经元之间无连接,网络按有教师示教的方式进行学习,当一对学习模式提供给网络后,各神经元获得网络的输入响应产生连接权值(Weight),隐含层神经元将传递过来的信息进行整合,通常还会在整合过程添加一个阈值,这是模仿生物学中神经元必须达到一定阈值才会触发的原理。输入层神经元数量由输入样本的维数决定,输出层神经元数量由输出样本的维数决定,隐藏层神经元合理选择。然后按减小希望输出与实际输出误差的方向,从输出层经各中间层逐层修正各连接权,回到输入层。此过程反复交替进行,直至网络的全局误差趋向给定的极小值,即完成学习的过程。BP网络的核心是数学中的“负梯度下降”理论,即BP的误差调整方向总是沿着误差下降最快的方向进行。 .BP神经网络模型型 相关传递函数(或激励函数):阈值型(一般只用于简单分类的MP模型中) 线性型(一般只用于输入和输出神经元) S型(常用于隐含层神经元) 或 通常还会在激励函数的变量中耦合一个常数以调整激励网络的输出幅度。 4.2.2 模型的建立与求解 步骤1、准备训练网络的样本我们此次的BP网络是一个4输入2输出的网络,如下表所示:序号X1X2X3X4Y1Y218100.51441.3214.328140.715725.670.00533818116113.7812.1448221.217867.160.00558261.518905.630.003610100.7165.5271.6871014117100.41810181.218329.850.42910221.51424.0257.321010260.515191.133.891113101183.8877.41213141.21436.8319.571313181.515217.939.061413220.516258.350.00411513260.717398.460.00581615101.2152.2485.321715141.51629.2415.741815180.517296.9871915220.718207.520.036201526114204.860.7062118101.5173.1685.52218140.51815.9236.322318180.71449.429.52241822115149.60.512518261.2162550.05268281.21869.386.322782011858.981.9288170.718125.598.39298150.51885.195.2308131.518115.397.7531102811815.535.443210200.71818.842.43310170.51817.341.983410151.51866.483.583510131.21858.682.523613280.71818.142.483713200.51821.850.73813171.51877.187.583913151.2186282.2440131311836.266.064115280.51826.962.044215201.518135.398.154315171.21861.384.2644151511836.368.884515130.71817.745.724618281.518184.999.24718201.21880.590.5848181711841.969.64918150.71821.248.845018130.518822.74步骤2、确定网络的初始参数参数数值最大训练次数50000隐含层神经元数量8网络学习速率0.033训练的目标误差 步骤3、初始化网络权值和阈值因为是4个输入因子8个隐含层神经元,则第一层与第二层之间的权值 为 的随机数矩阵:-0.044 0.325-0.0990.149-0.031 0.180 0.3320.3500.2393 0.364 0.2060.1870.1475 0.248 0.3940.322-0.005 0.191 0.1630.2690.1475 0.307 0.1390.192-0.026 0.339 0.3000.023-0.072 0.394 0.0130.233神经网络的阈值是用来激活神经元而设置的一个临界值,有多少个神经元就会有多少个阈值,则第二层神经元的阈值为 的矩阵:-0.0580.2120.2300.2640.3450.3910.2840.190 同理,第二层与第三层之间的权值 为 的随机数矩阵:0.364-0.0910.3310.3220.176-0.0840.0810.1440.190-0.0390.1420.0040.2140.20 -0.075-0.003 同理,第三层阈值 为 的矩阵: -0.038 0.002步骤4、计算第一层神经元的输入与输出假设第一层神经元中放置的是线性函数,所以网络第一层输入和输出都等于实际输入样本的值, 所以第一层输出值 。但是,因为输入和输出样本的量纲以及量级都不相同,所以须进行归一化处理。步骤5、计算第二层神经元的输入对于第二层,神经元的输入是第一层所有的神经元的值与阈值的和,即 ,其中 是一个全为1的矩阵,所以 是一个 的矩阵,很容易得出。步骤6、计算第二层神经元的输出假设第二层神经元激励函数为单极S型函数,即为 ,所以第二层神经元的输出 .所以第二层输出也是一个 的矩阵。步骤7、计算第三层的输入和输出第三层输入与第二层输入相似,即 ,所以 是一个 的矩阵。步骤8、计算能量函数 能量函数,即网络输出与实际输出样本之间的误差平方和,其目的是在达到预定误差就可以停止训练网络。 是归一化处理后的实际输出样本。则: 步骤9、计算第二层与第三层之间的权值和阈值调整量权值调整量: , 是一个 的矩阵-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同理,阈值调整量: , 是一个 矩阵: -67.628 -22.343步骤10、计算第一层与第二层之间的权值和阈值调整量 因为对于传递函数,有 , 故权值调整量: 所以 是一个 的矩阵:-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.4320.0764 -0.39 0.320 0.728-0.062 0.251 -0.066-0.730-0.101 0.323 0.1105-1.263同理,阈值调整量:所以 为 的矩阵:-7.1131.674-6.119-5.1014-3.9450.2310-0.9220 -2.335 步骤11 计算调整之后的权值和阈值 此算法是让网络沿着 变化量最小的方向搜索,所以经过一段时间的训练之后,神经网络会慢慢蜷缩收敛,直到完全拟合成目标输出值或接近目标输出值。下面是y1的神经网络训练动态图: 步骤12 还原网络输出的值因为在训练网络时,将输入和输出的样本经过了归一化的处理,所以要将 还原成原始数据的量级。 根据此算法,我们编出了matlab程序,最终拟合结果如下:可以看出结果并不理想,相对于回归模型,误差并没有减小。4.2.3模型的修正由于模型的参数没有选择好,隐含层数量不足,模拟的效果并不好,于是我们重新建立了神经网络模型。最大训练次数5000学习速率0.05隐含神经元层数3 训练目标误差第一层隐含神经元个数8第二层隐含神经元个数12第三层隐含神经元个数8第一层隐含神经元传递函数Logsig函数第二层隐含神经元传递函数Tansig函数第二层隐含神经元传递函数Logsig函数通过编写MATLAB工具箱程序,训练得到了下面的结果: 由此得到的结果从视觉上非常完美。我们用训练得到的网络验证了全部数据并提取了误差: 可以得到只有几个数据不是那么精确。 评价与总结我们抽取了部分数据,分别检验了回归模型和通过神经网络算法训练得到的网络,得到了误差,在此我们进行了具体的对比:Y1各种方法的误差如下表所示:多元线性回归多元非线性回归神经网络-85.0904821787169-95.619319253.29699779745964424.792490319265544.57531591.03267427223443-306.965839850488-118.22418911.41849261959817387.691377753137591.00044611.40769147165338380.142282029398578.5609411-0.344012787002839-199.616107238563-80.20782097-1.45635726638154-129.642502715347-36.23732595-0.741747572508700128.499371703981149.0573092-2.38062294681544-154.070310811591-285.4248746-0.983439225507443-86.1574120256765-81.42055792-0.0768780510191220113.101241465220-20.579109321.6425826979537497.5809506531405-109.527153-4.6059375200536521.778516647382020.663342040.315506918113215-75.749252079431697.977658720.0213160796229772160.434115149431193.9322939-7.7932043682303145.4330777517973-48.750289850.962562717276339-89.5074215609946-72.65979483-0.19313149656832437.1321320006323231.9745218-1.98561499149395131.16015604519298.35915699-31.6251837157761153.754072389387-32.9530268-2.43601124801970Y2各种方法的误差如下表所示:多元线性回归多元非线性回归神经网络-30.39870495391526.1525970990.0872585163590145-12.9490793890884-19.38873073-0.020593488054542210.7510720967549-21.497942390.0911796316330200-11.0095339782298-44.879570220.118073363295188-39.8078620699404-59.12548187-0.097385611231889951.251425016627532.2781036-0.201480587958699-28.5404648955414-52.64580805-0.250510979385689-56.9811916534564-64.47243588-0.32865283829165137.467886252401440.39669528-0.04589381300257864.8985069551000811.68747331-0.0897937770061654-7.329402627026503.55897192-3.54122679937848-19.8734750618800-3.304613092-0.984659461024723-11.7901706398783-28.058524750.050955328372959119.9219390377847-12.39364672-0.0234371252933647-5.39651527410106-23.63857455-0.28840509353831440.756577892204742.437521240.467194393960085-30.9074590838061-41.38639041-0.11444377393680612.1920784918839-25.40561238-0.0272714852628626-38.3271965029317-43.61624021-0.986235253808523-18.71638003971565.022890952-0.993467108071047 从对比中我们可以得出,无论是通过模拟的视觉效果上还是最后的误差对比中,我们可以明显的得出,神经网络相对于回归模型误差小,得到的结果更加的精确。而回归模型中非线性相对于线性拟合的效果更好一些,对于和,不管是哪种模型,对于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】巨军让,卓戎.BP神经网络在Matlab中的方便实现.新疆石油学院学报.2008.2 【12】周开利,康耀红编著.神经网络模型及其MATLAB仿真程序设计.2006:10-43 附录:程序1x1=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); 程序2M文件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);endfunction 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);endx=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); 程序3function main()clcclear 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 SSEE0,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; endMid=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-+);程序4clc;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.05net.trainParam.lr=0.05;%最大训练次数为5000次net.trainParam.epochs=5000;%均方误差net.tr
收藏