采用BP神经网络模型通过对前几日电力负荷的学习和锻炼最终输出下一日的电力负荷预测且同时输出误差程序可拓展性相当强excel表格可以自由输入数据。 电力系统负荷预测是电力系统调度、实时控制、运行计划和发展规划的前提是电网调度部门和规划部门所必须具有的基本信息。电力系统负荷预测可是个技术活电网那帮老哥每天睁眼就得知道明天要发多少电。传统方法搞预测就像拿算盘打游戏效率实在捉急。这不咱们今天用Python整点好玩的——BP神经网络预测模型直接让机器自己学习历史数据规律还能实时输出预测误差。先看数据怎么处理。老规矩数据都存在Excel里咱们用pandas三行代码就能搞定读取import pandas as pd raw_data pd.read_excel(power_load.xlsx, headerNone) print(raw_data.head())这里要注意原始数据得按时间顺序排列前N天的数据当输入最后一天当输出目标。比如用前5天预测第6天那Excel里每行就得是连续6天的负荷数据。数据预处理这块有个坑得注意电力负荷数值跨度可能很大直接扔给神经网络容易炸。咱们得做个归一化from sklearn.preprocessing import MinMaxScaler scaler MinMaxScaler(feature_range(0.1, 0.9)) normalized_data scaler.fit_transform(raw_data)这里特意把特征范围定在0.1-0.9而不是0-1是怕激活函数遇到极值时输出饱和这个trick能有效提升模型收敛速度。模型搭建环节用Keras比裸写方便得多。来看这个三层结构的核心代码from keras.models import Sequential from keras.layers import Dense model Sequential() model.add(Dense(12, input_dim5, activationrelu)) # 输入层5个节点对应5天数据 model.add(Dense(8, activationrelu)) # 隐藏层尝试不同节点数 model.add(Dense(1, activationlinear)) # 输出未来1天的预测值 model.compile(lossmse, optimizeradam)这里隐藏层用ReLU激活比传统的sigmoid强在哪实验发现对于负荷预测这种连续值回归问题ReLU能更快收敛还不容易梯度消失。不过要注意初始学习率可能需要微调电网数据常有周期性突变学习率太高容易预测曲线抽风。采用BP神经网络模型通过对前几日电力负荷的学习和锻炼最终输出下一日的电力负荷预测且同时输出误差程序可拓展性相当强excel表格可以自由输入数据。 电力系统负荷预测是电力系统调度、实时控制、运行计划和发展规划的前提是电网调度部门和规划部门所必须具有的基本信息。训练时有个骚操作——早停法from keras.callbacks import EarlyStopping early_stop EarlyStopping(monitorval_loss, patience20) history model.fit(X_train, y_train, epochs1000, validation_split0.2, callbacks[early_stop])设置20轮耐心值验证损失不降就停防止过拟合。实测发现负荷数据训练到150轮左右基本就到瓶颈了硬跑1000轮纯属浪费电。预测结果要记得反归一化predicted model.predict(X_test) inverse_pred scaler.inverse_transform( np.concatenate((X_test, predicted), axis1))[:, -1]这里有个细节反归一化时要把测试数据输入部分和预测值拼接起来因为之前的归一化是针对整行数据做的。要是直接拿预测值反归一化结果能偏到姥姥家。误差计算强烈推荐用MAPE平均绝对百分比误差def mape(y_true, y_pred): return np.mean(np.abs((y_true - y_pred) / y_true)) * 100 print(f预测误差{mape(actual_load, inverse_pred):.2f}%)这比单纯的MSE直观多了领导一看7.2%的误差就知道预测靠不靠谱。有个坑要注意当真实值为零时会除零异常好在电力负荷不可能为零放心用。扩展性方面想增加预测天数改改input_dim和输出层就行。数据格式不变的话换新Excel文件就能预测不同地区负荷。要是想玩点花的在隐藏层后面接个LSTM层立马变身时序预测加强版——不过那又是另一个故事了。