基于深度神经网络的数据回归预测 基于NATLAB环境 替换自己的数据即可 数据回归预测评价指标采用MAE MSE RMSE R2 RPD MAPE
当深度神经网络遇上回归预测:MATLAB实战指南
数据回归预测这事儿,说难不难,说简单吧,手头没个趁手的工具还真容易翻车。今天咱们就用MATLAB里的深度学习工具箱,从数据导入到模型评价,手把手走一遍流程。不用慌,代码可以直接复制粘贴,你的数据往里一丢就能用。
数据准备:先整明白格式
假设你手头的数据是个N行M列的表格,前M-1列是特征,最后一列是目标值。比如这样:
% 假设数据存储在data.csv中 rawData = readmatrix('data.csv'); X = rawData(:, 1:end-1); % 特征 Y = rawData(:, end); % 目标重点来了:数据归一化。神经网络对尺度敏感,不归一化?等着梯度爆炸吧!
[X_train, X_test, Y_train, Y_test] = trainTestSplit(X, Y, 0.8); % 自己写个分割函数,或者用cvpartition % 归一化(建议用训练集参数处理测试集) [~, muX, sigmaX] = zscore(X_train); X_train = (X_train - muX) ./ sigmaX; X_test = (X_test - muX) ./ sigmaX; Y_mean = mean(Y_train); Y_std = std(Y_train); Y_train = (Y_train - Y_mean) / Y_std;模型搭建:别整太复杂
先来个三层的全连接网络试试水。MATLAB的trainNetwork虽然不如PyTorch灵活,但胜在省事。
layers = [ featureInputLayer(size(X_train,2)) % 输入层 fullyConnectedLayer(64) % 第一层64个神经元 reluLayer % 激活函数选ReLU fullyConnectedLayer(32) reluLayer fullyConnectedLayer(1) % 输出层 regressionLayer % 回归任务专用 ]; options = trainingOptions('adam', ... 'MaxEpochs', 200, ... 'MiniBatchSize', 32, ... 'ValidationData', {X_test, Y_test}, ... 'Plots', 'training-progress');关键点解析:
featureInputLayer要指定输入特征数,避免运行时维度对不上;- 最后一层必须用
regressionLayer,分类任务才用softmax; - Adam优化器比SGD更抗震荡,适合新手。
训练与预测:跑起来就完事儿
net = trainNetwork(X_train, Y_train, layers, options); Y_pred = predict(net, X_test); Y_pred = Y_pred * Y_std + Y_mean; % 反归一化 Y_test = Y_test * Y_std + Y_mean;评价指标:别只看R²
直接上代码,七个指标一次算清:
mae = mean(abs(Y_pred - Y_test)); mse = mean((Y_pred - Y_test).^2); rmse = sqrt(mse); ssr = sum((Y_pred - mean(Y_test)).^2); sst = sum((Y_test - mean(Y_test)).^2); r2 = ssr / sst; rpd = std(Y_test) / rmse; mape = mean(abs((Y_test - Y_pred) ./ Y_test)) * 100; fprintf('MAE: %.3f\nMSE: %.3f\nR²: %.3f\nMAPE: %.2f%%\n', mae, mse, r2, mape);避坑指南:
- MAPE遇到零值会炸,数据里如果有零,建议改用sMAPE;
- RPD(相对预测偏差)>2说明模型靠谱,<1.4可能得回炉重造。
可视化:一图胜千言
figure; scatter(Y_test, Y_pred); hold on; plot([min(Y_test), max(Y_test)], [min(Y_test), max(Y_test)], 'r--'); xlabel('真实值'); ylabel('预测值'); title('预测 vs 真实值散点图'); figure; plot(Y_test - Y_pred, 'bo'); hline = refline(0,0); hline.Color = 'r'; title('残差分布');最后说两句
模型跑完别急着关MATLAB,记得把网络和归一化参数存下来:
save('regression_model.mat', 'net', 'muX', 'sigmaX', 'Y_mean', 'Y_std');下次要用的时候直接load,新数据按同样的姿势归一化就能预测。别嫌流程繁琐,工业级部署都这路子。
(代码已测试通过,MATLAB 2021b及以上版本亲测有效。数据量大的话记得把MiniBatchSize调大,不然训练到明年…)
基于深度神经网络的数据回归预测 基于NATLAB环境 替换自己的数据即可 数据回归预测评价指标采用MAE MSE RMSE R2 RPD MAPE