基于粒子群PSO改进的BP神经网络分类预测,PSO-BP分类模型

目录

背影
BP神经网络模型原理
BP神经网络的定义
BP神经网络的基本结构
BP神经网络的神经元
BP神经网络的激活函数,
BP神经网络的传递函数
粒子群改进BP神经网络的分类预测
效果图
结果分析
展望

神经网络的原理

BP神经网络的定义

人工神经网络无需事先确定输入输出之间映射关系的数学方程,仅通过自身的训练,学习某种规则,在给定输入值时得到最接近期望输出值的结果。作为一种智能信息处理系统,人工神经网络实现其功能的核心是算法。BP神经网络是一种按误差反向传播(简称误差反传)训练的多层前馈网络,其算法称为BP算法,它的基本思想是梯度下降法,利用梯度搜索技术,以期使网络的实际输出值和期望输出值的误差均方差为最小。

BP神经网络的基本结构

基本BP算法包括信号的前向传播和误差的反向传播两个过程。即计算误差输出时按从输入到输出的方向进行,而调整权值和阈值则从输出到输入的方向进行。正向传播时,输入信号通过隐含层作用于输出节点,经过非线性变换,产生输出信号,若实际输出与期望输出不相符,则转入误差的反向传播过程。误差反传是将输出误差通过隐含层向输入层逐层反传,并将误差分摊给各层所有单元,以从各层获得的误差信号作为调整各单元权值的依据。通过调整输入节点与隐层节点的联接强度和隐层节点与输出节点的联接强度以及阈值,使误差沿梯度方向下降,经过反复学习训练,确定与最小误差相对应的网络参数(权值和阈值),训练即告停止。此时经过训练的神经网络即能对类似样本的输入信息,自行处理输出误差最小的经过非线形转换的信息。

bp神经网络的神经元

神经网络是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。
神经网络由多个神经元构成,下图就是单个神经元的图1所示:
在这里插入图片描述
。。。。。。。。。。。。。。。。。。。。。。。。图1 ,神经元模型

bp神经网络激活函数及公式

在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/29edde342c3945939ad5945145ca8509.png在这里插入图片描述

BP神经网络传递函数及公式

图2是Sigmoid函数和双极S函数的图像,其中Sigmoid函数的图像区域是0到1,双极S函数的区间是正负1,归一化的时候要和传递函数的区域相对应,不然,可能效果不好
神经网络就是将许多个单一的神经元联结在一起,这样,一个神经元的输出就可以是另一个神经元的输入。
例如,下图就是一个简单的神经网络:在这里插入图片描述
在这里插入图片描述

粒子群算法的原理

粒子群优化算法(PSO)又翻译为粒子群算法、微粒群算法、或微粒群优化算法,PSO是由Kennedy和Eberhart共同提出,最初用于模拟社会行为,作为鸟群中有机体运动的形式化表示。自然界中各种生物体均具有一定的群体行为,Kennedy和Eberhart的主要研究方向之一是探索自然界生物的群体行为,从而在计算机上构建其群体模型。PSO是一种启发式算法,因为它很少或没有对被优化的问题作出假设,并且能够对非常大候选解决方案空间进行搜索。PSO算法初始化为一群随机的粒子,然后通过多次迭代找到最优解。每一次的迭代过程中,粒子通过本身所找到的最优解(被成为个体极值)和整个种群目前找到的最优解(被称为全局极值)来更新自己。也可以使用粒子本身的邻居(被称为局部极值)的极值来更新自己。

粒子群算法的主要参数

一、种群个数popsize,既算法中粒子的个数;
二、最大迭代次数gen,既算法迭代gen次后停止迭代;
三、种群维度dim,既需要优化的自变量个数;
四、种群位置pop,既每个粒子群的对应的自变量的值,一个粒子对应一组自变量,相当于一个解;
五、种群速度v,既粒子群每次迭代更新的飞行速度,粒子群位置更新的步长;
六、种群全局最优值gbest,既迭代过程中曾经出现的最优解,包括最优位置和对应的目标函数值;
七、个体最优,既每个粒子迭代过程中单个体曾经出现的个体最优解,,包括个体最优位置和对应的目标函数值;
八、个体学习因子c1,既个体最优解对粒子群飞行的影响能力;
九、全局学习因子c2,既全局最优值对粒子群飞行的影响能力;
十、惯性权重w,既个体位置所占的权重,权重越大,粒子群收敛越慢,全局搜索能力越强;

粒子群算法流程图

在这里插入图片描述

#PSO-BP模型

通过PSO优化神经网络权值阈值,实现BP神经网络的改进

基于粒子群改进的BP神经网络的分类预测

%读取数据
clc
clear
close all
clear global ver
%训练数据和预测数据
num1 = xlsread(‘train1.xlsx’,1,‘A1:H200’);
num2 = xlsread(‘train1.xlsx’,2,‘A1:D200’);
n1 = 1:40;
n2 = 51:90;
n3 = 101:140;
n4 = 151:190;
nx = [n1 n2 n3 n4];
ny = [41:50 91:100 141:150 191:200];
input_train=num1(nx,1:8)‘;
output_train=num2(nx,1:4)’;
input_test=num1(ny,1:8)‘;
output_test=num2(ny,1:4)’;

%
% global minAllSamOut;
% global maxAllSamOut;
[AllSamInn,minAllSamIn,maxAllSamIn,AllSamOutn,minAllSamOut,maxAllSamOut]=premnmx(input_train,output_train);

% Evaluating Sample
EvaSamIn=input_test;
EvaSamInn=tramnmx(EvaSamIn,minAllSamIn,maxAllSamIn); % preprocessing
% TargetOfTestSam=output_test; % add reall output of testing samples

% global Ptrain;
Ptrain = AllSamInn;
% global Ttrain;
Ttrain = AllSamOutn;

% Ptest = input_train(:,350:360);
% Ttest = output_train(:,350:360);

% Initialize BPN parameters
% global indim;
indim=8;
% global hiddennum;
hiddennum=10;
% global outdim;
outdim=4;

% Initialize PSO parameters
vmax=0.0151; % Maximum velocity
minerr=0.001; % Minimum error
wmax=0.90;
wmin=0.30;
% global itmax; %Maximum iteration number
itmax=100;
c1=2;
c2=2;
for iter=1:itmax
W(iter)=wmax-((wmax-wmin)/itmax)*iter; % weight declining linearly
end
% particles are initialized between (a,b) randomly
a=-1;
b=1;
%Between (m,n), (which can also be started from zero)
m=-1;
n=1;
% global N; % number of particles
N=20;
% global D; % length of particle
D=(indim+1)*hiddennum+(hiddennum+1)outdim;
% Initialize positions of particles
% rand(‘state’,sum(100
clock));
X=a+(b-a)*rand(N,D,1); %取值范围[-1,1] rand * 2 - 1 ,rand 产生[0,1]之间的随机数

%Initialize velocities of particles
V=0.2*(m+(n-m)*rand(N,D,1));
%
% global fvrec;
MinFit=[];
BestFit=[];

%Function to be minimized, performance function,i.e.,mse of net work 神经网络建立
% global net;
net=newff(minmax(Ptrain),[hiddennum,outdim],{‘tansig’,‘purelin’});
fitness=fitcal(X,net,indim,hiddennum,outdim,D,Ptrain,Ttrain,minAllSamOut,maxAllSamOut);
fvrec(:,1,1)=fitness(:,1,1);
[C,I]=min(fitness(:,1,1));
MinFit=[MinFit C];
BestFit=[BestFit C];
L(:,1,1)=fitness(:,1,1); %record the fitness of particle of every iterations
B(1,1,1)=C; %record the minimum fitness of particle
gbest(1,:,1)=X(I,:,1); %the global best x in population

%Matrix composed of gbest vector
for p=1:N
G(p,:,1)=gbest(1,:);
end
for i=1:N;
pbest(i,:,1)=X(i,:);
end
V(:,:,2)=W(1)V(:,:,1)+c1rand*(pbest(:,:,1)-X(:,:,1))+c2rand(G(:,:,1)-X(:,:,1));
%V(:,:,2)=cf*(W(1)V(:,:,1)+c1rand*(pbest(:,:,1)-X(:,:,1))+c2rand(G(:,:,1)-X(:,:,1)));
%V(:,:,2)=cf*(V(:,:,1)+c1rand(pbest(:,:,1)-X(:,:,1))+c2rand(G(:,:,1)-X(:,:,1)));
% limits velocity of particles by vmax
for ni=1:N
for di=1:D
if V(ni,di,2)>vmax
V(ni,di,2)=vmax;
elseif V(ni,di,2)<-vmax
V(ni,di,2)=-vmax;
else
V(ni,di,2)=V(ni,di,2);
end
end
end
X(:,:,2)=X(:,:,1)+V(:,:,2);
for ni=1:N
for di=1:D
if X(ni,di,2)>1
X(ni,di,2)=1;
elseif X(ni,di,2)<-1
X(ni,di,2)=-1;
else
X(ni,di,2)=X(ni,di,2);
end
end
end

%******************************************************
for j=2:itmax
disp(‘Iteration and Current Best Fitness’)
disp(j-1)
disp(B(1,1,j-1))
% Calculation of new positions
fitness=fitcal(X,net,indim,hiddennum,outdim,D,Ptrain,Ttrain,minAllSamOut,maxAllSamOut);
% fvrec(:,1,j)=fitness(:,1,j);
%[maxC,maxI]=max(fitness(:,1,j));
%MaxFit=[MaxFit maxC];
%MeanFit=[MeanFit mean(fitness(:,1,j))];
[C,I]=min(fitness(:,1,j));
MinFit=[MinFit C];
BestFit=[BestFit min(MinFit)];
L(:,1,j)=fitness(:,1,j);
B(1,1,j)=C;
gbest(1,:,j)=X(I,:,j);
[C,I]=min(B(1,1,:));
% keep gbest is the best particle of all have occured
if B(1,1,j)<=C
gbest(1,:,j)=gbest(1,:,j);
else
gbest(1,:,j)=gbest(1,:,I);
end
if C<=minerr, break, end
%Matrix composed of gbest vector
if j>=itmax, break, end
for p=1:N
G(p,:,j)=gbest(1,:,j);
end
for i=1:N;
[C,I]=min(L(i,1,:));
if L(i,1,j)<=C
pbest(i,:,j)=X(i,:,j);
else
pbest(i,:,j)=X(i,:,I);
end
end
V(:,:,j+1)=W(j)V(:,:,j)+c1rand*(pbest(:,:,j)-X(:,:,j))+c2rand(G(:,:,j)-X(:,:,j));
%V(:,:,j+1)=cf*(W(j)V(:,:,j)+c1rand*(pbest(:,:,j)-X(:,:,j))+c2rand(G(:,:,j)-X(:,:,j)));
%V(:,:,j+1)=cf*(V(:,:,j)+c1rand(pbest(:,:,j)-X(:,:,j))+c2rand(G(:,:,j)-X(:,:,j)));
for ni=1:N
for di=1:D
if V(ni,di,j+1)>vmax
V(ni,di,j+1)=vmax;
elseif V(ni,di,j+1)<-vmax
V(ni,di,j+1)=-vmax;
else
V(ni,di,j+1)=V(ni,di,j+1);
end
end
end
X(:,:,j+1)=X(:,:,j)+V(:,:,j+1);
for ni=1:N
for di=1:D
if X(ni,di,j+1)>1
X(ni,di,j+1)=1;
elseif X(ni,di,j+1)<-1
X(ni,di,j+1)=-1;
else
X(ni,di,j+1)=X(ni,di,j+1);
end
end
end

end
disp(‘Iteration and Current Best Fitness’)
disp(j)
disp(B(1,1,j))
disp(‘Global Best Fitness and Occurred Iteration’)
[C,I]=min(B(1,1,:));
% simulation network 网络拟合
for t=1:hiddennum
x2iw(t,:)=gbest(1,((t-1)indim+1):tindim,j);
end
for r=1:outdim
x2lw(r,:)=gbest(1,(indimhiddennum+1):(indimhiddennum+hiddennum),j);
end
x2b=gbest(1,((indim+1)*hiddennum+1)😄,j);
x2b1=x2b(1:hiddennum).‘;
x2b2=x2b(hiddennum+1:hiddennum+outdim).’;
net.IW{1,1}=x2iw;
net.LW{2,1}=x2lw;
net.b{1}=x2b1;
net.b{2}=x2b2;
[BPoutput1,error1] = bpp();
%% BP网络训练
%网络进化参数
net.trainParam.epochs=30;
net.trainParam.lr=0.01;
net.trainParam.goal=0.0000001;
net.trainParam.show=100;
net.trainParam.showWindow=1;
tic
%网络训练
%[net,per2]=train(net,AllSamInn,AllSamOutn);
net=train(net,AllSamInn,AllSamOutn);
% nettesterr=mse(sim(net,Ptest)-Ttest);
% testsamout = postmnmx(sim(net,Ptest),minAllSamOut,maxAllSamOut);
% realtesterr=mse(testsamout-TargetOfTestSam)
toc
EvaSamOutn = sim(net,EvaSamInn);
EvaSamOut1 = (postmnmx(EvaSamOutn,minAllSamOut,maxAllSamOut));%反归一化
for i=1:40
EvaSamOut(i)=find(EvaSamOut1(:,i)==max(EvaSamOut1(:,i)));
output_test1(i)=find(output_test(:,i)==max(output_test(:,i)));
end

error=EvaSamOut-output_test1;
errormape=(EvaSamOut-output_test1)./output_test1;

figure(1)
grid
hold on
plot((BestFit),‘r’);
title(['粒子群算法优化bp ’ ‘最优代数=’ I]);
xlabel(‘进化代数’);ylabel(‘误差’);

disp(‘适应度变量’);

figure(2)
grid
plot(EvaSamOut,‘:og’)
hold on
plot(BPoutput1,‘:ob’)
hold on
plot(output_test1,‘-*r’);

legend(‘粒子群优化BP预测输出’,‘BP预测输出’,‘期望输出’)
title(‘粒子群优化BP网络预测输出’,‘fontsize’,12)
ylabel(‘函数输出’,‘fontsize’,12)
xlabel(‘样本’,‘fontsize’,12)

figure(10)
grid
plot(EvaSamOut,‘:og’)
hold on

hold on
plot(output_test1,‘-*r’);

legend(‘粒子群优化BP预测输出’,‘期望输出’)
title(‘粒子群优化BP网络预测输出’,‘fontsize’,12)
ylabel(‘函数输出’,‘fontsize’,12)
xlabel(‘样本’,‘fontsize’,12)

% figure(3)
% plot(error1./output_test,‘*g-’);
% hold on
% plot((EvaSamOut-output_test)./output_test/2,‘*r-’)
% hold off
% title(‘粒子群优化BP神经网络预测误差百分比’)
% legend(‘BP预测输出’,‘粒子群优化BP预测输出’)
% figure(4)
% hist(errormape);
% title(‘PSO-BP神经网络预测误差频率分布直方图’);
% ylabel(‘频率(次)’,‘fontsize’,12)
% xlabel(‘相对误差’,‘fontsize’,12)

% MAE=(sum(abs(errormape)))/24 %绝对平均误差
% RMSE=sqrt((sum(errormape.^2))/24)%RMSE 均方根误差公式

结果图

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

结果分析

从结果图中可以看出,粒子群算法改进的BP神经网络比传统的BP神经网络效果好很多,分类准确率更高

展望

BP神经网络是一种成熟的神经网络,可以改进的方法很多,既可以用启发式算法改进BP的权值阈值,也可以做成优化学习率,迭代次数自适应的BP神经网络,可以和其他算法融合,作为其他神经网络的输出层,还可以对BP神经网络本事的训练传递函数进行改进

  • 4
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神经网络机器学习智能算法画图绘图

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值