Predict responses of linear regression model
collapse all in page
Syntax
ypred = predict(mdl,Xnew)
[ypred,yci]= predict(mdl,Xnew)
[ypred,yci]= predict(mdl,Xnew,Name,Value)
Description
example
ypred = predict(mdl,Xnew)
returns the predicted response values of the linear regression model mdl
to the points in Xnew
.
[ypred,yci]= predict(mdl,Xnew)
also returns confidence intervals for the responses at Xnew
.
example
[ypred,yci]= predict(mdl,Xnew,Name,Value)
specifies additional options using one or more name-value pair arguments. For example, you can specify the confidence level of the confidence interval and the prediction type.
Examples
collapse all
Predict Response Values
Open Live Script
Create a quadratic model of car mileage as a function of weight from the carsmall
data set.
load carsmallX = Weight;y = MPG;mdl = fitlm(X,y,'quadratic');
Create predicted responses to the data.
ypred = predict(mdl,X);
Plot the original responses and the predicted responses to see how they differ.
plot(X,y,'o',X,ypred,'x')legend('Data','Predictions')
Generate C/C++ Code for Prediction
This example uses:
- MATLAB CoderMATLAB Coder
- Statistics and Machine Learning ToolboxStatistics and Machine Learning Toolbox
Open Live Script
Fit a linear regression model, and then save the model by using saveLearnerForCoder. Define an entry-point function that loads the model by using loadLearnerForCoder and calls the predict
function of the fitted model. Then use codegen (MATLAB Coder) to generate C/C++ code. Note that generating C/C++ code requires MATLAB® Coder™.
This example briefly explains the code generation workflow for the prediction of linear regression models at the command line. For more details, see Code Generation for Prediction of Machine Learning Model at Command Line. You can also generate code using the MATLAB Coder app. For details, see Code Generation for Prediction of Machine Learning Model Using MATLAB Coder App.
Train Model
Load the carsmall
data set, and then fit the quadratic regression model.
load carsmallX = Weight;y = MPG;mdl = fitlm(X,y,'quadratic');
Save Model
Save the fitted quadratic model to the file QLMMdl.mat
by using saveLearnerForCoder.
saveLearnerForCoder(mdl,'QLMMdl');
Define Entry-Point Function
Define an entry-point function named mypredictQLM
that does the following:
Accept measurements corresponding to X and optional, valid name-value pair arguments.
Load the fitted quadratic model in
QLMMdl.mat
.Return predictions and confidence interval bounds.
function [yhat,ci] = mypredictQLM(x,varargin) %#codegen%MYPREDICTQLM Predict response using linear model% MYPREDICTQLM predicts responses for the n observations in the n-by-1% vector x using the linear model stored in the MAT-file QLMMdl.mat, and% then returns the predictions in the n-by-1 vector yhat. MYPREDICTQLM% also returns confidence interval bounds for the predictions in the% n-by-2 vector ci.CompactMdl = loadLearnerForCoder('QLMMdl');[yhat,ci] = predict(CompactMdl,x,varargin{:});end
Add the %#codegen
compiler directive (or pragma) to the entry-point function after the function signature to indicate that you intend to generate code for the MATLAB algorithm. Adding this directive instructs the MATLAB Code Analyzer to help you diagnose and fix violations that would result in errors during code generation.
Note: If you click the button located in the upper-right section of this example and open the example in MATLAB®, then MATLAB opens the example folder. This folder includes the entry-point function file.
Generate Code
Generate code for the entry-point function using codegen (MATLAB Coder). Because C and C++ are statically typed languages, you must determine the properties of all variables in the entry-point function at compile time. To specify the data type and exact input array size, pass a MATLAB® expression that represents the set of values with a certain data type and array size. Use coder.Constant (MATLAB Coder) for the names of name-value pair arguments.
If the number of observations is unknown at compile time, you can also specify the input as variable-size by using coder.typeof (MATLAB Coder). For details, see Specify Variable-Size Arguments for Code Generation and Specify Properties of Entry-Point Function Inputs (MATLAB Coder).
codegen mypredictQLM -args {X,coder.Constant('Alpha'),0.1,coder.Constant('Simultaneous'),true}
Code generation successful.
codegen
generates the MEX function mypredictQLM_mex
with a platform-dependent extension.
Verify Generated Code
Compare predictions and confidence intervals using predict
and mypredictQLM_mex
. Specify name-value pair arguments in the same order as in the -args
argument in the call to codegen
.
Xnew = sort(X);[yhat1,ci1] = predict(mdl,Xnew,'Alpha',0.1,'Simultaneous',true);[yhat2,ci2] = mypredictQLM_mex(Xnew,'Alpha',0.1,'Simultaneous',true);
The returned values from mypredictQLM_mex
might include round-off differences compared to the values from predict
. In this case, compare the values allowing a small tolerance.
find(abs(yhat1-yhat2) > 1e-6)
ans = 0x1 empty double column vector
find(abs(ci1-ci2) > 1e-6)
ans = 0x1 empty double column vector
The comparison confirms that the returned values are equal within the tolerance 1e–6
.
Plot the returned values for comparison.
h1 = plot(X,y,'k.');hold onh2 = plot(Xnew,yhat1,'ro',Xnew,yhat2,'gx');h3 = plot(Xnew,ci1,'r-','LineWidth',4);h4 = plot(Xnew,ci2,'g--','LineWidth',2);legend([h1; h2; h3(1); h4(1)], ... {'Data','predict estimates','MEX estimates','predict CIs','MEX CIs'});xlabel('Weight');ylabel('MPG');
Input Arguments
collapse all
Name-Value Arguments
Specify optional pairs of arguments as Name1=Value1,...,NameN=ValueN
, where Name
is the argument name and Value
is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.
Before R2021a, use commas to separate each name and value, and enclose Name
in quotes.
Example: [ypred,yci] = predict(Mdl,Xnew,'Alpha',0.01,'Simultaneous',true)
returns the confidence interval yci
with a 99% confidence level, computed simultaneously for all predictor values.
Output Arguments
collapse all
Alternative Functionality
feval returns the same predictions as
predict
. Thefeval
function can take multiple input arguments, with one input for each predictor variable, which is simpler to use with a model created from a table or dataset array. Note that thefeval
function does not give confidence intervals on its predictions.random returns predictions with added noise.
Use plotSlice to create a figure containing a series of plots, each representing a slice through the predicted regression surface. Each plot shows the fitted response values as a function of a single predictor variable, with the other predictor variables held constant.
Extended Capabilities
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Usage notes and limitations:
Use saveLearnerForCoder, loadLearnerForCoder, and codegen (MATLAB Coder) to generate code for the
predict
function. Save a trained model by usingsaveLearnerForCoder
. Define an entry-point function that loads the saved model by usingloadLearnerForCoder
and calls thepredict
function. Then usecodegen
to generate code for the entry-point function.To generate single-precision C/C++ code for
predict
, specify the name-value argument"DataType","single"
when you call the loadLearnerForCoder function.This table contains notes about the arguments of
predict
. Arguments not included in this table are fully supported.Argument Notes and Limitations mdl
Suppose you train a linear model by using fitlm and specifying 'RobustOpts' as a structure with an anonymous function handle for the
RobustWgtFun
field, use saveLearnerForCoder to save the model, and then useloadLearnerForCoder
to load the model. In this case,loadLearnerForCoder
cannot restore the Robust property into the MATLAB® Workspace. However,loadLearnerForCoder
can load the model at compile time within an entry-point function for code generation.For the usage notes and limitations of the model object, see Code Generation of the
CompactLinearModel
object.
Xnew
Xnew
must be a single-precision or double-precision matrix or a table containing numeric variables, categorical variables, or both.The number of rows, or observations, in
Xnew
can be a variable size, but the number of columns inXnew
must be fixed.If you want to specify
Xnew
as a table, then your model must be trained using a table, and you must ensure that your entry-point function for prediction:Accepts data as arrays
Creates a table from the data input arguments and specifies the variable names in the table
Passes the table to
predict
For an example of this table workflow, see Generate Code to Classify Data in Table. For more information on using tables in code generation, see Code Generation for Tables (MATLAB Coder) and Table Limitations for Code Generation (MATLAB Coder).
Name-value pair arguments Names in name-value arguments must be compile-time constants. For example, to allow a user-defined significance level in the generated code, include
{coder.Constant('Alpha'),0}
in the-args
value of codegen (MATLAB Coder).
For more information, see Introduction to Code Generation.
GPU Arrays
Accelerate code by running on a graphics processing unit (GPU) using Parallel Computing Toolbox™.
This function fully supports GPU arrays. For more information, see Run MATLAB Functions on a GPU (Parallel Computing Toolbox).
Version History
Introduced in R2012a
See Also
CompactLinearModel | LinearModel | feval | random | plotSlice
Topics
- Predict or Simulate Responses to New Data
- Linear Regression Workflow
- Interpret Linear Regression Results
- Linear Regression
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- Deutsch
- English
- Français
- United Kingdom (English)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本 (日本語)
- 한국 (한국어)
Contact your local office