BP实现数据预测

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情

前言

   近日受友人所托助力电力负荷预测试验,本篇结合《巧借循环对神经网络输出值控制得理想值【MATLAB】》(juejin.cn/post/707377…) 使用部分数据(由于复现文章导致数据不全)进行原理上的数据模拟进行试验,整体框架可供大家参考。

BP流程

   基于误差反向传播(Back Propagation,简称BP)可以看成正向传播信息与反向传播信息两个部分。当数据通过建立的BP神经网络模型,其输出值与实际值的误差大于我们规定的误差时,数据将反向传播。BP算法核心原理就是对各个节点输入变量求偏导,使得输出值与实际值误差达到最小,从而重新赋予全值与阈值。数据从输出层传送到中间的隐含层来调整其权值与阈值,并在输入层将权值与阈值重新定义再次正向传播数据。直至误差值小于规定值时,完成-组历史数据的学习。 基本流程:

  1. 开始
  2. 输入数据矩阵
  3. 数据预处理,并进行分类
  4. 建立网络
  5. 采用BP算法进行训练,形成模型网络权值
  6. 基于误差反向传播完成负荷预测
  7. 输出预测结果
  8. 结束

仿真

试验数据表: image.png 数据的选择和处理:
(1) 数据的选取与预处理
(2) 训练样本的选取
(3) 网络的初始化
神经网络算法模型
(1) 数据计算预处理
(2) 生成的预测矩阵
(3) 拆分数据集以创建培训和测试集
(4) 基于神经网络模型的预测
(5)产生的周线图\

demo 实现

整体框架可参考前言中所介绍,这里逐步介绍一下:\

  1. xlsread读取记录表中的数据并save方便调用
  2. 构造一个“死循环”:while 1 == 1 ---- end 结构
  3. 如下制作虚拟数据
new_data2014 = 1.14.*old_datas;
new_data2015 = 1.16.*old_datas;
new_data2016 = 1.18.*old_datas;
复制代码
  1. 使用mapminmax 进行数据归一化(-1 1)之间
  2. 选择输入和输出
data_x = [X(1:72,3:5)';X(1:72,7:10)'];
data_y = X(1:72,6:6)';
复制代码
  1. 搭建网络
  2. 构造2017年数据,并重复第4和5步计算处理2017年数据
  3. 通过sim 函数得到预测值(test_Y)
  4. 计算预测值和真值的平均绝对误差
mae = mean(abs(真值 - 预测值))
复制代码
  1. 作判断if(当mae< 0.0176)
  2. 满足时跳出while 1 ==1 ----- end循环
  3. 存储 BP训练的网络(save MyNet.mat net)
  4. 新建.m文件并调用网络(MyNet.mat)
  5. 绘制2017年数据

猜你喜欢

转载自juejin.im/post/7088238774160736269