回归分析2:BP神经网络之matlab实现

您所在的位置:网站首页 神经网络线性回归matlab 回归分析2:BP神经网络之matlab实现

回归分析2:BP神经网络之matlab实现

2024-06-26 07:02| 来源: 网络整理| 查看: 265

U=guiyi'; for i = 1:12 p=U(relieff(1:i),1:38); p(i+1,:)=U(13,1:38); t=U(14,1:38); P_test=U(relieff(1:i),39:51); P_test(i+1,:)=U(13,39:51); for xun = 1:2000 net = newff(minmax(p),[9,1],{'tansig','purelin'},'trainlm'); net = init(net); net.trainParam.show = 10; net.trainParam.epochs = 5000; net.trainParam.goal = 1.0e-3; net.trainParam.lr = 0.01; net.divideFcn = ''; [net,tr] = train(net,p,t); T1 = sim(net,P_test) % BP神经网络的仿真结果 f = fuji(14,39:51); % g = T1(:,38:50); s = []; for a = 1:13 s(a) = abs(T1(a) -f(a))/abs(f(a)) %相对误差 R1(a) = power((f(a) - T1(a))/f(a),2); end means = mean(abs(s)); RMS = power(sum(R1)/13,0.5); Result(xun,1:13) = T1; Result(xun,14) = means; Result(xun,15) = RMS; p1=polyfit(f,T1,1);%一次拟合; yfit=polyval(p1,f);%求拟合后的y值; mdl = fitlm(f,T1);%求一元线性拟合的参数 r2 = mdl.Rsquared.Ordinary;% Result(xun,16) = r2; T2 = sim(net,p) % BP神经网络的仿真结果 f2 = fuji(14,1:38); % g = T1(:,38:50); s2 = []; for a2 = 1:38 s2(a) = abs(T2(a) -f2(a))/abs(f2(a)) %相对误差 R2(a) = power((f2(a) - T2(a))/f2(a),2); end means2 = mean(abs(s)); RMS2 = power(sum(R1)/38,0.5); Result2(xun,1:38) = T2; Result2(xun,39) = means2; Result2(xun,40) = RMS2; p2=polyfit(f2,T2,1);%一次拟合; yfit2=polyval(p2,f2);%求拟合后的y值; mdl2 = fitlm(f2,T2);%求一元线性拟合的参数 r3 = mdl.Rsquared.Ordinary;% Result(xun,16) = r3; xun end end

可得到神经网络拟合曲线图。

设计 BP 网络的相关函数

1)神经元变换函数:线性变换函数 purelin、对数 S 型变换 函数 logsin、双曲线正切 S 型变换函数 tansig。

2)BP 网络生成函数 newff :它是用来生成BP 神经网络并 进行初始化 , 可以确定网络层数 、每层中的神经元数和变换 函数。 这个函数有六个输入参数, 分别是:输入向量的范围、 网络结构、各层变换函数、训练算法函数、学习函数和性能函 数。输出参数为所生成的 BP 神经网络名 net 。 其语法为:net =newff(PR, [ S1 , S2 …, SN1] , [ TF1, TF2 , …TFN1] , BTF, BLE, PF) 其中:PR是一个由每个输入向量的最大最小值构成的 Rx2 矩阵, R 为输入神经元数目。 Si 是第 i 层网络的神经元个数, 网络共有 N1 层。 TFi 是第 i 层网络神经元的变换函数, 缺省为 tansig. BTF 是 BP 训练算法函数, 缺省为 trainlm. BLF 是学习函数, 缺省为 learngdm. PF 是性能函数, 缺省为mse. newff 在确定网络结构后会自动调用初始化函数 init , 用 缺省参数来初始化网络中各个权值和阈值 , 产生一个可训练 的前馈网络, 即该函数的返回值 net。 在 MATLAB 中, 神经网 络 net 当做对象(object)处理, 其属性用结构来定义。

3)初始化函数 init :它是对网络的连接权值和阈值进行 初始化。 newff 在创建网络对象的同时, 自动调动初始化函 数, 根据缺省的参数对网络进行连接权值和阈值初始化。

4)学习函数:提供多种学习函数, 用来修正权值和阈值。 基本的学习函数有:learngd 、 learngdm。

5)性能函数:它是用来计算网络的输出误差 。 为训练提 供判据, 包括:函数 mae , 计算网络的平均绝对误差;函数 mse, 计算网络的均方误差;函数 msereg , 计算均方误差和权/ 阈值的加权;函数 sse , 计算网络的均方误差和。

6)训练函数 train : BP 网络的训练初始化后, 可对它进行训练。 在MATLAB 中训练网络有两类模式:逐变模式和批处理模式。 在逐变模 式中, 每输入一个学习样本就根据网络性能指标函数对连接 权值和阈值更新一次。 在批处理模式中, 所有的学习样本都 学习完成后, 连接权值和阈值才被更新一次。 使用批处理模 式不需要为每一层的连接权值和阈值设定训练函数, 而只需 为整个网络指定一个训练函数, 使用起来相对方便, 而且许 多改进的快速训练算法只能采用批处理模式。 训练网络的函数是 train 按设置的 net.trainFcn 和 net. trainParam 参数来训练网络, 采用批处理方式进行网络的权值 和阈值修正, 最终达到设定的网络性能指标的要求。

7)BP 训练算法函数:它是根据网络的输入、目标期望输 出, 对由函数 newff 生成的 BP 网络进行计算, 修正其权值和 阈值, 最终达到设定的网络性能指标的要求。 不同的训练算 法函数对应不同的训练算法, 如 traingd 对应最基本梯度下降 法;traingdm 带有动量项的梯度下降法;traingdx 带有采用动量项的自适应算 法;用共轭梯度 法进行训练 的函数有: traincgf(采用 Fletcher -Reeves 搜索技术)、traincgp(采用 Polak -Ribiers 搜索技术)、traincgb(采用 Powell -Beale 搜索技术); trainbfg 是基于拟牛顿法的训练函数;trainlm 是用 Levenberg - Marquardt 数值优化法来实现误差反传算法的。 各算法的快 慢及内存要求依问题的复杂程度、训练集大小、网络的大小 及误差要求的不同而有所不同。 一般来讲, 对于含有几百个 权重的网络, Levenberg -Marquardt 算法有最快的收敛速度。 该算法需要大的内存, 可通过增大参数 mem -reduc 的值来 减少内存的使用量。 需要注意的是:减少内存使用量实际是 通过将雅可比矩阵分解为一个个小的亚矩阵来实现的, 每次 只计算其中一个亚矩阵, 这势必增加计算时间, 所以, 如果有 足够的内存, 应该将 mem -reduc 参数设为 1, 即每次都计算 整个雅可比矩阵。 拟牛顿算法的速度仅次于 Levenberg - Marquardt 算法而比共轭梯度法的速度快, 内存的需要量也介 于这二者之间。 在共轭梯度法中, traincgb 需要的内存数量最 多, 但通常也能最快收敛。 总地来讲, 基于共轭梯度法、拟牛 顿算法和 Levenberg-Marquardt 法等数值优化算法的训练函 数的效率比基于启发式算法的 traingd 、traingdm、traingdx 的效 率高。 以上的训练算法函数均在网络生成函数 newff 中预先 设置。

8)仿真函数 sim:可以用来计算网络在给定输入下的输 出。

9)绘图函数 poltperf :可以用来计算网络性能曲线

 

 

 

 

参考文献:罗成汉. 基于MATLAB神经网络工具箱的BP网络实现[J]. 计算机仿真, 2004, 21(5):109-111.



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3