预测
预测广义线性回归模型的响应
描述
例子
预测响应值
建立一个广义线性回归模型,并预测其对新数据的响应。
使用带有两个基础预测器的泊松随机数生成样本数据X (: 1)
而且X (:, 2)
.
rng (“默认”)%用于重现性Rndvars = randn(100,2);X = [2 + rndvars(:,1),rndvars(:,2)];mu = exp(1 + X*[1;2]);Y = poissrnd(mu);
建立泊松数据的广义线性回归模型。
mdl = fitglm(X,y,'y ~ x1 + x2',“分布”,“泊松”);
为预测创建数据点。
[Xtest1,Xtest2] = meshgrid(-1:.5:3,-2:.5:2);Xnew = [Xtest1(:),Xtest2(:)];
在数据点上预测响应。
ypred = predict(mdl,Xnew);
绘制预测图。
冲浪(Xtest1 Xtest2,重塑(ypred 9 9))
生成用于预测的C/ c++代码
拟合一个广义线性回归模型,然后用保存模型saveLearnerForCoder
.定义一个入口点函数,它通过使用loadLearnerForCoder
并调用预测
拟合模型的功能。然后使用codegen
(MATLAB编码器)生成C/ c++代码。注意,生成C/ c++代码需要MATLAB®Coder™。
这个示例简要解释了在命令行中预测线性回归模型的代码生成工作流。有关更多细节,请参见命令行机器学习模型预测的代码生成.您还可以使用MATLAB Coder应用程序生成代码。详细信息请参见基于MATLAB Coder App的机器学习模型预测代码生成.
火车模型
使用带有两个基础预测器的泊松随机数生成样本数据X (: 1)
而且X (:, 2)
.
rng (“默认”)%用于重现性Rndvars = randn(100,2);X = [2 + rndvars(:,1),rndvars(:,2)];mu = exp(1 + X*[1;2]);Y = poissrnd(mu);
创建一个广义线性回归模型。指定响应的泊松分布。
mdl = fitglm(X,y,'y ~ x1 + x2',“分布”,“泊松”);
保存模型
将拟合的广义线性回归模型保存到文件中GLMMdl.mat
通过使用saveLearnerForCoder
.
saveLearnerForCoder (mdl“GLMMdl”);
定义入口点函数
在当前文件夹中,定义一个名为mypredictGLM.m
它的作用如下:
接受新的预测器输入和有效的名值对参数。
加载拟合的广义线性回归模型
GLMMdl.mat
通过使用loadLearnerForCoder
.返回预测和置信区间边界。
函数[yhat,ci] = mypredictGLM(x,varargin)% # codegen使用GLM模型预测响应% MYPREDICTGLM预测n × 1矩阵中n个观察值的响应% vector x使用存储在mat文件GLMMdl.mat中的GLM模型,%,然后返回n × 1向量yhat中的预测结果。的置信区间边界n × 2向量ci中的%预测。CompactMdl = loadLearnerForCoder(“GLMMdl”);narginchk(正);[yhat,ci] = predict(CompactMdl,x,varargin{:});结束
添加% # codegen
编译器指令(或pragma)添加到函数签名后的入口点函数,以表明您打算为MATLAB算法生成代码。添加此指令将指导MATLAB代码分析器帮助您诊断和修复代码生成过程中可能导致错误的违反。
生成代码
为入口点函数生成代码codegen
(MATLAB编码器).因为C和c++是静态类型语言,所以必须在编译时确定入口点函数中所有变量的属性。要指定数据类型和精确的输入数组大小,传递一个MATLAB®表达式,该表达式表示具有特定数据类型和数组大小的值集。使用编码器。常数
(MATLAB编码器)用于名称-值对参数的名称。
为预测创造分数。
[Xtest1,Xtest2] = meshgrid(-1:.5:3,-2:.5:2);Xnew = [Xtest1(:),Xtest2(:)];
生成代码并指定在预测上返回90%的同时置信区间。
codegenmypredictGLMarg游戏{Xnew, coder.Constant(α),0.1,coder.Constant(同步),真正的}
代码生成成功。
codegen
生成MEX函数mypredictGLM_mex
使用一个平台相关的扩展。
如果在编译时不知道观察的数量,还可以使用coder.typeof
(MATLAB编码器).详情请参见为代码生成指定可变大小的参数而且指定入口点函数输入的属性(MATLAB编码器).
验证生成的代码
比较预测和置信区间预测
而且mypredictGLM_mex
.中指定名称-值对参数的顺序与arg游戏
参数的调用codegen
.
[yhat1,ci1] = predict(mdl,Xnew,“α”, 0.1,“同时”,真正的);[yhat2,ci2] = mypredictGLM_mex(Xnew,“α”, 0.1,“同时”,真正的);
的返回值。mypredictGLM_mex
的值可能包含舍入差异预测
.在这种情况下,比较允许小偏差的值。
查找(abs(yhat1-yhat2) > 1e-6)
Ans = 0x1空双列向量
Find (abs(ci1-ci2) > 1e-6)
Ans = 0x1空双列向量
比较确认返回值在公差范围内相等1 e-6
.
输入参数
mdl
- - - - - -广义线性回归模型
GeneralizedLinearModel
对象|CompactGeneralizedLinearModel
对象
广义线性回归模型,具体为GeneralizedLinearModel
使用fitglm
或stepwiseglm
,或CompactGeneralizedLinearModel
使用紧凑的
.
Xnew
- - - - - -新的预测器输入值
表格|数据集的数组|矩阵
新的预测器输入值,指定为表、数据集数组或矩阵。每一行Xnew
对应一个观察结果,每一列对应一个变量。
如果
Xnew
是表或数据集数组,它必须包含与PredictorNames
的属性mdl
.如果
Xnew
是一个矩阵,它必须有相同数量的变量(列),并以相同的顺序用于创建的预测器输入mdl
.请注意,Xnew
还必须包含在拟合模型中未用作预测变量的任何预测变量。此外,所有的变量在创建mdl
必须是数字。要将数值预测器视为类别,请使用“CategoricalVars”
时的名称-值对参数mdl
.
数据类型:单
|双
|表格
名称-值参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。
在R2021a之前,名称和值之间用逗号隔开,并括起来的名字
在报价。
例子:[ypred,yci] = predict(Mdl,Xnew,'Alpha',0.01,'Simultaneous',true)
返回置信区间开办
99%置信水平,同时计算所有预测值。
α
- - - - - -显著性水平
0.05(默认)|范围为[0,1]的数值
置信区间的显著性水平,指定为逗号分隔的对,由“α”
和一个范围为[0,1]的数值。的置信水平开办
等于100 (1 -α
) %.α
是置信区间不包含真值的概率。
例子:“阿尔法”,0.01
数据类型:单
|双
BinomialSize
- - - - - -二项分布的试验次数
1(默认)|标量|向量
二项分布的试验次数,指定为逗号分隔的对,由“BinomialSize”
和响应长度相同的标量或向量。预测
将标量输入展开为与响应大小相同的常量数组。标量输入意味着所有的观察都有相同的试验次数。
中的输出值的含义ypred
取决于的值“BinomialSize”
.
如果
“BinomialSize”
是1(默认),那么输出中的每个值ypred
是成功的概率。如果
“BinomialSize”
不是1,那么输出中的每个值ypred
是试验中预测的成功次数。
数据类型:单
|双
抵消
- - - - - -偏移值
0(大小(Xnew,1))
(默认)|标量|向量
中的每一行的偏移值Xnew
,指定为逗号分隔的对,由“抵消”
和一个与响应长度相同的标量或向量。预测
将标量输入展开为与响应大小相同的常量数组。
注意,此参数的默认值是一个零向量,即使您指定了“抵消”
拟合模型时的名称-值对参数。如果你指定“抵消”
为了拟合,软件将偏移量作为一个附加的预测因子,其系数值固定为1。换句话说,拟合公式是
f(μ)=偏移量+X*b
,
在哪里f是连杆函数,μ平均响应,和X*b是预测因子的线性组合吗X.的抵消
预测器有系数1
.
数据类型:单
|双
同时
- - - - - -标志计算同时发生的置信界限
假
(默认)|真正的
标志来计算同时发生的置信界限,指定为逗号分隔的对,由“同时”
或真或假。
真正的
- - - - - -预测
中所有预测值对应的响应值曲线的置信界限Xnew
,使用Scheffe方法。上界和下界之间的范围包含由100(1 - α)%置信度的真实响应值组成的曲线。假
- - - - - -预测
中每个观测点的响应值的置信边界Xnew
.在特定预测值处的响应值的置信区间包含具有100(1 - α)%置信的真实响应值。
同时边界比单独边界更宽,因为要求整个响应值曲线在边界内比要求单个预测值的响应值在边界内更严格。
例子:“同步”,真的
输出参数
选择功能
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
使用
saveLearnerForCoder
,loadLearnerForCoder
,codegen
(MATLAB编码器)来生成的代码预测
函数。保存一个训练过的模型saveLearnerForCoder
.定义一个入口点函数,用于加载保存的模型loadLearnerForCoder
并调用预测
函数。然后使用codegen
为入口点函数生成代码。该表包含关于的参数的注释
预测
.该表中未包含的参数完全支持。论点 注意事项和限制 mdl
有关模型对象的使用说明和限制,请参见代码生成的
CompactGeneralizedLinearModel
对象。Xnew
Xnew
必须是单精度或双精度矩阵,或包含数值变量、类别变量或两者都包含的表。中的行数或观察数
Xnew
可以是可变大小的,但列数在Xnew
必须是固定的。如果你想指定
Xnew
作为一个表,那么你的模型必须使用一个表来训练,你必须确保你的预测入口点函数:以数组形式接受数据
从数据输入参数创建一个表,并指定表中的变量名
将表传递给
预测
有关此表工作流的示例,请参见生成代码对表格中的数据进行分类.有关在代码生成中使用表的更多信息,请参见表的代码生成(MATLAB编码器)而且表代码生成的限制(MATLAB编码器).
名-值对参数 名称-值参数中的名称必须是编译时常量。例如,要允许在生成的代码中使用用户定义的显著性级别,请使用include
{coder.Constant(α),0}
在arg游戏
的价值codegen
(MATLAB编码器).
有关更多信息,请参见代码生成简介.
GPU数组
通过使用并行计算工具箱™在图形处理单元(GPU)上运行来加速代码。
该功能完全支持GPU阵列。有关更多信息,请参见在图形处理器上运行MATLAB函数(并行计算工具箱).
版本历史
在R2012a中介绍
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。