Error NARX Model Prediction
1 次查看(过去 30 天)
显示 更早的评论
Hello everyone...
Im doing a carbon emission(output) with multiple input using neural network approached (NARX). I trained the model using NARX tollbox. I couldn't find the code I needed to write to predict the next 8 years. It doesn't give any predictions in the code I wrote... Would you mind to help me ? Where is the mistake :( My code;
x=xlsread('Input.xlsx');
t=xlsread('Output.xlsx');
X = tonndata(x,false,false);
T = tonndata(t,false,false);
trainFcn = 'trainlm';
inputDelays = 1:2;
feedbackDelays = 1:2;
hiddenLayerSize = 10;
net = narxnet(inputDelays,feedbackDelays,hiddenLayerSize,'open',trainFcn);
[x,xi,ai,t] = preparets(net,X,{},T);
net.divideParam.trainRatio = 80/100;
net.divideParam.valRatio = 10/100;
net.divideParam.testRatio = 10/100;
[net,tr] = train(net,x,t,xi,ai);
y = net(x,xi,ai);
e = gsubtract(t,y);
performance = perform(net,t,y)
view(net)
netc = closeloop(net);
netc.name = [net.name ' - Closed Loop'];
view(netc)
[xc,xic,aic,tc] = preparets(netc,X,{},T);
yc = netc(xc,xic,aic);
closedLoopPerformance = perform(net,tc,yc)
nets = removedelay(net);
nets.name = [net.name ' - Predict One Step Ahead'];
view(nets)
[xs,xis,ais,ts] = preparets(nets,X,{},T);
ys = nets(xs,xis,ais);
stepAheadPerformance = perform(nets,ts,ys)
numFutureSteps = 8;
predictedValues = cell(1, numFutureSteps);
[~, lastInputState, lastLayerState] = preparets(netc, X, {}, T);
lastOutput = yc{end};
for i = 1:numFutureSteps
[nextOutput, nextInputState, nextLayerState] = netc({lastOutput}, lastInputState, lastLayerState);
predictedValues{i} = nextOutput;
lastOutput = nextOutput;
lastInputState = nextInputState;lastLayerState = nextLayerState;
回答(1 个)
Purvaja
2025-8-26
编辑:Purvaja
2025-8-26
I understand that you’re using a NARX neural network for predicting carbon emissions with multiple inputs. You trained the model, but when trying to forecast the next 8 years, your code didn’t produce results. The code that you had provided is correct, it just had incomplete loop, so in my dummy code I completed it and printing the results as below.
Here’s the changes I made on my side:
- Prediction loop:
for k = 1:numFutureSteps
[nextOutput, lastInputState, lastLayerState] = netc(lastOutput, lastInputState, lastLayerState);
predictedValues{k} = nextOutput;
lastOutput = nextOutput;
end
I have removed some redundant code and variables to make it straightforward like above.
2. Convert predictions into numeric values for display:
predictedValuesNumeric = cellfun(@(c) c, predictedValues);
disp('Predicted carbon emissions for next 8 years:');
disp(predictedValuesNumeric);
The predictions are stored in cells, so you need cellfun to extract the actual numbers before displaying them.
Dummy results I got after implementation:
Training performance: 0.040058
Closed-loop performance: 0.16581
Predicted carbon emissions for next 8 years:
0.0766 3.8152 -0.7831 -0.0690 -0.7864 -0.3953 -0.3675 -0.2086
For better clarification regarding the functions I used, you can go through following links:
- Preparets: https://www.mathworks.com/help/deeplearning/ref/preparets.html
- Cellfun: https://www.mathworks.com/help/matlab/ref/cellfun.html
I hope this solves your doubt!
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Sequence and Numeric Feature Data Workflows 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!