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

这个例子展示了如何产生用于分类和回归模型对象在命令行预测编码。您也可以使用MATLAB®编码器™应用程序生成代码。看到机器学习模型预测的代码生成使用MATLAB编码器应用了解详情。

某些分类和回归模型对象有预测随机功能,支持代码生成。万博1manbetx预测使用这些对象的功能需要一个训练有素的分类或回归模型对象,但-args的选择代码生成不接受这些对象。通过使用来绕过这个限制saveLearnerForCoderloadLearnerForCoder如本例中所述。

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

在你训练一个模型之后,保存训练过的模型saveLearnerForCoder。定义一个入口点函数,使用以下命令加载保存的模型loadLearnerForCoder并调用对象函数。然后为入口点函数生成代码代码生成,并验证所生成的代码。

火车分类模型

列车配备了一个支持代码生成,分类模型对象预测函数。在这种情况下,训练一个支持向量机(SVM)分万博1manbetx类模型。

加载fisheririsINDS =〜的strcmp(物种,“setosa”);X = MEAS(INDS,3:4);Y =物种(INDS);MDL = fitcsvm(X,Y);

该步骤可以包括数据预处理,特征选择,并使用交叉验证优化模型,例如。

保存模型使用saveLearnerForCoder

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

saveLearnerForCoder (Mdl“SVMModel”);

saveLearnerForCoder保存分类模型到MATLAB二进制文件SVMModel.mat如在当前文件夹的结构阵列。

定义入口点函数

一个入口点功能,也被称为顶层功能,是为代码生成定义函数。因为你不能使用在顶级调用任何函数代码生成,您必须定义一个调用支持代码生成的函数的入口点函数,并使用代码生成。在入口点函数中的所有功能都必须支持代码生成。万博1manbetx

定义一个入口点函数返回预测输入预测数据标签。在功能,使用装载训练的分类模型loadLearnerForCoder,然后将加载的模型传递给预测。在这种情况下,定义predictLabelsSVM函数,利用支持向量机模型预测标签Mdl

类型predictLabelsSVM.m显示predictLabelsSVM的内容。m文件
功能标记= predictLabelsSVM(X)%#代码生成%PREDICTLABELSSVM标签中使用训练的SVM模型铜牌%predictLabelsSVM预测标签的标签载体使用%新的观察所保存的SVM模型铜牌和预测器数据x。MDL = loadLearnerForCoder( 'SVMModel');标记=预测(MDL,X);结束

添加%#代码生成指向函数签名之后的入口函数的编译器指令(或pragma),表示您打算为MATLAB算法生成代码。添加这个指令将指导MATLAB代码分析器帮助您诊断和修复在代码生成过程中可能导致错误的违规。看到用代码分析器检查代码(编码器MATLAB)。

注意:如果您单击位于此页面的右上部分的按钮,打开在MATLAB®这个例子中,然后打开MATLAB®的示例文件夹中。此文件夹包含入口点函数文件。

生成代码

设置编译器

要生成C/ c++代码,您必须能够访问正确配置的C/ c++编译器。MATLAB编码器定位和使用一个支持的,安装的编译器。万博1manbetx您可以使用墨西哥人设置查看和更改默认编译器。有关更多细节,请参见更改默认的编译器(MATLAB)。

使用生成代码代码生成

使用生成入口点函数的代码代码生成。由于C和C ++的静态类型语言,你必须在编译时确定的入口点函数的所有变量的性质。指定的数据类型和大小,当你调用的入口点函数的所有输入代码生成通过使用-args选择。

在这种情况下,passX作为价值-args选项指定生成的代码必须接受与训练数据具有相同数据类型和数组大小的输入X

代码生成predictLabelsSVM-args{X}

如果在编译时观察的数量是未知的,您也可以通过使用将输入指定为可变大小coder.typeof。有关详细信息,请参阅指定代码生成可变尺寸参数指定入口点函数输入的属性(MATLAB编码器)

构建类型

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

  • MEX(MATLAB可执行文件)功能

  • 独立的C / C ++代码

  • 独立的C / C ++编译代码到一个静态库

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

  • 编译成可执行文件的独立C/ c++代码

您可以使用指定的构建类型-config的选择代码生成。有关设置代码生成选项的详细信息,请参阅-config的选择代码生成配置构建设置(编码器MATLAB)。

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

代码生成报告

您可以使用报告标志以生产代码生成报告。此报告有助于您调试代码生成问题,并查看生成的C / C ++代码。有关详细信息,请参阅代码生成报告(编码器MATLAB)。

验证生成的代码

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

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

labels1 =预测(MDL,X);标签2 = predictLabelsSVM(X);标签3 = predictLabelsSVM_mex(X);

使用。比较预测的标签是平等的

verifyMEX = isequal (labels1 labels2 labels3)
verifyMEX =合乎逻辑1

是平等的返回逻辑1 (真正的),这意味着所有的输入是相等的。对比确认预测功能,predictLabelsSVM功能和MEX函数返回相同的标签。

也可以看看

|||

相关的话题