这个例子展示了如何使用Classification Learner训练逻辑回归模型,然后生成C代码,使用导出的分类模型预测标签。
加载样本数据,并将数据导入分类学习者应用程序。
加载病人
数据集。指定预测器数据X
组成的p
预测因子和响应变量Y
.
负载病人X =[年龄舒张高度收缩期体重];p =大小(X, 2);Y =性别;
在应用程序选项卡上,单击显示更多在“应用程序”部分右侧的箭头中显示图库,然后选择分类学习者.在分类学习者选项卡,文件部分中,选择新会话>从工作区.
在“来自工作区的新会话”对话框中,在数据集变量中,选择X
从工作区变量列表中。下响应,单击从工作空间单选按钮,然后选择Y
从列表中。要接受默认的验证方案并继续,请单击开始会议.默认的验证选项是5倍交叉验证,以防止过拟合。
默认情况下,分类学习器创建数据的散点图。
在分类学习者应用程序中训练逻辑回归模型。
在分类学习者选项卡,模型类型部分,单击显示更多显示分类器图库的箭头。下逻辑回归分类器,单击逻辑回归模型。点击火车在培训部分。该应用程序训练模型,并显示其交叉验证的准确性得分准确性(验证).
导出模型到MATLAB®工作空间,并保存使用saveLearnerForCoder
.
在出口部分中,选择导出模型>导出紧凑模型.点击好吧在对话框中。
结构trainedModel
出现在MATLAB工作区中。这个领域GeneralizedLinearModel
的trainedModel
包含紧凑模型。
注意:如果使用所有支持文件运行此示例,则可以加载金宝apptrainedModel.mat
文件,而不是导出模型。的trainedModel
结构是使用前面的步骤创建的。
负载(“trainedModel.mat”)
在命令行中,将压缩模型保存到一个名为myModel.mat
在当前文件夹中。
saveLearnerForCoder (trainedModel。GeneralizedLinearModel,“myModel”)
另外,保存训练模型的成功、失败和缺失类的名称。
一会= {trainedModel。SuccessClass,...trainedModel.FailureClass trainedModel.MissingClass};保存(“ModelParameters.mat”,“类名”);
定义用于预测的入口点函数,并使用codegen
.
在当前文件夹中,定义一个名为classifyX.m
它的作用如下:
接受一个数字矩阵(X
),其中包含与训练逻辑回归模型相同的预测变量
加载分类模型myModel.mat
使用模型计算预测的概率
将预测的概率转换为索引,其中1表示成功,2表示失败,3表示缺失值
装入类名ModelParameters.mat
通过索引类名返回预测的标签
函数标签:% # codegen使用Logistic回归模型进行分类% CLASSIFYX将测量值按X分类%在myModel.mat文件中使用逻辑回归模型,%,然后返回label中的类标签。n =大小(X, 1);标签= coder.nullcopy(细胞(n, 1));CompactMdl = loadLearnerForCoder (“myModel”);概率=预测(CompactMdl X);Index = ~isnan(概率).*((概率<0.5)+1)+ isnan(概率)*3;classInfo = coder.load (“ModelParameters”);一会= classInfo.classNames;为i = 1:n标签{i} = classNames{index(i)};结束结束
注意:如果在Classification Learner中使用特征选择或主成分分析(PCA)后创建逻辑回归模型,则必须在入口点函数中包含额外的代码行。有关显示这些额外步骤的示例,请参见代码生成和分类学习程序.
生成一个MEX函数classifyX.m
.创建一个矩阵数据
使用以下方法生成代码coder.typeof
.指定中的行数数据
是任意的,但是数据
必须有p
列,p
为用于训练逻辑回归模型的预测器数量。使用arg游戏
选项来指定数据
作为参数。
data =编码器。typeof (X, [Inf p], [1 0]);codegenclassifyX.marg游戏数据
代码生成成功。
codegen
生成MEX文件classifyX_mex.mex64
在当前文件夹中。文件扩展名取决于您的平台。
验证MEX函数是否返回预期的标签。随机抽取15个观察结果X
.
rng (“默认”)%的再现性testX = datasample (X, 15);
对观察结果进行分类predictFcn
在分类学习者训练的分类模型中发挥作用。
testLabels = trainedModel.predictFcn (testX);
通过使用生成的MEX函数对观察结果进行分类classifyX_mex
.
testLabelsMEX = classifyX_mex (testX);
比较这几组预测。isequal
返回逻辑1 (true) iftestLabels
和testLabelsMEX
是相等的。
isequal (testLabels testLabelsMEX)
ans =逻辑1
predictFcn
和MEX函数classifyX_mex
返回相同的值。
loadLearnerForCoder
|saveLearnerForCoder
|coder.typeof
(MATLAB编码器)|codegen
(MATLAB编码器)|fitglm
|预测