【预测模型】基于遗传算法优化BP神经网络房价预测matlab源码

216 阅读4分钟

一、简介

为了提高BP神经网络预测模型对混沌时间序列的预测准确性,提出了一种基于遗传算法优化BP神经网络的改进混沌时间序列预测方法.利用遗传算法优化BP神经网络的权值和阈值,然后训练BP神经网络预测模型以求得最优解,并将该预测方法应用到几个典型混沌时间序列和房价时间序列进行有效性验证.仿真结果表明,该方法对典型混沌时间序列和房价具有较好的非线性拟合能力和更高的预测准确性.

二、源代码

clear all
clc
close all
tic
%% 全局变量
global pn
global tn
global R
global S2
global S1
global S
S1 = 12;
%% 数据处理
%% 数据处理
data1 =xlsread('数据.xls');%导入数据
%% 训练数据
input = data1(1:9,2:7);%训练输入
output = data1(1:9,8);%训练输出
input_test = data1(10:end,2:7);%测试输入
output_test= data1(10:end,end);%测试输出
output_test =    output_test';
M =size(input,2); %输入节点个数
N =size(output,2);%输出节点个数
%% 训练数据
p = input';
t = output';
[pn,minp,maxp,tn,mint,maxt] =premnmx(p,t);%归一化
%% 建立神经网络
net = newff(minmax(pn),[S1,1],{'tansig','purelin'});
net.trainParam.show = 50;
net.trainParam.lr = 0.1;
net.trainParam.epochs = 1000;
net.trainParam.goal =1e-10;
[net,tr] = train(net,pn,tn);
%% 遗传操作
R = size(p,1);
S2= size(t,1);
S = R*S1+S1*S2+S1+S2;
aa = ones(S,1)*[-1 1];
popu = 50;
initPpp = initializega(popu,aa,'gabpEval');
gen = 500;
[x,endPop,bPop,trace] = ga(aa,'gabpEval',[],initPpp,[1e-6 1 1],'maxGenTerm',gen,...
   'normGeomSelect',[0.09],['arithXover'],[2],'nonUnifMutation',[2 gen 3]);
%% 画图迭代图
figure(1)
plot(trace(:,1),1./trace(:,3),'r-');
hold on
grid on
plot(trace(:,1),1./trace(:,2),'b-');
xlabel('迭代数')
ylabel('均方误差')
title('均方误差曲线图')
figure(2)
plot(trace(:,1),trace(:,3),'r-');
hold on
grid on
plot(trace(:,1),trace(:,2),'b-');
xlabel('迭代数')
ylabel('适应度函数值')
title('适应度函数迭代曲线图')
[W1,B1,W2,B2,val] = gadecod(x);
W1;
W2;
B1;
B2;
net.IW{1,1} = W1;
net.LW{2,1} = W2;
net.b{1} = B1;
net.b{2} = B2;
net = train(net,pn,tn);
k = input_test';
kn = tramnmx(k,minp,maxp);
s_bp = sim(net,kn);
s_bp2 = postmnmx(s_bp,mint,maxt)
toc
warning off %清除警告
%% 数据处理
data1 =xlsread('数据.xls');%导入数据
%% 训练数据
data_p = data1(1:9,2:7);%训练输入
data_t = data1(1:9,8);%训练输出
data_k = data1(10:end,2:7);%测试输入
outtest = data1(10:end,end);%测试输出
[m1,n1] = size(data_p);%训练数据的大小
[m2,n2] = size(data_t);%测试数据的大小
p = data_p';%转置 适应BP工具箱
t = data_t';%转置 适应BP工具箱
[pn,minp,maxp,tn,mint,maxt] = premnmx(p,t);%归一化
k = data_k';%测试输入装置
kn = tramnmx(k,minp,maxp);%测试输入归一化
%% BP模型
%建立网络及参数设置
S1 =10;%隐含层
net = newff(minmax(pn),[S1,1],{'tansig','purelin'});%建立网络
inputWeights = net.IW{1,1};%输入层到隐含层权值
inputbias = net.b{1};%输入层到隐含层阀值
layerWeights = net.IW{2,1};%隐含层到输出权值
layerbias = net.b{2};%隐含层到输出阀值
net.trainParam.show = 50;%迭代显示步数间隔 对结果无影响 
net.trainParam.lr = 0.1;%学习率
net.trainParam.mc = 0.9;%动量因子
net.trainParam.epochs = 10000;%最大迭代次数
net.trainParam.goal =0.00001;%训练目标
%% 训练模型
[net,tr] = train(net,pn,tn);%训练网络
nihe = sim(net,pn);%训练输出
nihe2 = postmnmx(nihe,mint,maxt);%训练输出反归一化
figure%画图
xk = 2;%线宽
plot(2006:2014,nihe2,'r-o',2006:2014,data_t,'b.-','linewidth',xk)%训练输出与拟合值的对比图
grid on%网格
legend('真实值','预测值')%图例
title('神经网预测真实值与预测值对比')%标题
xlabel('年份')%横坐标标题
ylabel('商品房平均房价')%纵坐标标题
%% 预测
s_bp = sim(net,kn);%预测
s_bp2 = postmnmx(s_bp,mint,maxt);%预测输出反归一化
s_bp2 = s_bp2';%转置
figure%画图
plot(2015:2017,outtest,'r-',2015:2017,s_bp2,'b.-','linewidth',xk)%测试输出与真实值的对比图
grid on%加网格
legend('真实值','预测值')%图例
title('神经网预测真实值与预测值对比')%标题
xlabel('年份')%横坐标标题
ylabel('商品房平均房价')%纵坐标标题
%% 误差分析

三、运行结果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

四、参考文献

[1]李松, 刘力军, and 解永乐. "遗传算法优化BP神经网络的短时交通流混沌预测." 控制与决策 26.10(2011).

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,有科研问题可私信交流。