필터 지우기
필터 지우기

Simulink Model for Trained Regression Model Throws "Not Enough Input Arguments" Error

조회 수: 2 (최근 30일)
I trained a regression model using MATLAB scripts and followed the instructions in this link (https://in.mathworks.com/help/stats/predict-class-labels-using-matlab-function-block.html) to create a Simulink model that predicts output using the trained model. However, when I try to run the Simulink model, I get the following error message:
"Not enough input arguments.
Error in GradientBoostModel1Predict (line 3) Ypred1=predict(model1,Xtest);"
I have defined Xtest before calling the GradientBoostModel1Predict function and passed it to the function, so I'm not sure what the issue is. Can someone help me understand why I'm getting this error message and how I can fix it?
Here is my code:
% Load the engine_dataset
load engine_dataset
% Prepare the data
X = engineInputs.';
Y= engineTargets.';
% Split the data into training and testing sets
cv = cvpartition(size(X,1),'HoldOut',0.2);
Xtrain = X(cv.training,:);
Ytrain = Y(cv.training,:);
Xtest = X(cv.test,:);
Ytest = Y(cv.test,:);
% Train the Gradient Boosting model
model1 = fitrensemble(Xtrain,Ytrain(:,1),'Method','LSBoost','NumLearningCycles',500,'Learners',templateTree('MaxNumSplits',10));
model2 = fitrensemble(Xtrain,Ytrain(:,2),'Method','LSBoost','NumLearningCycles',500,'Learners',templateTree('MaxNumSplits',10));
saveLearnerForCoder(model1,'GradientBoostModel1');
saveLearnerForCoder(model2,'GradientBoostModel2');
Function File:
function Ypred1 = GradientBoostModel1Predict(Xtest)%#codegen
Model1 = loadLearnerForCoder('GradientBoostModel1.mat');
Ypred1=predict(Model1,Xtest);
end

채택된 답변

Rohit
Rohit 2023년 5월 18일
Hi Dhanushya,
I understand that you want to use your trained neural network in Simulink using the MATLAB Function Block but are facing an error.
I was able to reproduce your error and I got the same error message if I don’t pass “Xtest” to the function when calling it. However, if I call “GradientBoostModel1Predict(Xtest)” after saving the learner, I am able to get the predictions. I have added the code below for your reference.
% Load the engine_dataset
load engine_dataset
% Prepare the data
X = engineInputs.';
Y= engineTargets.';
% Split the data into training and testing sets
cv = cvpartition(size(X,1),'HoldOut',0.2);
Xtrain = X(cv.training,:);
Ytrain = Y(cv.training,:);
Xtest = X(cv.test,:);
Ytest = Y(cv.test,:);
% Train the Gradient Boosting model
model1 = fitrensemble(Xtrain,Ytrain(:,1),'Method','LSBoost','NumLearningCycles',500,'Learners',templateTree('MaxNumSplits',10));
model2 = fitrensemble(Xtrain,Ytrain(:,2),'Method','LSBoost','NumLearningCycles',500,'Learners',templateTree('MaxNumSplits',10));
saveLearnerForCoder(model1,'GradientBoostModel1');
saveLearnerForCoder(model2,'GradientBoostModel2');
GradientBoostModel1Predict(Xtest)
ans = 239×1
-21.4872 21.2125 -7.7464 -6.5276 -0.5813 9.1135 8.4623 9.1444 56.4885 9.3798
function Ypred1 = GradientBoostModel1Predict(Xtest)%#codegen
Model1 = loadLearnerForCoder('GradientBoostModel1.mat');
Ypred1=predict(Model1,Xtest);
end
  댓글 수: 2
Dhanushya M
Dhanushya M 2023년 5월 22일
편집: Dhanushya M 2023년 5월 22일
Thank you for the response.
So the function is working, but not with input X, but with Xtest or Xtest(1:5,:) etc. The predicted data is too erraneous though. I will have to train the model in a different way i guess.
Dhanushya M
Dhanushya M 2023년 5월 22일
편집: Dhanushya M 2023년 5월 22일
Giving input as X in commandline as
GradientBoostModel1Predict(X)
This also works. So the function seems to be working.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Neeraja
Neeraja 2023년 5월 22일
Hi Dhanushya,
as @Rohit said, I too was able to see the predicted output for Xtest. So the function is working.
I wanted to add a suggestion. Instead of using MATLAB function blocks to create a simulink model that models the trained regression model, you can try using RegressionEnsemble Predict Block or RegressionTree Predict Block in Simulink to predict responses.
The link below shows an example of creating Simulink model for prediction using trained regression ensemble model.
The code you gave uses the example data set engine_dataset for ANN model training, which can predict both Y responses simultaneously. But for regression models, I believe a model can have several inputs but only a single output. So for engine_dataset, you may need two models each predicting one of the two responses.
Also you need to format the input before giving it to the model. See https://in.mathworks.com/help/simulink/ug/load-data-using-the-from-workspace-block.html.

카테고리

Help CenterFile Exchange에서 Regression Tree Ensembles에 대해 자세히 알아보기

제품


릴리스

R2023a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by