主要内容

机器学习模型在命令行预测的代码生成

这个例子展示了如何在命令行中生成预测分类和回归模型对象的代码。您也可以使用MATLAB®Coder™应用程序生成代码使用MATLAB编码器应用程序预测机器学习模型的代码生成获取详细信息。

一定的分类和回归模型对象有预测或者随机支持代码生成的函数。金宝app使用这些对象函数进行预测需要训练有素的分类或回归模型对象,但是arg游戏选择codegen(MATLAB编码器)不接受这些对象。通过使用解决此限制Savelarnerforcoder.loadLearnerForCoder如该示例中所述。

此流程图显示了分类和回归模型对象的对象函数的代码生成工作流。

培训模型后,通过使用保存培训的模型Savelarnerforcoder..定义通过使用加载保存的模型的入口点函数loadLearnerForCoder并调用对象函数。然后通过使用生成代码进行入口点功能codegen,并验证生成的代码。

训练分类模型

训练一个具有代码生成功能的分类模型对象预测功能。在这种情况下,列车支持向量机(SVM)分类模金宝app型。

负载渔民第1 = ~ strcmp(物种,'setosa');X =量(第1 3:4);Y =物种(第1);Mdl = fitcsvm (X, Y);

这个步骤可以包括数据预处理、特征选择和使用交叉验证优化模型等。

保存模型使用Savelarnerforcoder.

将分类模型保存到文件中SVMModel.mat通过使用Savelarnerforcoder.

SavelAlnerForCoder(MDL,'svmmodel');

Savelarnerforcoder.将分类模型保存到MATLAB二进制文件中SVMModel.mat作为当前文件夹中的结构数组。

定义入口点函数

一个入学点函数,又称顶级或者小奖函数,是为代码生成而定义的函数。因为你不能在顶层使用codegen,您必须定义一个入门点函数,可调用启用代码生成的函数,并通过使用生成输入点功能的C / C ++代码codegen.入口点函数中的所有函数必须支持代码生成。金宝app

定义一个入口点函数,返回输入预测器数据的预测标签。在函数中,使用loadLearnerForCoder,然后将加载的模型传递给预测.在本例中,定义predictLabelsSVM功能,使用SVM模型预测标签MDL.

类型predictLabelsSVM.m%显示predictlabelssvm.m.m文件的内容
函数标签= predictlabelssvm(x)%#codegen%predictlabelssvm标签使用训练的svm型号mdl%predictlabelssvm使用%保存的SVM型号MDL和预测器数据X预测标签标签的向量。mdl = loadlearnerforcoder('svmmodel');标签=预测(MDL,x);结束

添加% # codegen编译器指令(或Pragma)到函数签名后的入门点函数,表示您打算为Matlab算法生成代码。添加此指令指示MATLAB代码分析仪帮助您诊断和修复将在代码生成中导致错误的违规。看使用代码分析仪检查代码(MATLAB编码器)

注意:如果你点击这个页面右上角的按钮,并在MATLAB®中打开这个示例,那么MATLAB®将打开示例文件夹。这个文件夹包括入口点函数文件。

生成代码

设置编译器

要生成C / C ++代码,您必须访问正确配置的C / C ++编译器。MATLAB编码器定位并使用支持的安装编译器。金宝app你可以使用梅克斯- setup.查看和更改默认编译器。有关更多详细信息,请参阅改变默认的编译器

使用代码使用codegen

生成用于入口点函数的代码codegen(MATLAB编码器).因为C和c++都是静态类型语言,所以必须在编译时确定入口点函数中所有变量的属性。在调用时指定入口点函数的所有输入的数据类型和大小codegen通过使用arg游戏选项。

在这种情况下,通过X作为一个值arg游戏选项指定生成的代码必须接受具有与培训数据相同数据类型和数组大小的输入X

codegenpredictLabelsSVMarg游戏{X}
代码生成成功。

如果观察次数在编译时未知,则还可以使用的方式将输入指定为可变大小Coder.typeof.(MATLAB编码器).有关详细信息,请参见为代码生成指定可变大小参数指定入口点功能输入的属性(MATLAB编码器)

构建类型

MATLAB编码器可以生成以下构建类型的代码:

  • MEX (MATLAB可执行程序)函数

  • 独立的C / c++代码

  • 独立的C/ c++代码编译为静态库

  • 编译为动态链接库的独立C/ c++代码

  • 独立C / C ++代码编译为可执行文件

属性指定构建类型配置选择codegen(MATLAB编码器).有关设置代码生成选项的详细信息,请参见配置选择codegen(MATLAB编码器)配置构建设置(MATLAB编码器)

默认情况下,codegen生成MEX功能。MEX函数是可从MATLAB执行的C / C ++程序。您可以使用MEX功能来加速MATLAB算法并测试生成的功能和运行时问题的代码。有关详细信息,请参见MATLAB算法加速(MATLAB编码器)为什么在MATLAB中测试MEX函数?(MATLAB编码器)

代码生成报告

你可以使用-report.标记以生成代码生成报告。该报告帮助您调试代码生成问题,并查看生成的C/ c++代码。有关详细信息,请参见代码生成报告(MATLAB编码器)

验证生成的代码

测试MEX功能以验证生成的代码是否提供了与原始MATLAB代码相同的功能。要执行此测试,请使用与运行原始MATLAB代码的相同输入运行MEX函数,然后比较结果。在生成独立代码之前在MATLAB中运行MEX函数也使您能够检测和修复在生成的独立代码中诊断的运行时错误。有关更多详细信息,请参阅为什么在MATLAB中测试MEX函数?(MATLAB编码器)

通过一些预测数据来验证是否预测predictLabelsSVM,MEX函数返回相同的标签。

labels1 =预测(Mdl X);labels2 = predictLabelsSVM (X);labels3 = predictLabelsSVM_mex (X);

通过使用比较预测的标签isequal

verifymex = isequal(标签1,labels2,labels3)
验证ex =.逻辑1

isequal返回逻辑1(真实),这意味着所有的输入都是相等的。比较证实了预测函数,predictLabelsSVM函数和MEX函数返回相同的标签。

另请参阅

|||(MATLAB编码器)

相关主题