MATLAB仿真bp神经网络预测电力负荷 商品形式:程序 实现功能:使用前几日负荷数据预测未来负荷数据 使用bp神经网络 得到误差分析图
电力负荷预测这活儿挺有意思的,咱们今天用MATLAB整点实际的。先说说思路:拿前7天的负荷数据当输入,预测第8天的数据。BP神经网络这玩意儿虽然老派,但处理时间序列预测还是能打的。
先看数据预处理部分。咱们得把原始数据归一化到[-1,1],MATLAB自带的premnmx函数贼好用:
[inputn,inputps] = premnmx(input); [outputn,outputps] = premnmx(output);归一化这步千万不能省,不同量纲的数据直接扔给神经网络,训练效果绝对扑街。premnmx函数自动处理缩放比例,inputps结构体里存着原始数据的最大最小值,预测完记得用postmnmx反归一化。
网络结构是关键,咱们试试三层的经典配置:
net = newff(inputn, outputn, [10,8], {'tansig','tansig','purelin'}, 'trainlm'); net.trainParam.epochs = 1000; net.trainParam.goal = 1e-5;这里隐藏层设了10和8个节点,别照搬啊各位!实际得用交叉验证慢慢调。trainlm训练算法收敛快,但数据量大的时候内存可能撑不住,这时候可以换trainscg。
训练过程咱们加个进度条看着踏实:
net.trainParam.showWindow = true; net = train(net, inputn, outputn);注意看训练误差曲线,要是出现剧烈抖动,八成是学习率设高了。MATLAB默认自适应调整其实挺智能的,新手别手贱乱改参数。
预测完得画个对比图才有说服力:
plot(1:length(real_load),real_load,'b-o',1:length(predict_load),predict_load,'r-*') legend('真实值','预测值') title('电力负荷预测效果') xlabel('时间点');ylabel('负荷量')这图一出来,老板能不能点头就看曲线贴合程度了。别光顾着好看,误差分析才是重头戏:
error = predict_load - real_load; figure histogram(error,20) title('预测误差分布') xlabel('误差值');ylabel('频次')误差直方图要是呈现正态分布那最好不过,要是出现明显偏移,说明模型存在系统偏差,得回去检查数据预处理或者网络结构。
最后说个坑:时间序列预测千万要注意数据顺序!之前有个哥们儿把数据打乱训练,结果预测出来完全没法看。记住用con2seq函数把数据转成时序格式,别让神经网络误会了数据间的先后关系。
完整代码大概两百行左右,核心就这些。自己跑的时候注意调整滑动窗口大小,7天不是金标准,有的场景用3天效果反而更好。预测这玩意儿就跟炒菜似的,火候得自己慢慢试。