• 使用BP神经网络、RBF神经网络以及PSO优化的RBF神经网络对数据进行预测(Matlab代码实现)


     🍒🍒🍒欢迎关注🌈🌈🌈

    📝个人主页:我爱Matlab


    👍点赞➕评论➕收藏 == 养成习惯(一键三连)🌻🌻🌻

    🍌希望大家多多支持🍓~一起加油 🤗

    💬语录:将来的我一定会感谢现在奋斗的自己!

    🍁🥬🕒摘要🕒🥬🍁

    径向基函数神经网络(也称为RBF神经网络)是应用非常广泛的一类人工神经网络。在RBF神经网络建模中,其隐含层神经元的个数、相关参数(即中心点、宽度)、以及输出层权值对模型的性能具有重大的影响。如何构建一个合理的隐含层网络结构和最佳的网络参数,是RBF神经网络改进的难点。径向基神经网络作为一种前馈型神经网络,在模型预测、智能控制和模式识别等领域得到广泛应用。同样,当前RBF神经网络结构主要通过经验或凑试的方法确定,且结构一旦确定将不再调整,极大的降低了RBF神经网络的自适应能力。因此,如何在RBF神经网络参数优化的同时实现其结构的自适应调整,提高RBF神经网络的性能,提升其应用能力,是RBF神经网络设计及应用中亟待解决的难题。

    数据采用的是(52,4)的shape,分为了训练集和测试集,对四个特征(由num=1,2,3,4参数控制)分别进行预测。最后会输出神经网络分别在训练集和测试集上的效果图,以及在训练集和测试集上的误差。

    ✨🔎⚡运行结果⚡🔎✨

     

     

     

     

     

    💂♨️👨‍🎓Matlab代码👨‍🎓♨️💂

    1. clc;
    2. clear;
    3. tic;
    4. SamNum=48; %训练样本数
    5. TargetSamNum=3; %测试样本数
    6. InDim=1; %样本输入维数
    7. UnitNum=2; %隐节点数
    8. MaxEpoch=1200; %最大训练次数
    9. num=2;%对应四个特征
    10. %E0=0.2; %目标误差
    11. gbesthistory=[];
    12. % 根据目标函数获得样本输入输出(训练样本)
    13. rand('state',sum(100*clock));
    14. %NoiseVar=0.0005;
    15. %Noise=NoiseVar*randn(1,SamNum);
    16. load data
    17. %归一化
    18. data1=data';
    19. data=mapminmax(data1,0,1);
    20. data=data';
    21. %建立训练集测试集
    22. x_train=[data(1:48,1).';data(1:48,2).';data(1:48,3).';data(1:48,4).'];
    23. x_test=[data(2:49,num).'];
    24. y_train=[data(49:51,1).';data(49:51,2).';data(49:51,3).';data(49:51,4).'];
    25. y_test=[data(50:52,num).'];
    26. SamIn=x_train;
    27. SamOut=x_test;
    28. %测试样本
    29. TargetIn=y_train;
    30. TargetOut=y_test;
    31. %粒子群算法中的两个参数
    32. c1 = 1.49445;
    33. c2 = 1.49445;
    34. popcount=10; %粒子数
    35. poplength=6; %粒子维数
    36. Wstart=0.9;%初始惯性权值
    37. Wend=0.2;%迭代次数最大时惯性权值
    38. %个体和速度最大最小值
    39. Vmax=1;
    40. Vmin=-1;
    41. popmax=4;
    42. popmin=-4;
    43. %粒子位置速度和最优值初始化
    44. for i=1:popcount
    45. pop(i,:)=rand(1,9);%初始化粒子位置
    46. V(i,:)=rand(1,9);%初始化粒子速度
    47. %计算粒子适应度值
    48. Center=pop(i,1:3);
    49. SP=pop(i,4:6);
    50. W=pop(i,7:9);
    51. Distance=dist(Center',SamIn);
    52. SPMat=repmat(SP',1,SamNum);%repmat具体作用
    53. UnitOut=radbas(Distance./SPMat);%径向基函数
    54. NetOut=W*UnitOut;%网络输出
    55. Error=SamOut-NetOut;%网络误差
    56. %SSE=sumsqr(Error);
    57. %fitness(i)=SSE;
    58. RMSE=sqrt(sumsqr(Error)/SamNum);
    59. fitness(i)=RMSE;
    60. %fitness(i)=fun(pop(i,:));
    61. 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.

  • 相关阅读:
    Linux:使用ssl加密网站为https
    [附源码]java毕业设计某互联网公司人力资源管理系统
    高济健康:数字化科技创新与新零售碰撞 助推医疗产业优化升级
    制作一个简单HTML宠物猫网页(HTML+CSS)
    通过云服务器对内网穿透实现外网访问群晖NAS
    【JavaSE】内部类、基本类型包装类、日期类之间的关系
    算法分析与设计课后练习22
    Cesium Vue(四)— 物体(Entity)的添加与配置
    leetcode解题思路分析(一百二十四)1025 - 1031 题
    软件测试基础知识 —— 白盒测试
  • 原文地址:https://blog.csdn.net/m0_73907476/article/details/127925854