主要内容

代码生成和分类学习者应用

分类学习者非常适合选择和训练分类模型交互,但它并不生成C / c++代码标签数据基于训练模型。的生成函数按钮出口部分分类培训学习者应用MATLAB代码生成一个模型,但不生成C / c++代码。这个例子展示了如何从一个函数生成C代码标签使用导出分类预测模型。这个例子构建一个模型,预测企业的信用评级给出各种财务比率,根据以下步骤:

  1. 使用的信用评级数据集文件CreditRating_Historical.dat,这是包含在统计和机器学习的工具箱™。

  2. 降低数据维数使用主成分分析(PCA)。

  3. 火车一组模型,支持标签代码生成预测。金宝app

  4. 导出模型与最小的5倍,旨在分类精度。

  5. 从一个入口点函数,生成C代码转换新的预测数据,然后使用导出的模型预测相应的标签。

加载示例数据

示例数据并导入数据装载到分类学习者应用。使用散点图审查数据和删除不必要的预测因子。

使用readtable加载历史信用评级文件中的数据集CreditRating_Historical.dat一个表中。

creditrating = readtable (“CreditRating_Historical.dat”);

应用程序选项卡上,单击分类学习者

在分类学习者,分类学习者选项卡,文件部分中,点击新会话并选择从工作空间

新会话从工作区对话框中,选择表creditrating。所有的变量,除了一个标识为响应,是双精度数字向量。点击开始会议比较分类模型基于5倍,旨在分类精度。

分类学习者加载数据和变量的散点图WC_TAID。因为身份证号码不是有用的显示在一块,选择RE_TAX预测

信用评级数据的散点图

散点图表明,两个变量可以单独的类AAA,BBB,BB,CCC相当好。然而,观察相应的剩余类混合到这些类。

身份证号码不有利于预测。因此,在选项部分的分类学习者选项卡上,单击特征选择。在默认的特征选择选项卡上,清晰的ID复选框,然后单击保存和应用。你也可以删除不必要的预测从一开始用新的会话从工作区中的复选框对话框。这个例子显示了如何删除未使用的代码生成时的预测因子包括所有的预测因子。

使主成分分析

使主成分分析来降低数据维数。

选项部分的分类学习者选项卡上,单击主成分分析。在默认的主成分分析选项对话框中,选择使主成分分析,然后单击保存和应用。这一行动PCA适用于预测数据,然后将数据转换之前训练模型。分类学习者只使用组件,共同解释95%的变异。

火车模型

火车一组模型,支持标签代码生成预测。金宝app在分类列表的模型支持代码生成的学习者,明白了金宝app为预测生成C代码

选择以下分类模型和选择,支持标签代码生成预测,然后进行交叉验证(更多细节,请参阅金宝app介绍代码生成)。选择每个模型,模型部分,单击显示更多箭头,然后单击模型。

模型和选项来选择 描述
决策树中,选择所有的树 各种复杂的分类树
金宝app支持向量机中,选择所有支持向量机 支持向量机的各种复杂性和使用各种内核。复杂的支持向量机需要时间来适应。
集成分类器中,选择提高了树。在模型中总结选项卡,在模型Hyperparameters,减少最大数量的分裂5和增加许多学习者One hundred. 提高了整体的分类树
集成分类器中,选择袋装的树木。在模型中总结选项卡,在模型Hyperparameters,减少最大数量的分裂50和增加许多学习者One hundred. 随机森林分类树

在选择模型和指定任何选项,删除默认好树模型(模型1)。右键单击模型模型窗格中,选择删除。然后,在火车部分中,点击火车都并选择火车都

应用程序旨在每个模型类型后,模型窗格显示每个模型和它的5倍,旨在分类准确性,并强调了模型精度最好的。

模型面板中显示训练模型和它们的准确性。高斯SVM模型的精度最高。

选择收益最大的5倍的模型,旨在分类精度,纠错输出编码(ECOC)模型的高斯SVM学习者。启用了PCA、分类学习者使用两个预测6。

情节和解释部分,单击箭头打开画廊,然后单击混淆矩阵(验证)验证结果组。

混淆矩阵的高斯SVM模型

模型做得好区分一个,B,C类。然而,该模型也不做区分特定的水平在这些团体,尤其是B水平较低。

模型导出到工作空间

导出模型,以MATLAB®工作区和保存模型使用saveLearnerForCoder

出口部分中,点击出口模式,然后选择出口紧凑的模型。点击好吧在对话框中。

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

在命令行中,将紧凑模型保存到一个文件中ClassificationLearnerModel.mat在当前文件夹。

saveLearnerForCoder (trainedModel.ClassificationSVM“ClassificationLearnerModel”)

为预测生成C代码

预测使用对象函数需要一个训练有素的模型对象,但是arg游戏选择codegen(MATLAB编码器)不接受这样的对象。解决这种限制使用saveLearnerForCoderloadLearnerForCoder。通过使用保存训练模型saveLearnerForCoder。然后,定义一个入口点函数加载已保存的模型通过使用loadLearnerForCoder并调用预测函数。最后,使用codegen入口点函数来生成代码。

数据进行预处理

新数据进行预处理以同样的方式你训练数据进行预处理。

要进行预处理,需要以下三个模型参数:

  • removeVars——列向量p元素识别指标的变量删除数据p是原始数据中预测变量的数量吗

  • pcaCenters——准确的行向量主成分分析中心

  • pcaCoefficients- - - - - -——- - - - - -rPCA系数矩阵,r最多是

指定的指标预测变量删除,选择使用的数据特征选择在分类学习者。提取PCA统计数据trainedModel

removeVars = 1;pcaCenters = trainedModel.PCACenters;pcaCoefficients = trainedModel.PCACoefficients;

将模型参数保存到一个文件命名ModelParameters.mat在当前文件夹。

保存(“ModelParameters.mat”,“removeVars”,“pcaCenters”,“pcaCoefficients”);

定义入口点函数

一个入口点函数是一个函数定义为代码生成。因为你不能调用任何函数在顶层codegen,您必须定义一个入口点函数,调用code-generation-enabled函数,然后生成C / c++代码的入口点函数的使用codegen

在当前文件夹中,定义一个函数命名mypredictCL.m:

  • 接受一个数字矩阵(X)的原始观测数据包含相同的预测变量的传递到分类学习者

  • 加载分类模型ClassificationLearnerModel.mat和模型参数ModelParameters.mat

  • 消除了相应指标的预测变量removeVars

  • 使用PCA变换剩下的预测数据中心(pcaCenters)和系数(pcaCoefficients)估计分类学习者

  • 返回标签使用模型预测

函数标签= mypredictCL (X)% # codegen% MYPREDICTCL分类使用模型导出的信用评级%分类学习者% MYPREDICTCL负荷训练分类模型(支持向量机)和模型%参数(removeVars pcaCenters和pcaCoefficients),消除了%的预测数据的原始矩阵列X对应%在removeVars指数,使用PCA变换生成的矩阵%中心在pcaCoefficients pcaCenters和PCA系数中,然后%使用转换后的数据进行分类的信用评级。X是一个数字% 7矩阵n行和列。标签是一个n×1单元阵列%预测标签。%负荷训练分类模型和模型参数支持向量机= loadLearnerForCoder (“ClassificationLearnerModel”);数据= coder.load (“ModelParameters”);removeVars = data.removeVars;pcaCenters = data.pcaCenters;pcaCoefficients = data.pcaCoefficients;%删除未使用的预测变量keepvars = 1:大小(X, 2);idx = ~ ismember (keepvars removeVars);keepvars = keepvars (idx);XwoID = X (:, keepvars);%通过PCA变换预测Xpca = bsxfun (@minus XwoID pcaCenters) * pcaCoefficients;%从支持向量机生成标签标签=预测(SVM, Xpca);结束

生成代码

因为C和c++静态类型语言中,您必须确定所有变量的属性在编译时的入口点函数。指定适应可变参数使用coder.typeof(MATLAB编码器)使用的参数并生成代码。

创建一个名为双精度矩阵x对于代码生成使用coder.typeof(MATLAB编码器)。指定的行数x是任意的,但是呢x必须有p列。

p =大小(creditrating 2) - 1;x =编码器。typeof(0,[正无穷,p], [1 0]);

关于指定适应可变参数的更多细节,请参阅为代码生成指定适应可变参数

生成一个墨西哥人功能mypredictCL.m。使用arg游戏选项来指定x作为参数。

codegenmypredictCLarg游戏x

codegen墨西哥人文件生成mypredictCL_mex.mexw64在当前文件夹。文件扩展名取决于你的平台。

验证生成的代码

验证墨西哥人函数返回预期的标签。

从原始数据中删除响应变量集,然后随机画15观测。

rng (“默认”);%的再现性m = 15;testsampleT = datasample (creditrating(: 1:结束(- 1)),m);

通过使用预测相应的标签predictFcn训练分类模型的分类学习者。

testLabels = trainedModel.predictFcn (testsampleT);

结果表转换为一个矩阵。

testsample = table2array (testsampleT);

的列testsample对应的列预测加载的数据分类学习者。

通过测试数据mypredictCL。这个函数mypredictCL通过使用预测相应的标签预测和分类模型由分类训练学习者。

testLabelsPredict = mypredictCL (testsample);

通过使用生成的墨西哥人函数预测相应的标签mypredictCL_mex

testLabelsMEX = mypredictCL_mex (testsample);

比较组预测。

isequal (testLabels testLabelsMEX testLabelsPredict)
ans =逻辑1

isequal返回逻辑1(真正的)如果所有的输入都是平等的。predictFcn,mypredictCL和墨西哥人函数返回相同的值。

另请参阅

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

相关的话题