【房价预测】基于matlab遗传算法优化BP神经网络房价预测【含Matlab源码 592期】

举报
海神之光 发表于 2022/05/29 04:43:31 2022/05/29
【摘要】 一、遗传算法及BP简介 1 概述 随着房地产市场行业快速迅猛的发展,人们越来越关注放价的走势。从宏观上来看,影响房价的因素分为房地产自身因素和房地产外部因素。自身因素主要包括:区位因素、实物因素和权益因...

一、遗传算法及BP简介

1 概述
随着房地产市场行业快速迅猛的发展,人们越来越关注放价的走势。从宏观上来看,影响房价的因素分为房地产自身因素和房地产外部因素。自身因素主要包括:区位因素、实物因素和权益因素。外部因素主要包括:人口因素、制度因素、经济因素、社会因素和国际因素。由此可看出,影响房价的因素很多。在本文的研究中,我们只选取部分影响房价的因素进行分析。
人工神经网络是基于模仿人脑系统的结构和功能,反映人脑某些特性的一种智能信息处理系统。人工神经网络具有并行处理能力、自学习和自适应等特性。同时,它还具有非线性映射、优化计算、联想记忆等功能。目前,人工神经网络已经在很多领域得到了广泛的应用。这些应用领域主要包括智能检测、非线性预测、模式识别、机器人控制等。随着人工神经网络的进一步发展和更加深入的研究,人工神经网络应用的领域越来越广泛。因此,本文提出利用遗传算法优化的 BP 神经网络来建立房价预测模型。

2 BP神经网络及遗传算法
BP 神经网络(Back Propagation Neural Network)也称为反向传播神经网络,是一种具有 3 层或 3 层以上结构的无反BP 神经网络除输入层和输出层外,还包括一个或多个隐含层,各个层神经元之间实现全连接,而同层内各神经元之间无连接。BP神经网络通过有指导的学习方式进行学习和训练。标准的BP学习算法采用误差函数按梯度下降的方法学习,使网络的实际输出值和期望输出值之间的均方误差最小。BP神经网络的学习过程主要是由输入信号正向传播和误差反向传播构成的。在正向传播时,输入信号从输入层输入,经过隐含层的逐层处理后,传递给输出层。若输出层的实际输出与期望输出不符,则转入误差反向传播过程。反向传播的过程就是由输出层向输入层逐层修正连接权值使误差减小。输入信号的正向传播与误差的反向传播过程是循环进行的。BP神经网络的训练过程就是不断调整连接权值的过程,这个过程进行到输出的均方误差达到要求的标准。
遗传算法(Genetic Algorithm, GA)是模拟生物在自然界进化过程中的遗传选择和自然淘汰的一种计算模型。它是一种具有很强的全局搜索能力和全局优化性能的算法。遗传算法主要包括选择、交叉和变异等操作。它的主要优点是鲁棒性强、简单通用,能够用于并行分布式处理。因此,将遗传算法与 BP 神经网络相结合,训练网络时先用遗传算法对神经网络的权值和阈值进行寻优,缩小搜索范围之后,再利用 BP 神经网络对问题进行求解。
在这里插入图片描述

3 BP神经网络的房价预测模型设计
3.1数据选择
在这里插入图片描述
3.2 数据预处理
本次选取数据来源有以下几个特点:第一,是数据量很小,数据总量共五百多条;第二,数据的格式不一样,有些数据以百分比来表示,有些数据处于范围1到12,而有些数据范围在0到100,因此首先需要对数据进行预处理。由于不同的数据有不同的数量级,因此为了提高网络运算速率,便于网络计算以及提高预测的准确性,需要对数据进行归一化处理。基于MATLAB我们采用mapminmax函数,输入样本归一化为:
[pn_train,ps1] = mapminmax(p_train’);
pn_test = mapminmax(‘apply’,p_test’,ps1);
其中PS1是训练样本的数据的映射,记录了训练集的归一化方法,即PS1中包含了训练数据的最大值和最小值,式中pn_test是测试样本,对于测试样本来说,预处理应该和训练样本一致,即测试样本的最大值和最小值应该是训练集的最大值与最小值。对于测试集需要同样用ps1方法进行归一化。
3.3 数据建模
3.3.1 初始化参数设定
本文采用newff来创建网络,设置隐藏神经元个数为5个,训练网络性能所采用的的函数为trainlm默认函数,其适合中型网络,对内存的需求大,但收敛速度快。设置训练次数为20000次,收敛误差为0.0000001,。初始的权值和阈值为系统默认值。
3.3.2 隐含节点数确定
本文实验选取3 层结构的BP 神经网络进行预测模型的建立。若隐层节点数太少,网络可能无法训练或性能很差;若隐层节点数太多,虽然可减小网络的系统误差,但网络训练时间延长,并且训练容易陷入局部极小点而得不到最优点,也是训练时出现“过拟合”的内在原因。因此,合理隐层节点数应在综合考虑网络结构复杂程度和误差大小的情况下用节点删除法和扩张法确定。BP神经网络的隐含层节点通常用试凑法确定,可以先设置较少的隐含层节点来训练网络,然后逐渐增加隐含层节点数,使用同一样本集进行训练,最终选取网络误差最小时对应的隐含层节点数。在实验中,往往根据经验公式得到一个粗略的估计值作为初始值,再用试凑法确定最佳节点数。常用的经验公式为:
在这里插入图片描述
其中,n为输入层节点数
3.4 模型训练与仿真
采用Matlab作为软件平台,利用神经网络工具箱函数编程实现BP神经网络预测模型的构建、训练和仿真。将收集到的样本分为2 个部分:选取前80%作为训练样本,剩下的20%数据作为测试验证样本。
经遗传算法优化的BP神经网络模型
遗传算法是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。由于BP神经网路的学习收敛速度太慢,易陷入局部极小值,网络拓扑结构不稳定等问题,因此用遗传算法优化的BP神经网络模型(GA-BP神经网络)。GA用于函数优化的目的就是发现问题的全局最优解,以此来提高预测的精度。

4.1 参数的选取
在BP神经网络中,隐层节点数的选择非常重要,他不仅很大影响了神经网络模型的性能,而且是训练时出现“过拟合”的直接原因。确定隐含层基本条件有两点:第一,隐层节点数必须小于N-1;第二,训练样本必须多余网络模型的连接权重,一般为2到10倍。对于本次实验,GA-BP神经网络采用3层网络结构,输入层神经元个数为13,隐含层神经元个数为13,输出层神经元的个数为1。
4.2 GA-BP神经网络优化的实验步骤
GA-BP神经网络的实现步骤为:
在这里插入图片描述
(1)个体编码与创建初始化种群
遗传算法是对群体进行的进化操作,设置迭代次数为100次,种群规模为10,对个体编码长度规则为:
在这里插入图片描述
其中,m为隐含层节点数,n为输入层节点数,l为输出层节点数。
(2)适应度计算
此处我们调用fun函数实现对其适应度的计算,神经网络的预测误差越小,对应的适应度函数就越小,适应度就越好。
(3)交叉和变异操作
交叉运算是遗传算法中产生新个体的主要操作过程,变异运算是对个体的某一个或某一些基因座上的基因值按某一较小的概率进行改变,也是产生新个体的一种方法。对于最优个体没有进行交叉操作,而是直接复制到下一代。通常设置交叉和变异概率为0到1之间,此处取变交叉概率为0.3,变异概率为0.1。

二、部分源代码

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('商品房平均房价')%纵坐标标题
%% 误差分析

三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]基于MATLAB的遗传算法优化的神经网络房价预测实战

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/115040203

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。