麻雀搜索算法SSA优化BP神经网络回归预测以及MATLAB代码实现文章目录麻雀搜索算法SSA优化BP神经网络回归预测以及MATLAB代码实现1. 麻雀搜索算法SSA原理1.1 算法灵感来源1.2 算法模型描述2. SSA优化BP神经网络预测算法流程3. SSA优化BP回归预测的MATLAB实现步骤4. 运行结果与图像5. MATLAB代码1. 麻雀搜索算法SSA原理麻雀搜索算法是一种较新的智能优化算法在2020年提出主要是受麻雀的觅食行为和反捕食行为的启发。算法具有较高的收敛性能与局部搜索能力。1.1 算法灵感来源麻雀种群在觅食过程中分为发现者与加入者两部分分别负责提供种群觅食的方向以及追随并获取食物。当麻雀种群意识到危险时则会发生反捕食行为并更新种群位置。1.2 算法模型描述关于麻雀搜索算法建立了六个假设规则在参考文献中给出故不作说明。符号说明N最大迭代次数 n种群大小 PD发现者数量 SD 感应危险的麻雀数量ST安全值 R2预警值由随机数产生算法实现步骤步骤一初始化麻雀种群位置与适应度NnPDSDST参数初值。步骤二开始循环iterationN步骤三种群排序得出当前的最优麻雀个体位置以及最佳适应度值。注意对于第一代麻雀而言求出的为初始最优。最优个体能够优先获取食物步骤四觅食行为a). 按以下公式更新发现者位置。X i , j t 1 { X i , j t ⋅ exp ⁡ ( − i a ⋅ N ) if R 2 S T X i , j t Q ⋅ L if R 2 ≥ S T X_{i, j}^{t1}\left\{\begin{array}{ll} X_{i, j}^{t} \cdot \exp \left(\frac{-i}{a \cdot N}\right) \text { if } R_{2}S T \\ X_{i, j}^{t}Q \cdot L \text { if } R_{2} \geq S T \end{array}\right.Xi,jt1​{Xi,jt​⋅exp(a⋅N−i​)Xi,jt​Q⋅L​ifR2​STifR2​≥ST​式中Q为服从正态分布的随机数L为单位行向量a为[0 1]之间的随机数。步骤五b). 按以下公式更新加入者位置。X i , j t 1 { Q ⋅ exp ⁡ ( X wost ′ − X i , j ′ i 2 ) if i n / 2 X P t 1 ∣ X i , j ′ − X P t 1 ∣ ⋅ A ⋅ L otherwise X_{i, j}^{t1}\left\{\begin{array}{ll} Q \cdot \exp \left(\frac{X_{\text {wost }}^{\prime}-X_{i, j}^{\prime}}{i^{2}}\right) \text { if } in / 2 \\ X_{P}^{t1}\left|X_{i, j}^{\prime}-X_{P}^{t1}\right| \cdot A^{} \cdot L \text { otherwise } \end{array}\right.Xi,jt1​{Q⋅exp(i2Xwost′​−Xi,j′​​)XPt1​​Xi,j′​−XPt1​​⋅A⋅L​ifin/2otherwise​式中Xworst为适应度最低的麻雀位置A为只随机包含1与-1两个元素的行向量。步骤六反捕食行为更新麻雀种群的位置。X i , j t 1 { X best t β ⋅ ∣ X i , j ′ − X best t ∣ if f i f best X i , j t K ⋅ ( ∣ X i , j ′ − X worst ′ ∣ ( f i − f worst ) ε ) if f i f best X_{i, j}^{t1}\left\{\begin{array}{lll} X_{\text {best }}^{t}\beta \cdot\left|X_{i, j}^{\prime}-X_{\text {best}}^{t}\right| \text { if } f_{i}f_{\text {best}} \\ X_{i, j}^{t}K \cdot\left(\frac{\left|X_{i, j}^{\prime}-X_{\text {worst}}^{\prime}\right|}{\left(f_{i}-f_{\text {worst}}\right)\varepsilon}\right) \text { if } f_{i}f_{\text {best}} \end{array}\right.Xi,jt1​⎩⎨⎧​Xbestt​β⋅​Xi,j′​−Xbestt​​Xi,jt​K⋅((fi​−fworst​)ε∣Xi,j′​−Xworst′​∣​)​ifif​fi​fbest​fi​fbest​​式中β是服从正态分布的随机数作用是控制更新位置的步长。K是[-1,1]之间的随机数fi是个体适应度值。ε是接近0的常数避免分母为零的情况。步骤七更新历史最优适应度相当于适应度的公告板更新。步骤八执行步骤三到七当达到最大迭代次数结束循环。输出最优个体位置与适应度值。2. SSA优化BP神经网络预测算法流程选用麻雀搜索算法SSA优化BP神经网络的初始权重与阈值。选取训练集与测试集整体的均方误差为适应度值。适应度函数值越小表明训练越准确且兼顾模型的预测精度更好。SSA优化BP回归预测流程图设计3. SSA优化BP回归预测的MATLAB实现步骤3.1 数据说明采用身体脂肪含量数据集为例建立BP回归预测与麻雀搜索算法SSA优化BP的回归预测模型。3.2 数据格式样本编号features1features2features3…featuresntarget1––––––2––––––…––––––n––––––3.3 读取数据%%数据读取 dataxlsread(数据.xlsx,Sheet1,A1:N252);%%使用xlsread函数读取EXCEL中对应范围的数据即可%输入输出数据 inputdata(:,1:end-1);%data的第一列-倒数第二列为特征指标 outputdata(:,end);%data的最后面一列为输出的指标值 Nlength(output);%全部样本数目 testNum15;%设定测试样本数目 trainNumN-testNum;%计算训练样本数目3.4 确定BP神经网络的拓扑结构a). 输入层和输出层节点使用size函数直接获取。函数用法[M,N]size(A)M为A的行数N为A的列数。size(A,2)得到的是第二个参数N即列数。inputnumsize(input,2);%输入层神经元节点个数 outputnumsize(output,2);%输出层神经元节点个数b). 隐含层节点的确定过程使用循环来遍历范围内的隐含层节点与训练误差情况。因为要找最小的误差所以初始化训练误差时将MSE设置较大的数字用于在循环中确定最佳的隐含层节点。%确定隐含层节点个数%采用经验公式hiddennumsqrt(mn)am为输入层节点个数n为输出层节点个数a一般取为1-10之间的整数 MSE1e5;%初始化最小误差forhiddennumfix(sqrt(inputnumoutputnum))1:fix(sqrt(inputnumoutputnum))103.5 BP与SSA的参数设置3.5.1 BP神经网络参数netnewff(inputn,outputn,hiddennum_best,{tansig,purelin},trainlm);%建立模型%网络参数配置 net.trainParam.epochs1000;%训练次数设置为1000次 net.trainParam.lr0.01;%学习速率设置为0.01net.trainParam.goal0.00001;%训练目标最小误差设置为0.0001net.trainParam.show25;%显示频率设置为每训练25次显示一次 net.trainParam.mc0.01;%动量因子 net.trainParam.min_grad1e-6;%最小性能梯度 net.trainParam.max_fail6;%最高失败次数3.5.2 麻雀搜索算法SSA初始参数popsize30;%初始种群规模 maxgen50;%最大进化代数 lbrepmat(-3,1,dim);%自变量下限 ubrepmat(3,1,dim);%自变量上限 ST0.6;%安全值 PD0.7;%发现者占种群的比重其余的为加入者 SD0.2;%感应危险的麻雀所占比重注关于优化变量元素个数dim的计算给出代码的计算公式如下。关于计算过程请参考我的另一篇博客3.3 节 遗传算法优化BP权重和阈值的设计%自变量个数 diminputnum*hiddennum_besthiddennum_besthiddennum_best*outputnumoutputnum;3.5.3 适应度函数公式数学模型为F min ⁡ ( M S E TrainingSet,TestingSet ) F\min \left(MSE_{\text {TrainingSet,TestingSet }}\right)Fmin(MSETrainingSet,TestingSet​)式中TraingingSetTestingSet分别为训练集和测试集的样本。使用麻雀搜索算法优化后适应度函数值越小即均方误差MSE越小表明训练越准确且模型的预测精度更好。计算适应度的代码命令fitness(mse(output_train,train_simu)mse(output_test,test_simu))/2;%适应度函数选取为训练集与测试集整体的均方误差平均值3.6 优化后的权重与阈值赋给BP%矩阵重构 net.iw{1,1}reshape(w1,hiddennum_best,inputnum);%输入层到隐含层的权值矩阵 net.lw{2,1}reshape(w2,outputnum,hiddennum_best);%隐含层的阈值向量 net.b{1}reshape(B1,hiddennum_best,1);%隐含层到输出层的权值矩阵 net.b{2}reshape(B2,outputnum,1);%输出层的阈值向量3.7 SSA优化后的BP神经网络训练与仿真预测%%优化后的神经网络训练 nettrain(net,inputn,outputn);%开始训练其中inputn,outputn分别为输入输出样本%%优化后的神经网络测试 an1sim(net,inputn_test);test_simu1mapminmax(reverse,an1,outputps);%把仿真得到的数据还原为原始的数量级4. 运行结果与图像1 BP各层的神经元个数的确定过程2 麻雀搜索算法SSA进化曲线3 麻雀搜索算法SSA优化BP神经网络与BP的预测结果对比4 预测值和真实值的误差计算对比MAE、MSE、RMSE、MAPE5. MATLAB代码以下介绍了常用的BP神经网络预测和分类代码模型及编写相应的代码相关模型原理见博客主页。BP神经网络预测优化代码 (点击蓝色字体下载资源)遗传算法优化BP神经网络回归预测MATLAB代码粒子群算法PSO优化BP神经网络回归预测MATLAB代码布谷鸟搜索算法CS优化BP神经网络回归预测MATLAB代码海鸥优化算法SOA优化BP神经网络回归预测MATLAB代码鲸鱼优化算法WOA优化BP神经网络回归预测MATLAB代码麻雀搜索算法SSA优化BP神经网络回归预测MATLAB代码人工蜂群算法ABC优化BP神经网络回归预测MATLAB代码原子搜索算法ASO优化BP神经网络回归预测MATLAB代码蚁群算法ACO优化BP神经网络回归预测MATLAB代码混合遗传蚁群算法GA-ACO优化BP神经网络回归预测MATLAB代码基于Logistic混沌映射改进的麻雀搜索算法SSA优化BP神经网络回归预测MATLAB代码基于Logistic混沌映射改进的原子搜索算法ASO优化BP神经网络回归预测MATLAB代码基于Sine混沌映射改进的麻雀搜索算法SSA优化BP神经网络回归预测MATLAB代码基于Tent混沌映射改进的麻雀搜索算法SSA优化BP神经网络回归预测MATLAB代码基于Tent混沌映射改进的原子搜索算法ASO优化BP神经网络回归预测MATLAB代码BP神经网络分类及优化算法模型BP神经网络数据分类算法MATLAB代码遗传算法GA优化BP分类算法MATLAB代码麻雀搜索算法SSA优化BP神经网络分类MATLAB代码蝙蝠算法BA优化BP神经网络分类MATLAB代码Elman神经网络数据分类算法MATLAB代码代码点击上面的表格麻雀搜索算法优化BP神经网络回归预测MATLAB代码下载地址https://download.csdn.net/download