蜻蜓优化算法DA优化BP做多分类建模同样可以用于二分类建模。 程序内注释详细直接替换数据就可以用。 可学习性强。 程序是matlab语言。 想要的加好友我吧。最近在整分类模型的老铁们注意了传统BP神经网络的局部最优问题真能让人抓狂今天咱聊点刺激的——用蜻蜓优化算法DA给BP网络调参实测多分类任务效果炸裂二分类同样稳如老狗。直接上硬货Matlab源码里最关键的三板斧先拎出来说说% 核心参数设置这里随便改 da_params.MaxIter 50; % 蜻蜓群飞50次 da_params.pop_size 20; % 20只蜻蜓小弟 bp_hidden_layer [10 8]; % 网络结构两层10节点8节点 % 适应度函数片段重点看数据怎么喂 function fitness cost_func(position) net feedforwardnet(bp_hidden_layer); net.trainParam.showWindow false; % 安静如鸡不弹窗 net configure(net, input, target); % 用蜻蜓找到的参数设置权值阈值... [net, ~] train(net, input, target); % 常规训练 pred round(net(input)); % 分类结果四舍五入 fitness 1 - mean(sum(target pred)/size(target,2)); end这段代码最骚的地方在于适应度函数设计直接把预测准确率转换为优化目标DA算法会自动寻找使这个值最小的网络参数。注意看最后的四舍五入操作把网络输出硬核转成整数标签实测比用softmax还猛。想用自己的数据替换数据文件比泡面还简单% 数据加载区萌新重点关注区域 load(你的数据.mat) % 文件里需要包含input和target变量 % 数据格式提醒 % input 特征数据列排列比如100个样本x10特征就是10x100矩阵 % target 标签需要转成onehot格式内置了转换函数 [target, class_names] label2onehot(raw_label); % raw_label是原始标签向量重点来了label2onehot这个函数是咱自己封装的不管你是字符串标签还是数字标签直接给你转成标准的onehot矩阵。比如二分类时target会变成2xN的矩阵多分类自动扩展维度。蜻蜓优化算法DA优化BP做多分类建模同样可以用于二分类建模。 程序内注释详细直接替换数据就可以用。 可学习性强。 程序是matlab语言。 想要的加好友我吧。实际跑起来的时候控制台会实时打印这种进化曲线迭代5次 | 最佳适应度:0.12 迭代10次 | 最佳适应度:0.09 ← 这里开始收敛 迭代15次 | 最佳适应度:0.085 ← 波动找全局最优看到没DA算法不是在无脑下降中间会有故意波动来跳出局部最优。这比直接用遗传算法调参更带劲特别是数据特征复杂的时候识别率能差出七八个百分点。最后说下网络结构修改。想换层数或者节点数直接改bphiddenlayer这个数组% 网络结构花式修改示例 bp_hidden_layer [15]; % 单隐层15节点 bp_hidden_layer [20 15 10]; % 三隐层结构过拟合警告 bp_hidden_layer [30 30]; % 双塔结构头铁可以试试不过要注意隐层不是越多越好特别是样本量少的时候三层隐层分分钟过拟合到亲妈都不认识。建议先用默认的两层结构效果不行再慢慢加。需要源码的兄弟看这里代码注释比代码还多重要参数都有中文说明甚至贴心地写了数据格式异常报错比如特征数和样本数对不上会直接弹窗提醒。想自己魔改的话重点看DA优化部分和BP网络构建模块这两个部分用函数封装好了改起来比调包还方便。