🍒🍒🍒欢迎关注🌈🌈🌈
📝个人主页:我爱Matlab
👍点赞➕评论➕收藏 == 养成习惯(一键三连)🌻🌻🌻🍌希望大家多多支持🍓~一起加油 🤗
💬语录:将来的我一定会感谢现在奋斗的自己!
径向基函数神经网络(也称为RBF神经网络)是应用非常广泛的一类人工神经网络。在RBF神经网络建模中,其隐含层神经元的个数、相关参数(即中心点、宽度)、以及输出层权值对模型的性能具有重大的影响。如何构建一个合理的隐含层网络结构和最佳的网络参数,是RBF神经网络改进的难点。径向基神经网络作为一种前馈型神经网络,在模型预测、智能控制和模式识别等领域得到广泛应用。同样,当前RBF神经网络结构主要通过经验或凑试的方法确定,且结构一旦确定将不再调整,极大的降低了RBF神经网络的自适应能力。因此,如何在RBF神经网络参数优化的同时实现其结构的自适应调整,提高RBF神经网络的性能,提升其应用能力,是RBF神经网络设计及应用中亟待解决的难题。
数据采用的是(52,4)的shape,分为了训练集和测试集,对四个特征(由num=1,2,3,4参数控制)分别进行预测。最后会输出神经网络分别在训练集和测试集上的效果图,以及在训练集和测试集上的误差。
- clc;
- clear;
- tic;
- SamNum=48; %训练样本数
- TargetSamNum=3; %测试样本数
- InDim=1; %样本输入维数
- UnitNum=2; %隐节点数
- MaxEpoch=1200; %最大训练次数
- num=2;%对应四个特征
- %E0=0.2; %目标误差
- gbesthistory=[];
- % 根据目标函数获得样本输入输出(训练样本)
- rand('state',sum(100*clock));
- %NoiseVar=0.0005;
- %Noise=NoiseVar*randn(1,SamNum);
- load data
- %归一化
- data1=data';
- data=mapminmax(data1,0,1);
- data=data';
-
- %建立训练集测试集
- x_train=[data(1:48,1).';data(1:48,2).';data(1:48,3).';data(1:48,4).'];
- x_test=[data(2:49,num).'];
- y_train=[data(49:51,1).';data(49:51,2).';data(49:51,3).';data(49:51,4).'];
- y_test=[data(50:52,num).'];
- SamIn=x_train;
- SamOut=x_test;
- %测试样本
- TargetIn=y_train;
- TargetOut=y_test;
-
-
- %粒子群算法中的两个参数
- c1 = 1.49445;
- c2 = 1.49445;
- popcount=10; %粒子数
- poplength=6; %粒子维数
- Wstart=0.9;%初始惯性权值
- Wend=0.2;%迭代次数最大时惯性权值
- %个体和速度最大最小值
- Vmax=1;
- Vmin=-1;
- popmax=4;
- popmin=-4;
- %粒子位置速度和最优值初始化
-
- for i=1:popcount
- pop(i,:)=rand(1,9);%初始化粒子位置
- V(i,:)=rand(1,9);%初始化粒子速度
- %计算粒子适应度值
- Center=pop(i,1:3);
- SP=pop(i,4:6);
- W=pop(i,7:9);
- Distance=dist(Center',SamIn);
- SPMat=repmat(SP',1,SamNum);%repmat具体作用
- UnitOut=radbas(Distance./SPMat);%径向基函数
- NetOut=W*UnitOut;%网络输出
- Error=SamOut-NetOut;%网络误差
- %SSE=sumsqr(Error);
- %fitness(i)=SSE;
- RMSE=sqrt(sumsqr(Error)/SamNum);
- fitness(i)=RMSE;
- %fitness(i)=fun(pop(i,:));
- end
clear
clc
%创建训练样本输入集
load data;
%归一化
data1=data';
data=mapminmax(data1,0,1);
data=data';
num=2;%对应四个特征
%建立训练集测试集
x_train=[data(1:48,1).';data(1:48,2).';data(1:48,3).';data(1:48,4).'];
x_test=[data(49:51,1).';data(49:51,2).';data(49:51,3).';data(49:51,4).'];
y_train=[data(2:49,num).'];
y_test=[data(50:52,num).'];
%创建BP神经网络
%创建网络
net=newff(minmax(x_train),[4,1],{'tansig','purelin'},'trainlm');%隐层神经元个数,输出层神经元个数
%设置训练次数
net.trainParam.epochs = 100;
%设置收敛误差
net.trainParam.goal=0.001;
%训练网络
[net,tr]=train(net,x_train,y_train);
%在训练集和测试集上的表现
y_train_predict=sim(net,x_train);
y_test_predict=sim(net,x_test);
%作图 分别在训练集和测试集上
subplot(1,2,1)
plot(1:length(y_train_predict),y_train_predict,'*',1:length(y_train_predict),y_train,'o')
title('In Train data')
subplot(1,2,2)
plot(1:3,y_test_predict,'*',1:3,y_test,'o')
title('In Test data')
%求出误差 训练集和测试集
train_error=sum(abs(y_train_predict- y_train))/length(y_train);
test_error=sum(abs(y_test_predict- y_test))/length(y_test);
[1]乔俊飞,韩红桂.RBF神经网络的结构动态优化设计[J].自动化学报,2010,36(06):865-872.
[2]周维华. RBF神经网络隐层结构与参数优化研究[D].华东理工大学,2014.