主要内容

分类学习中训练Logistic回归模型的代码生成

这个例子展示了如何使用Classification Learner训练逻辑回归模型,然后生成C代码,使用导出的分类模型预测标签。

加载示例数据

加载样本数据,并将数据导入分类学习者应用程序。

加载病人数据集。指定预测器数据X组成的p预测因子和响应变量Y

负载病人X =[年龄舒张高度收缩期体重];p =大小(X, 2);Y =性别;

应用程序选项卡上,单击显示更多在“应用程序”部分右侧的箭头中显示图库,然后选择分类学习者.在分类学习者选项卡,文件部分中,选择新会话>从工作区

在“来自工作区的新会话”对话框中,在数据集变量中,选择X从工作区变量列表中。下响应,单击从工作空间单选按钮,然后选择Y从列表中。要接受默认的验证方案并继续,请单击开始会议.默认的验证选项是5倍交叉验证,以防止过拟合。

默认情况下,分类学习器创建数据的散点图。

培训Logistic回归模型

在分类学习者应用程序中训练逻辑回归模型。

分类学习者选项卡,模型类型部分,单击显示更多显示分类器图库的箭头。下逻辑回归分类器,单击逻辑回归模型。点击火车培训部分。该应用程序训练模型,并显示其交叉验证的准确性得分准确性(验证)

将模型导出到工作区

导出模型到MATLAB®工作空间,并保存使用saveLearnerForCoder

出口部分中,选择导出模型>导出紧凑模型.点击好吧在对话框中。

结构trainedModel出现在MATLAB工作区中。这个领域GeneralizedLinearModeltrainedModel包含紧凑模型。

注意:如果使用所有支持文件运行此示例,则可以加载金宝apptrainedModel.mat文件,而不是导出模型。的trainedModel结构是使用前面的步骤创建的。

负载(“trainedModel.mat”

在命令行中,将压缩模型保存到一个名为myModel.mat在当前文件夹中。

saveLearnerForCoder (trainedModel。GeneralizedLinearModel,“myModel”

另外,保存训练模型的成功、失败和缺失类的名称。

一会= {trainedModel。SuccessClass,...trainedModel.FailureClass trainedModel.MissingClass};保存(“ModelParameters.mat”“类名”);

生成C代码的预测

定义用于预测的入口点函数,并使用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) iftestLabelstestLabelsMEX是相等的。

isequal (testLabels testLabelsMEX)
ans =逻辑1

predictFcn和MEX函数classifyX_mex返回相同的值。

另请参阅

||(MATLAB编码器)|(MATLAB编码器)||

相关的话题