首页 > 其他分享 >改进bp神经网络

改进bp神经网络

时间:2022-10-10 16:06:38浏览次数:45  
标签:... end ForeDate Temp SampleDemand SamplePrice 改进 神经网络 bp

close all;
clear all;
clc;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 2000年前2个月的电价数据作为样本,3月的数据作为检验,对4月的电价进行预测 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
load price.txt;
load demand.txt;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 预测日类型(result: invalid)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
WE=4;
for i=1:366
if rem(i,7)==0
DataType(i) = 0.9/WE;
continue;
end;
if rem(i,7)==1
DataType(i) = 0.5/WE;
continue;
end;
if rem(i,7)==2
DataType(i) = 0.4/WE;
continue;
end;
if rem(i,7)==3
DataType(i) = 0.8/WE;
continue;
end;
if rem(i,7)==4
DataType(i) = 0.9/WE;
continue;
end;
if rem(i,7)==5
DataType(i) = 0.9/WE;
continue;
end;
if rem(i,7)==6
DataType(i) = 0.9/WE;
continue;
end;
end;N = 60; %学习样本数
ForeOutput =[];
for ForeDate = 85:91;%预测日期
SampleMaxDate = ForeDate-1;%最大样本

% 电价数据归一化处理
SamplePrice = price(1:ForeDate,:);
MaxPrice=zeros(1,24);
MinPrice=ones(1,24)*100;
for i=1:SampleMaxDate
for t=1:24
if MaxPrice(t)<SamplePrice(i,t)
MaxPrice(t)=SamplePrice(i,t);
end;
if MinPrice(t)>SamplePrice(i,t)
MinPrice(t)=SamplePrice(i,t);
end;
end;
end;
for t=1:24
SamplePrice(:,t) = (SamplePrice(:,t)-MinPrice(t))/(1.5*MaxPrice(t)-MinPrice(t));
end;

% 电价数据星期趋势消除
for i=15:ForeDate
Temp = [];
Temp = SamplePrice(i-14:i-1,:);
PriceAvg(i,:) = sum(Temp,1)./14;
SamplePrice(i,:) = SamplePrice(i,:)./PriceAvg(i,:);
end;

% 负荷数据归一化处理
SampleDemand = demand(1:ForeDate,:);
MaxDemand = zeros(1,24);
MinDemand = ones(1,24)*100;
for i=1:ForeDate
for t=1:24
if MaxDemand(t)<SampleDemand(i,t)
MaxDemand(t)=SampleDemand(i,t);
end;
if MinDemand(t)>SampleDemand(i,t)
MinDemand(t)=SampleDemand(i,t);
end;
end;
end;
for t=1:24
SampleDemand(:,t) = (SampleDemand(:,t)-MinDemand(t))/(1.5*MaxDemand(t)-MinDemand(t));
end; IN_N = 13; %输入层神经元个数
HIDE_N = 6; %隐层神经元个数
OUT_N = 1; %输出层神经元个数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%% 神经网络训练 %%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
MaxLearnTime = 1000; %U最大学习次数
PreError=0.001; %设定误差
alpha = 0.95; %输出-隐层的学习率
beta = 0.95; %隐层-输入层的学习率 for t=1:24
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%% 神经网络样本数据 %%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
W_P=[0.5,0.6,0.7,0.8,1.5,2,0.5,0.6,0.8,1.5,4,10,1];
% W_P=[1,1,1,1,1,1,1,1,1,1,1,1,1]; for i=1:N
if t==1
Temp = [];
Temp = [SamplePrice((ForeDate-i)-8:(ForeDate-i)-7,t);...
SamplePrice((ForeDate-i)-3:(ForeDate-i)-1,t);...
SamplePrice((ForeDate-i)-7,t);...
SampleDemand((ForeDate-i)-8:(ForeDate-i)-7,t);...
SampleDemand((ForeDate-i)-2:(ForeDate-i),t);...
SampleDemand((ForeDate-i)-1,t)-SampleDemand(ForeDate-i,t);...
DataType(ForeDate-i)];
else
Temp = [];
Temp = [SamplePrice((ForeDate-i)-8:(ForeDate-i)-7,t);...
SamplePrice((ForeDate-i)-3:(ForeDate-i)-1,t);...
ForeOutput(ForeDate,t-1);...
SampleDemand((ForeDate-i)-8:(ForeDate-i)-7,t);...
SampleDemand((ForeDate-i)-2:(ForeDate-i),t);...
SampleDemand((ForeDate-i)-1,t)-SampleDemand(ForeDate-i,t);...
DataType(ForeDate-i)];
end;
SampleInput(i,t,:)=[W_P(1)*Temp(1),W_P(2)*Temp(2),W_P(3)*Temp(3),W_P(4)*Temp(4),...
W_P(5)*Temp(5),W_P(6)*Temp(6),W_P(7)*Temp(7),W_P(8)*Temp(8),...
W_P(9)*Temp(9),W_P(10)*Temp(10),W_P(11)*Temp(11),W_P(12)*Temp(12),...
W_P(13)*Temp(13)];
SampleTarget(i,t)= SamplePrice(ForeDate-i,t);
end; %预测日神经网络输入
if t==1
Temp = [];
Temp = [SamplePrice(ForeDate-8:ForeDate-7,t);SamplePrice(ForeDate-3:ForeDate-1,t);...
SamplePrice((ForeDate-i)-1,t);
SampleDemand(ForeDate-8:ForeDate-7,t);SampleDemand(ForeDate-2:ForeDate,t);...
SampleDemand(ForeDate-1,t)-SampleDemand(ForeDate,t);DataType(SampleMaxDate+i)];
else
Temp = [];
Temp = [SamplePrice(ForeDate-8:ForeDate-7,t);SamplePrice(ForeDate-3:ForeDate-1,t);...
ForeOutput((ForeDate)-1,t-1);
SampleDemand(ForeDate-8:ForeDate-7,t);SampleDemand(ForeDate-2:ForeDate,t);...
SampleDemand(ForeDate-1,t)-SampleDemand(ForeDate,t);DataType(SampleMaxDate+i)];
end;
ForeInput(t,:) = [W_P(1)*Temp(1),W_P(2)*Temp(2),W_P(3)*Temp(3),W_P(4)*Temp(4),...
W_P(5)*Temp(5),W_P(6)*Temp(6),W_P(7)*Temp(7),W_P(8)*Temp(8)...
W_P(9)*Temp(9),W_P(10)*Temp(10),W_P(11)*Temp(11),W_P(12)*Temp(12),...
W_P(13)*Temp(13)];

%初始化I-H层阈值和权重
W=rand(HIDE_N,IN_N);
theta=rand(HIDE_N,1); %初始化H-O层权重和阈值
V=rand(OUT_N,HIDE_N);
gama=rand(OUT_N,1); for CurrentStudy=1:MaxLearnTime
for m=1:N
%nn输入训练数据
for i=1:IN_N
InputData(i)=SampleInput(m,t,i);
end; for k=1:OUT_N
OutputData(k)=SampleTarget(m,t,k);
end; %从输入层到隐含层
for j=1:HIDE_N
TempValue=0;
for i=1:IN_N
TempValue = TempValue+W(j,i)*InputData(i); %内积
end;
HideLayerInput(j)=TempValue+theta(j); %隐层输入
HideLayerOutput(j)=1/(1+exp(-HideLayerInput(j))); %隐层输出
end; %从隐含层到输出层
for k=1:OUT_N
TempValue=0;
for j=1:HIDE_N
TempValue = TempValue+V(k,j)*HideLayerOutput(j); %内积
end;
OutLayerInput(k)=TempValue+gama(k); %输出层输入
OutLayerOutput(k)=1/(1+exp(-OutLayerInput(k))); %输出层输出
end; %得到第m个样本的总误差
err_sqr=0;
for k=1:OUT_N
err_temp = OutputData(k)-OutLayerOutput(k);
err_sqr = err_sqr+0.5*(err_temp*err_temp);
end;
Error(m)=err_sqr; %误差由输出层向隐层反向传播,并调整权重
for k=1:OUT_N
delta(k)= OutputData(k)-OutLayerOutput(k); %误差
delta_bar(k)=delta(k)*OutLayerOutput(k)*(1-OutLayerOutput(k)); %求导数diff(f(x))=f(x)*(1-f(x))
gama(k) = gama(k)+beta*delta_bar(k); %调整输出层阈值
for j=1:HIDE_N
V(k,j) = V(k,j)+beta*delta_bar(k)*HideLayerOutput(j); %调整输出层权重
end;
end; %调整输入层至隐含层权重与阈值
for j=1:HIDE_N
sigma(j)=0;
for k=1:OUT_N
delta(k) = (OutputData(k)-OutLayerOutput(k))*OutLayerOutput(k)*(1-OutLayerOutput(k));
sigma(j) = sigma(j)+delta(k)*V(k,j)*HideLayerOutput(j)*(1-HideLayerOutput(j));
end;
for i=1:IN_N
W(j,i) = W(j,i)+alpha*sigma(j)*InputData(i); %调整权重
end;
theta(j) = theta(j)+alpha*sigma(j); %调整阈值
end;
end; error=0;
for m=1:N
error = error+Error(m);
end;
error = error/(2*N); if error < PreError
break;
end; if error < PreError*20
alpha = 0.9; %输出-隐层的学习率
beta = 0.9; %隐层-输入层的学习率
end; if error < PreError*10
alpha = 0.8; %输出-隐层的学习率
beta = 0.8; %隐层-输入层的学习率
end; if error < PreError*5
alpha = 0.5; %输出-隐层的学习率
beta = 0.5; %隐层-输入层的学习率
end;
end; % 用训练好的网络进行预测
for i=1:IN_N
InputData(i) = ForeInput(t,i);
end; %从输入层到隐含层
for j=1:HIDE_N
TempValue=0;
for i=1:IN_N
TempValue = TempValue+W(j,i)*InputData(i); %内积
end;
HideLayerInput(j)=TempValue+theta(j); %隐层输入
HideLayerOutput(j)=1/(1+exp(-HideLayerInput(j))); %隐层输出
end; %从隐含层到输出层
for k=1:OUT_N
TempValue=0;
for j=1:HIDE_N
TempValue = TempValue+V(k,j)*HideLayerOutput(j); %内积
end;
OutLayerInput(k)=TempValue+gama(k); %输出层输入
OutLayerOutput(k)=1/(1+exp(-OutLayerInput(k))); %输出层输出
end;
ForeOutput(ForeDate,t) = OutLayerOutput;
ForeResult(ForeDate-84,t) = OutLayerOutput*PriceAvg(ForeDate,t)*(1.5*MaxPrice(t)-MinPrice(t))+MinPrice(t);
ForeActual(ForeDate-84,t) = SamplePrice(ForeDate,t)*PriceAvg(ForeDate,t)*(1.5*MaxPrice(t)-MinPrice(t))+MinPrice(t);
% ForeResult(ForeDate-44,t) = OutLayerOutput*(1.5*MaxPrice(t)-MinPrice(t))+MinPrice(t);
% ForeActual(ForeDate-44,t) = SamplePrice(ForeDate,t)*(1.5*MaxPrice(t)-MinPrice(t))+MinPrice(t);
end;
end;

ForeError= 100*(ForeResult-ForeActual)./ForeActual;
[ForeResult;ForeActual;ForeError]
figure(1);
subplot(211);
plot(DataOutspread(ForeResult),'k');
hold on;
plot(DataOutspread(ForeActual),'r');
hold on;
subplot(212);
plot(DataOutspread(ForeError),'b');%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%End

标签:...,end,ForeDate,Temp,SampleDemand,SamplePrice,改进,神经网络,bp
From: https://blog.51cto.com/u_15815923/5744389

相关文章

  • 神经网络遗传算法函数极值寻优-非线性函数极值
    %%清空环境变量clccleartic%%训练数据预测数据提取及归一化%下载输入输出数据loaddatainputoutput%从1到2000间随机排序k=rand(1,4000);[m,n]=sort(k);%找出训......
  • 基于BP_Adaboost的强分类器设计-公司财务预警建模
    %%清空环境变量clcclear%%下载数据loaddatainput_trainoutput_traininput_testoutput_test%%权重初始化[mm,nn]=size(input_train);D(1,:)=ones(1,nn)/nn;%%......
  • 卷积神经网络
    卷积神经网络:CNN应用领域:CV领域、检测任务、分类与检索、超分辨率重构、医学任务、无人驾驶、人脸识别卷积网络与传统网络区别:维度:三维二维输......
  • MobPush Android For Unity
    集成准备注册账号使用MobSDK之前,需要先在MobTech官网注册开发者账号,并获取MobTech提供的AppKey和AppSecret,详情可以​​点击查看注册流程​​下载MobPush对应的.unitypackag......
  • 稀疏&集成的卷积神经网络学习
    计算机视觉研究院专栏作者:Edison_G今天主要和大家说的是分类检测过程中,一些稀疏和集成学习的相关知识,首先和大家说下图像目标定位与检测的方法分类。公众号ID|ComputerVision......
  • 干货 | 利用手持摄像机图像通过卷积神经网络实时进行水稻检测(致敬袁老)
    计算机视觉研究院专栏作者:Edison_G小农户在全球粮食供应中发挥着重要作用。随着智能手机越来越普及,它们使小农能够以非常低的低成本收集图像。在此感谢袁隆平先生的贡献,让我......
  • 新目标检测框架 | 基于改进的one-shot的目标检测
    计算机视觉研究院专栏作者:Edison_G目前在目标检测方面的进展依赖于大规模的数据集来获得良好的性能。然而,在许多场景下可能并不总是有足够的样本,从而导致当前基于深度学习的......
  • ABP.VNET
    官网文档中心地址:https://docs.abp.io/zh-Hans/abp/latest/创建项目遇到的问题1.官网下载之后选择好数据库链接打开项目报错:Volo.Abp.AbpException:Couldnotfindth......
  • webpack使用
    一、概述模块化和打包 Webpack是一个前端资源加载/打包工具。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。从图中我们可以看......
  • 使用PyG进行图神经网络的节点分类、链路预测和异常检测
    图神经网络(GraphNeuralNetworks)是一种针对图结构数据(如社交图、网络安全网络或分子表示)设计的机器学习算法。它在过去几年里发展迅速,被用于许多不同的应用程序。在这......