✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
个人主页:Matlab科研工作室
个人信条:格物致知。
更多Matlab仿真内容点击
智能优化算法 神经网络预测 雷达通信 无线传感器
信号处理 图像处理 路径规划 元胞自动机 无人机
人工神经网络已成功应用到许多领域,如模式识别,机器学习,信号处理和信息融合等,但是,如果神经网络的学习算法或拓扑结构选择不当,可能导致出现神经网络的预测准确度低的问题.为此,许多研究者开始将元启发式优化算法应用于神经网络的性能优化.布谷鸟搜索算法(Cuckoo Search, CS)是一种新型的元启发式搜索算法,其只有一个控制参数,且布谷鸟搜索算法寻优过程简单,因此能够很好地协调全局搜索(Exploration)和局部搜索(Exploitation).本文将采用布谷鸟搜索算法应用于神经网络的权值和阈值优化.本文主要工作如下:本文在介绍了布谷鸟搜索算法和BP神经网络的基础上,提出了布谷鸟搜索算法优化BP神经网络的算法(CSBP),该算法以神经网络的训练误差为适应度函数,对神经网络的权值和阈值进行优化,它已成功应用到意大利葡萄酒分类的问题.
%% 读取训练数据 读进来后归一化存放在inputTrain中, outputTrain为训练数据的实际类别
%读取数据iris数据,该数据的特征为4维,类别一共3个类别
%f1,f2,f3,f4为特征,class为类别,1,2,3分别代表属于3个类别
rng('default')
[f1,f2,f3,f4,class] = textread('irisTrain.data', '%f%f%f%f%f', 'delimiter', ',');
%特征值归一化
[inputTrain,minI,maxI] = premnmx([f1 , f2 , f3 , f4 ]') ;
%构造输出矩阵
s = length(class) ;
outputTrain = zeros(s,3) ;
%output每行代表属于哪类,比如1,0,0代表第一类,0,1,0代表第二类,0,0,1代表第三类
for i = 1 : s
outputTrain(i , class(i)) = 1 ;
end
%% 读取测试数据 读进来后归一化存放在testInput中, outputTest为测试数据的实际类别
[t1 t2 t3 t4 classT] = textread('irisTest.data', '%f%f%f%f%f', 'delimiter', ',');
%测试数据归一化
testInput = tramnmx ( [t1,t2,t3,t4]' , minI, maxI );
s = length(classT) ;
outputTest = zeros(s,3) ;
%output每行代表属于哪类,比如1,0,0代表第一类,0,1,0代表第二类,0,0,1代表第三类
for i = 1 : s
outputTest(i , classT(i)) = 1 ;
end
%% 构造网络结构
%创建神经网络
inputnum = 4; %inputnum 输入层节点数 4维特征
hiddennum = 10; %hiddennum 隐含层节点数
outputnum = 3; %outputnum 输出层节点数3维,比如1,0,0
net = newff( minmax(testInput) , [hiddennum outputnum] , { 'logsig' 'purelin' } , 'traingdx' ) ;
%设置训练参数
net.trainparam.show = 50 ;
net.trainparam.epochs = 200 ;
net.trainparam.goal = 0.01 ;
net.trainParam.lr = 0.01 ;
net = train( net, testInput , outputTest' ) ;
%测试测试集识别准确率
Y = sim( net , testInput );
Y = Y';
%统计分类正确率
count = 0;
for i = 1:size(Y,1)
[~,index] = max(Y(i,:));
[~,index1] = max(outputTest(i,:));
if(index==index1)
count = count+1;
end
end
accuracy = count/size(Y,1);
sprintf('测试集识别正确率:%f',accuracy)
%测试训练集识别准确率
Y1 = sim( net , inputTrain );
Y1 = Y1';
%%统计识别误差
count1 = 0;
for i = 1:size(Y1,1)
[~,index] = max(Y1(i,:));
[~,index1] = max(outputTrain(i,:));
if(index==index1)
count1 = count1+1;
end
end
accuracy = count1/size(Y1,1);
sprintf('训练集识别正确率:%f',accuracy)
[1]魏新尧, 佘世刚, 容伟,等. 基于布谷鸟算法优化BP神经网络的锂电池健康状态预测[J]. 计算机测量与控制, 2021, 029(004):65-69,75.
[2]易姣红. 基于布谷鸟搜索算法优化神经网络的研究. Diss. 长沙理工大学, 2014.
❤️ 关注我领取海量matlab电子书和数学建模资料
❤️部分理论引用网络文献,若有侵权联系博主删除