声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~
目录
之前给小伙伴们推出过一起多输入多输出的全家桶,里面有十余种回归模型供大家选择:
多输入多输出预测全家桶来啦!解决你的模型选择困难症!论文随便水!
不过,最近有小伙伴一直问有没有输出最优特征组合的模型,即工艺参数优化问题。这类问题相比于传统的回归算法,在输出预测值之后还需要输出最优的特征组合。
举个例子,在化工反应工艺优化中,我们需要提高产品纯度和产量,同时降低能耗。这就要求我们首先利用机器学习算法根据反应温度、压力、催化剂用量三个工艺参数特征来预测反应转化率、产品纯度等指标,也就是找到输入与输出之间的关系。因为我们的实验经费是有限的,不可能找到所有的特征组合一组一组去亲自做实验,所以我们需要基于多目标优化算法(比如NSGA-II)找到最优的三个工艺参数特征组合,从而使目标最大或最小化。
据我所知,这类问题有着特定的问题背景和实验设置,很容易发到SCI一区期刊上。因此,今天给大家带来一期基于NRBO-BP多输出多输出回归算法+NSGAII多目标优化的工艺参数优化的模型,本期模型也属于尚未发表的创新点,知网和WOS都还没有人用过。并且,可以自动保存最优特征组合的Excel,使用起来非常简单,非常适合新手小白。
您只需做的工作:替换Excel数据,设置好相关参数,一键运行main文件即可!
(Ps:4个目标也可以哦~)
工艺参数优化案例
本期给大家带来的数据是一个工艺参数优化的数据,数据已经进行了脱敏处理,因此用x1-x5代表特征,y1-y4代表输出,也就是5个特征4个输出的问题,这样也方便大家替换成自己的数据。
一般来说,由于需要用到多目标优化算法进行求解,因此各个输出之间最好相互独立,比如刚刚提到的例子,化工反应工艺中,我们不可能在提高产品纯度和产量的同时又能够降低能耗,这是有悖于现实的,因此我们才需要利用多目标优化算法找到一个平衡点,这也是我们找到最优特征组合的目的。
小伙伴们在更换自己的数据时,只需将几个输出变量只需放在最后几列即可,然后更改outdim变量,前面的特征数量放多少都可以。
比如,你有10个特征4个输出变量,只需把这4个变量放在最后4列,前面10列放特征即可,然后在代码里找到outdim变量更改为4即可,其余代码无需更改,非常方便适合新手小白!
%% 导入数据
res = xlsread('数据集.xlsx');
%% 划分训练集和测试集
num_size = 0.7; % 训练集占数据集比例
outdim = 4; % 最后4列为输出
num_samples = size(res, 1); % 样本个数
res = res(randperm(num_samples), :); % 打乱数据集(不希望打乱时,注释该行)
num_train_s = round(num_size * num_samples); % 训练集样本个数
f_ = size(res, 2) - outdim; % 输入特征维度
优化参数设置
替换完自己的数据之后,因为模型不知道你的输出目标是最大还是最小,比如刚刚的例子,你需要告诉模型你的产品纯度和产量是越大越好,而能耗是越小越好,所以需要简单设置一下。
在我们的代码里,只需找到objDir变量,设置1或-1即可,1代表最小化,‑1代表最大化,分别对应刚刚案例Excel的4个输出y1-y4。如果你有两个目标,一个目标最大一个目标最小,那你改成[-1;1]即可。
%% NSGA2多目标算法求解设置
objDir = [-1;1;1;1]; % 目标函数方向,1为最小化,‑1为最大化,可自行设置
varmin = min(res(:, 1:f_)); % 每列最小值,对应约束变量下界,可自行设置
varmax = max(res(:, 1:f_)); % 每列最大值,对应约束变量上界,可自行设置
step = [1, 0.1, 0.5, 0.05, 1]; % 约束变量取值步长
npop = 50; % 种群数量(对应输出的特征组合数量)
maxit = 100; % 迭代次数
pc = 0.85; % 交叉概率
nc = round(pc * npop / 2) * 2; % 交叉的种群数
mu = 0.2; % 变异概率
nvar = f_; % 输入变量个数
numfobj = outdim; % 目标函数个数
另外,step变量代表特征的取值步长,这里5个值分别对应刚刚案例Excel的5个特征x1-x4,比如你某个特征需要是整数,那你设置为1即可,模型会根据你的步长来生成特征组合。
其余参数是关于NSGA-II的,大家可以根据需要自行调整,也可以用我自己设置的默认参数~
模型原理
首先,牛顿-拉夫逊优化算法NRBO是2024年2月发表在中科院2区Top SCI期刊《Engineering Applications of Artificial Intelligence》上的一个优化算法,效果非常不错,在这里,我们用NRBO算法优化BP神经网络的初始权重和偏置,从而进一步提高预测精度。随后,用多目标算法中性能较好、非常受专家认可的NSGA-II算法进行求解,得到帕累托最优特征组合,具体的模型流程如下所示:
1)数据导入与预处理。导入工艺参数与输出指标数据,划分训练集与测试集。随后对数据进行归一化处理,以便于模型的训练,同时设置算法参数。
2)NRBO算法优化神经网络参数。采用NRBO算法对神经网络的初始权重和偏置进行优化,提高模型的预测精度。优化目标是网络的权重和偏置。
3)BP神经网络训练与预测。利用NRBO算法优化获得的最佳初始权重和偏置初始化网络,进行网络训练,获得训练好的BP网络模型。随后利用训练好的模型分别对训练集和测试集数据进行预测,并对预测结果进行反归一化。
4)模型评估与可视化。计算模型预测的各项精度指标,包括RMSE、MAE、MSE、MAPE和决定系数R²,绘制拟合曲线、误差曲线、误差直方图和线性回归图,直观评估模型的预测性能。
5)多目标优化算法(NSGA-II)求解与最优工艺参数组合确定。通过NSGA-II多目标优化算法,迭代生成多个参数组合解,并计算相应的多目标函数值,获得非支配解集(Pareto前沿),并将最优参数组合导出到Excel文件中。
结果展示
废话不多说,最后展示一下我们的结果~
首先是帕累托解集图,如果你只有1-2个目标,那帕累托解集图就是二维的,3个目标就是三维的,我们的案例数据是4个目标,4个目标不大好可视化,因此用颜色表示第四个目标(超过4个目标就不好绘制了):
每个输出的预测结果图(几个输出就有几张这种图):
误差直方图(几个输出就有几张这种图):
迭代曲线图:
线性拟合图:
最后命令行窗口也会清晰地显示各个输出的误差指标:
以及生成一个最优特征组合的Excel,方便大家自行选择合适的帕累托解集~
文件夹内也非常清晰,没有什么乱七八糟的文件!您需要运行的文件只有main脚本一个!!
以上所有图片,替换Excel后均可一键运行main生成,Matlab无需配置环境!比Python什么方便多了!非常适合新手小白!
完整代码
如果需要以上完整代码,只需点击下方小卡片,再后台回复关键字,不区分大小写:
工艺参数优化