基于BP神经网络的上海日客流量预测摘要:地铁作为短途出行工具,影响客流量的主要因素源自乘客的主观选择,而这种主观选择性又很大程度上受到天气,节假日等因素影响。根据这些因素采集足够多的样本,利用BP网络对数据进行训练及预测,结果比较可靠,可为相关部门及顾客出行提供预测客流量作为参考。在此基础上利用GUI强大的人际界面设计功能,设计出具有良好交互性的预测平台。关键词:地铁GUIBP网络1概论上海轨道交通,又称上海地铁,其第一条线路于1995年4月10日正式运营。截止2013年01月01日,上海轨道交通全路网开通运营12条线、291座车站,运营里程达420公里。作者研究了2012年全年每日的客流量,发现日客流量分布大体从400万至700万人次之间。其客流量特点大致可归纳为如下:(1)乘客出行受到许多不可预知因素的影响,故影响日客流量的因素比较复杂。(2)影响客流量的各因素与流量之间呈现非线性相关关系。但是各影响因素相互之间又存在着相关联系。地铁日客流量的这些特点,正好适应了神经网络的性能。所以从理论上讲,进行地铁日客流量的预测,神经网络是一个比较优越的研究方法。基于以上,本文利用4层BP神经网络对采集的54组数据进行合理的训练并进行仿真。2BP网络结构BP网络是一种具有3层或3层以上的单向传播神经网络,包括输出层、中间层(隐层)和输入层。BP神经网络是一种多层网络的“逆推”学习算法。其基本思想是,学习过程由信号的正向传播与误差的反向传播两个过程组成。正向传播时,输入样本从输入层传入,经隐层逐层处理后,传向输出层。若输出层的实际输出与期望输出(教师信号)不符,则转向误差的反向传播阶段。误差的反向传播是将输出误差以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。这种信号正向传播与误差反向传播的各层权值调整过程,是周而复始地进行的。权值不断调整过程,也就是网络的学习训练过程。此过程一直进行到网络输出的误差减少到可以接受的程度,或进行到预先设定的学习次数为止[1]。2.1网络输入变量的选取建立模型的首要问题是自变量的选择,它是建模成功的基础。在预测时,模型中若包含与因变量即预测对象关系不大的因素或者对预测对象影响不明显的因素,既会增大计算分析的工作量又会降低预测的精度;反之,若选择的自变量虽然对预测对象影响很大,但彼此之间高度线性相关,则会导致一系列的错误,使模型无法用于预测。选择自变量时要注意依据两条准则:一是选择的自变量应是与那些预测对象密切相关的因素;二是所选择的自变量之间不能有较强的线性关系。依据这两条准则选定的输入变量包括以下四维数据:上海当日是否有雨、当日的温度、是否为节假日以及当日是星期几。2.2输出层的确定由本系统的功能可确定输出节点为一个,即上海地铁的日客流量。2.3隐层的确定确定最佳隐层节点数的一种常用方法称为试凑法,其计算公式为m=n+l+式中:m为隐层节点数,n为输入层节点数,l为输出层层节点数,为1~10之间的常数。得隐层节点数4~13个,最后根据训练结果对BP网络进行调整,确定隐层节点的个数。2.4基于Matlab的BP神经网络改进算法在本文中,旅游交通客流量神经网络模型的建立与实现都是借助Matlab提供的神经网络工具箱编程实现的。在Matlab神经网络工具箱中集成了BP网络的各种算法。改进BP算法及其相应的训练函数有:附加动量法(traindm)、自适应学习速率法(traingda,traingdx)、RPROP方法(trainrp)、共扼梯度法(traincgf,traincgp,traincgb,trainscg)、拟牛顿法(trainbfg)以及Levenberg-Marquardt方法(trainlm)。编程中通过采用不同的训练函数训练网络,实现了对不同改进BP算法的使用[2]。3Matlab设计流程分析3.1样本的选择样本的数量是神经网络建模的质量保障,一个神经网络模型性能的优劣最主要的体现就是它的泛化能力。神经网络模型的泛化能及,即当输入网络遇到未“见过”的样本,他也能映射出正确的输出。保障网络泛化能力的必要条件是:样本的数量要足够大,一般讲,样本与隐层结点须相互匹配。总之,只有把充分的“知识”让神经网络学习、领会,才能有归纳推理能力。在建模的过程中,要把样本分为训练样本和测试样本两部分,测试样本用于对所建的网络模型的检验和测试。本文使用上海市2012年4月1日至2012年5月24日的地铁日客流作为样本数据。通过控制Slider的值来改变训练样本和测试样本占总样本数量的比例。原始样本数据见表1。表1原始样本由图,本文的输入数据包括当日是星期几、是否是节假日、上海当日是否有雨或雪及上海当日的温度,输出数据则为当日的客流量。由于训练样本和测试样本的数量是根据Slider对象的值由外部给定,默认为原样本数据的70%作为训练数据,30%作为测试数据。从外部读入数据及设计采集样本的程序代码为:[filename,pathname,filterindex]=uigetfile({'*.xls'},'selectdata-file');str=[pathnamefilename];data=xlsread(str);[row,col]=size(data);a=randperm(col);set(handles.slider1,'sliderstep',[1/(col-1)0.1]);s_v=get(handles.slider1,'value');P_train=data(1:row-1,a(1:round(col*s_v)));T_train=data(row,a(1:round(col*s_v)));P_test=data(1:row-1,a(round(col*s_v)+1:end));T_test=data(row,a(round(col*s_v)+1:end));其中s_v为Slider的属性值,P_train为收集的训练样本输入数据,T_train为对应的训练样本输出数据,P_test为收集的测试样本输入数据,T_test为对应的测试样本输出数据。3.2网络设计对数据进行预处理后,接下来需要利用这些数据创建一个BP网络并进行训练、测试和预测。由于输入层神经元为9个,输出层神经元为1个及本文作者的反复试验,在本文中的BP神经网络隐层个数为两个,隐层神经元个数依次分别为9个和6个,隐层及输出层的传递函数分别为tansig、tansig及purelin。网络训练的程序代码为:net=newcf(minmax(P_train),[9,6,1],{'tansig','tansig','purelin'},'trainlm');net.trainParam.show=1000;net.trainParam.lr=0.1;net.trainParam.mc=0.9;net.trainParam.epochs=300;net.trainParam.goal=1e-3;net=train(net,P_train,T_train);4GUI设计图1如图1所示,在整个人机界面中用户可以首先选择“导入数据”按钮,弹出导入数据的对话框,通过点击“打开”按钮来选择数据,导入数据完成后界面会弹出数据导入完成的对话框,点击“训练”按钮,系统就会按照Slider确定的比例对导入的数据进行训练,在训练完成后点击“仿真按钮”系统会自动对相应的测试数据进行仿真测试,将测试数据的仿真结果和实际数据相对比体现在坐标轴上。如图2。图2通过真实值与仿真值的比较我们可以发现该系统的预测结果是比较准确的。如果测试的结果误差较大,可以改变网络结构的参数,通过比较不同网络结构下的预测结果来选择最佳的BP网络模型。网络训练之后在界面上的预测区域可以自行的输入相关输入变量点击“预测”按钮,从而使预测更加人性化。如图3。图3在本模型中输入输出数据的个数是由Slider控件的值确定的,使用鼠标拖动可以改变输入输出数据的个数[3],总而使系统更加人性化,使用户获得跟好的人机体验。如图4,当Slider的值为0.862即用于训练的数据占总样本数据的86.2%,用于测试的数据占总样本数据的14.8%,也就是说用于测试的样本数量为47个,而用于测试的数据个数为7个。图4总结本文的主要任务是使用Matlab在GUI平台上设计一款具有良好人机互动性的基于BP神经网络的上海地铁日客流量预测。综上所述,本系统具有良好的人机交互性,预测结果也较为满意,基本完成预定目标。参考文献.[1]徐国根,贾瑛.模式识别与智能计算的MATLAB实现[M].北京:北京航空航天大学出版社,2012.[2]孙崎峰,孙晓峰等.基于改进BP神经网络的公路旅游客流量预测[D].湖南:中南大学,2008[3]李显宏.MATLAB7.x界面设计与编译技巧[M].北京:电子工业出版社,2006.