基于粒子群算法(PSO)优化Transformer模型注意力头数的多输入多输出回归预测,并集成了模型评估、可视化及SHAP可解释性分析。
1. 研究背景
随着深度学习在工业预测、金融分析等领域的广泛应用,Transformer模型凭借其自注意力机制在处理序列依赖关系上展现出显著优势。然而,Transformer的超参数(如注意力头数)对模型性能影响较大,人工调参效率低且难以获得最优组合。本代码旨在利用智能优化算法(PSO)自动搜索Transformer的最佳注意力头数,通过对比优化前后的预测精度(RMSE、R²、MAE),验证超参数优化对回归任务性能的提升效果,同时借助SHAP值解析输入特征对输出的贡献程度,增强模型的可信度与可解释性。
2. 主要功能
- 数据预处理:支持Excel数据导入,可选的样本打乱机制,归一化至[0,1]区间。
- PSO超参数优化:以Transformer注意力头数为优化变量,以测试集均方根误差(RMSE)为适应度函数,通过PSO迭代寻优。
- Transformer回归建模:构建包含位置编码、自注意力层、残差连接、全连接层的Transformer网络,支持多输出回归。
- 对比实验:自动训练并评估"优化后Transformer"与"未优化Transformer(默认头数=1)"的性能差异。
- 综合评估与可视化 :
- 绘制PSO收敛曲线、网络结构图、训练进度曲线。
- 针对每个输出分别绘制预测对比图、百分比误差图、回归拟合图及优化前后对比图。
- 生成雷达图对比优化前后在RMSE、R²、MAE三个维度上的表现。
- SHAP可解释性分析:计算各输入特征对模型预测的Shapley值,生成蜂群图与条形图,揭示特征重要性。
- 新数据预测 :提供独立函数
newpre.m,可对新输入样本进行归一化、预测与反归一化,结果保存至Excel。
3. 算法步骤
-
数据准备
- 从
回归数据.xlsx读取特征(前5列)与目标(后2列)。 - 按8:2比例划分训练集与测试集,归一化后转换为元胞数组以适应序列输入层。
- 从
-
PSO优化Transformer头数
- 定义优化变量:注意力头数
heads(整数,范围[2,20])。 - 适应度函数
fit.m:根据给定头数构建Transformer,训练后计算测试集RMSE。 - 调用PSO算法(种群数10,迭代10次)搜索最小RMSE对应的头数
bestheads。
- 定义优化变量:注意力头数
-
模型训练与评估
- 使用最优头数构建Transformer并训练(500轮),同时训练未优化模型(头数=1,100轮)。
- 对训练/测试集进行预测并反归一化,计算RMSE、R²、MAE。
-
结果可视化与保存
- 输出优化收敛曲线、预测对比图、误差分布图、雷达图等。
- 将评估指标写入Excel文件。
-
SHAP分析
- 调用
shapley_function.m,基于训练好的网络计算测试样本各特征的SHAP值,绘制全局重要性图。
- 调用
-
新数据预测
- 读取
新的多输入.xlsx,调用newpre.m输出预测结果并保存。
- 读取
4. 技术路线
导入数据
归一化与训练/测试集划分
PSO优化Transformer头数
获得最优头数bestheads
构建优化后Transformer并训练
构建未优化Transformer并训练
预测与反归一化
计算RMSE/R²/MAE
多维度可视化对比
SHAP特征重要性分析
新数据预测
5. 公式原理
-
适应度函数(RMSE)
RMSE=1N∑i=1N(yi−y^i)2 RMSE = \sqrt{\frac{1}{N}\sum_{i=1}^{N}(y_i - \hat{y}_i)^2} RMSE=N1i=1∑N(yi−y^i)2其中 yiy_iyi 为真实值,y^i\hat{y}_iy^i 为预测值,NNN为样本数。
-
PSO速度与位置更新
vit+1=wvit+c1r1(pbesti−xit)+c2r2(gbest−xit) v_{i}^{t+1} = w v_i^t + c_1 r_1 (pbest_i - x_i^t) + c_2 r_2 (gbest - x_i^t) vit+1=wvit+c1r1(pbesti−xit)+c2r2(gbest−xit)
xit+1=xit+vit+1 x_i^{t+1} = x_i^t + v_i^{t+1} xit+1=xit+vit+1位置变量 xxx 对应注意力头数(连续值取整)。
-
自注意力机制
Attention(Q,K,V)=softmax(QKTdk)V \text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dk QKT)V多头注意力将输入投影到多个子空间并行计算,拼接后输出。
-
SHAP值计算
基于Shapley值的加权边际贡献:
ϕj=∑S⊆N∖{j}∣S∣!(∣N∣−∣S∣−1)!∣N∣![f(S∪{j})−f(S)] \phi_j = \sum_{S \subseteq N \setminus \{j\}} \frac{|S|!(|N|-|S|-1)!}{|N|!} \left[ f(S \cup \{j\}) - f(S) \right] ϕj=S⊆N∖{j}∑∣N∣!∣S∣!(∣N∣−∣S∣−1)![f(S∪{j})−f(S)]其中 f(S)f(S)f(S)为仅使用特征子集SSS时的模型预测值。
-
评估指标
- 决定系数:R2=1−SSresSStotR^2 = 1 - \frac{SS_{res}}{SS_{tot}}R2=1−SStotSSres
- 平均绝对误差:MAE=1N∑∣yi−y^i∣MAE = \frac{1}{N}\sum |y_i - \hat{y}_i|MAE=N1∑∣yi−y^i∣
6. 参数设定
| 参数类别 | 参数名 | 设定值 | 说明 |
|---|---|---|---|
| 数据划分 | 训练集比例 | 0.8 | 总样本的80%用于训练 |
| PSO优化 | 种群规模 | 10 | 粒子数量 |
| 最大迭代次数 | 10 | 优化终止代数 | |
| 搜索范围 | [2, 20] | 注意力头数范围 | |
| 混沌映射标签 | 1 | 使用Tent映射初始化种群 | |
| Transformer结构 | 单头通道数 | 4 | 每注意力头的通道数固定为4 |
| 最大位置编码长度 | 128 | 支持序列最大长度 | |
| 注意力层数 | 2 | 一个因果掩码自注意力 + 一个标准自注意力 | |
| 训练超参数 | 优化器 | Adam | 自适应矩估计 |
| 初始学习率 | 0.01 | ||
| 学习率衰减策略 | piecewise | 分段常数衰减 | |
| 衰减因子 | 0.1 | 学习率下降为原来的0.1倍 | |
| 衰减周期 | 优化后200轮 / 未优化50轮 | 达到指定轮数后衰减 | |
| 最大训练轮数 | 优化后500轮 / 未优化100轮 | ||
| 执行环境 | CPU | 指定在CPU上运行 | |
| 新数据预测 | 输入文件 | 新的多输入.xlsx |
待预测样本特征 |
| 输出文件 | 新的输出.xlsx |
预测结果保存路径 |
7. 运行环境
- 软件平台:MATLAB(R2024b版本)
8. 应用场景
- 工业软测量:利用易测过程变量预测难测质量指标(如化工反应器产物浓度、精馏塔组分含量)。
- 金融时间序列预测:基于历史交易数据预测未来多支股票收益率或波动率。
- 能源负荷预测:结合气象、时间特征预测电力负荷或光伏发电功率。
- 环境监测:通过传感器数据反演污染物浓度、水质参数。
- 生物信息学:从基因表达谱预测蛋白质表达水平或疾病表型。
- 任何需要多输入多输出回归建模且追求模型可解释性的场景。