目录

MATLAB实现DNN全连接神经网络时间序列未来多步预测代码


MATLAB实现DNN全连接神经网络时间序列未来多步预测代码

以下是使用MATLAB实现DNN全连接神经网络时间序列未来多步预测的示例代码,仅供参考。

% 加载数据
load sunspot.dat

% 归一化处理数据
data = normalize(sunspot);

% 划分训练集和测试集
train_data = data(1:200,:);
test_data = data(201:end,:);

% 定义模型参数
num_features = size(train_data,2);
num_hidden_nodes = 32;
num_output_nodes = 1;

% 创建神经网络模型
net = feedforwardnet(num_hidden_nodes);
net.layers{1}.transferFcn = 'tansig';
net.layers{2}.transferFcn = 'purelin';

% 设置模型训练参数
net.trainFcn = 'trainlm';
net.trainParam.epochs = 100;
net.trainParam.max_fail = 5;
net.trainParam.min_grad = 1e-10;
net.trainParam.goal = 0.001;

% 训练模型
[net,tr] = train(net,train_data(:,1:end-1)',train_data(:,end)');

% 测试模型
y_pred = net(test_data(:,1:end-1)')';
rmse = sqrt(mean((test_data(:,end)-y_pred).^2));
mae = mean(abs(test_data(:,end)-y_pred));

% 多步预测
future_steps = 12;  % 预测未来12个时间步
input_data = test_data(end-num_features+1:end,1:end-1);
y_future = zeros(future_steps,1);

for i = 1:future_steps
    y_pred = net(input_data')';
    y_future(i) = y_pred;
    input_data = [input_data(2:end,:) y_pred];
end

% 绘制图像
figure;
t = (1:size(sunspot,1))';
plot(t,sunspot,'b',t,[NaN(200,1);y_pred],'r',t,[NaN(200,1);test_data(:,end)],'g',t,[NaN(200+size(test_data,1),1);y_future],'m');
legend('原始数据','测试集预测值','测试集真实值','未来多步预测值');
xlabel('时间');
ylabel('sunspot数量');
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐