DNN多输出回归 基于深度神经网络(DNN)的多输出回归预测(多输入多输出) 程序已经调试好,数据格式为excel(如下图),仅需根据你的输出个数修改outdim值即可 1、运行环境要求MATLAB版本为2019b及其以上 2、评价指标包括:R2、MAE、MBE、RMSE等,图很多,符合您的需要 3、代码中文注释清晰,质量极高 4、测试数据集,可以直接运行源程序。 替换你的数据即可用 适合新手小白
刚入门机器学习的朋友可能遇到过这种情况:需要同时预测多个目标值,但现成的工具包要么配置复杂,要么扩展性差。最近刚帮实验室师弟调通了一个基于MATLAB的DNN多输出回归框架,实测只需要改一个参数就能适配不同数据集,特别适合需要处理多维输出的场景。
先看数据格式(见图1),输入输出都放在同一个Excel表中,前N列是特征,后M列是目标值。代码会自动划分训练集和测试集,且支持任意维度的输入输出组合。核心配置就两行:
indim = 6; % 输入特征数 outdim = 3; % 改这个!输出目标数网络结构采用全连接层堆叠,这里有个小技巧——输出层不设激活函数:
layers = [ featureInputLayer(indim) fullyConnectedLayer(32,'Name','fc1') reluLayer fullyConnectedLayer(64,'Name','fc2') reluLayer fullyConnectedLayer(outdim,'Name','Output') % 回归任务去激活 ];这样设计是为了保持输出的线性范围,避免激活函数对预测值的压缩。训练时采用自适应学习率的adam优化器,实测收敛速度比普通SGD快三倍:
options = trainingOptions('adam',... 'MaxEpochs',200,... 'MiniBatchSize',32,... 'InitialLearnRate',0.001,... 'LearnRateSchedule','piecewise',... 'LearnRateDropPeriod',50); % 每50轮学习率衰减评价指标的计算是亮点,代码里封装了一个metrics函数:
function [R2, MAE, MBE, RMSE] = calc_metrics(y_true, y_pred) SS_res = sum((y_true - y_pred).^2); SS_tot = sum((y_true - mean(y_true)).^2); R2 = 1 - SS_res / SS_tot; % 决定系数 MAE = mean(abs(y_pred - y_true)); MBE = mean(y_pred - y_true); % 系统偏差 RMSE = sqrt(mean((y_pred - y_true).^2)); end这个函数同时计算四个指标,其中MBE(平均偏差误差)能反映预测值的整体偏移方向,对调试模型很有帮助。
运行后会生成三组可视化结果:预测值与真实值的散点回归图(看线性趋势)、误差分布直方图(查异常值)、预测序列对比曲线(找时序规律)。特别是误差热力图(图2),用颜色深浅直观显示不同输出维度的误差分布,比看数字报表有效率得多。
新手常见坑点:①数据未归一化导致梯度爆炸(代码已内置自动归一化)②测试集划分比例不合理(默认7:3,可调)③过早停止训练(loss曲线监控模块已集成)。实测某电力负荷预测数据集,输入6个气象因子预测3个节点电压,R2能稳定在0.92以上。
需要改进的地方:当前版本未做超参数自动优化,建议在调试阶段配合贝叶斯优化使用。完整代码和测试数据已打包,替换自己的Excel文件就能跑起来,注意别删表头就行。