主要内容

ClassificationTreeCoderConfigurer

编码器配置多级分类的二元决策树模型

描述

一个ClassificationTreeCoderConfigurer对象是一个编码器配置二叉决策树模型的多级分类(ClassificationTreeCompactClassificationTree)。

一个编码器配置提供了方便的功能配置代码生成选项,生成C / c++代码,生成的代码和更新模型参数。

  • 配置代码生成选项和指定的编码属性树模型参数通过使用对象属性。

  • 生成的C / c++代码预测更新函数的分类树模型通过使用generateCode。需要生成C / c++代码MATLAB®编码器™

  • 更新模型参数生成的C / c++代码,而不必重新生成代码。这个特性可以减少所需的努力再生,重新部署,reverify C / c++代码当你训练树模型与新数据或设置。在更新模型参数,使用validatedUpdateInputs验证和提取模型参数更新。

这个流程图显示了代码生成使用编码器配置工作流。

两个代码生成工作流:第一个模型训练后,第二次再培训后相同的模型。第一个工作流程,步骤1:创建一个编码器配置。第二步:生成代码。第三步:验证生成的代码。第二个工作流,步骤1:检查是否更新是有效的。如果是的,去步骤2;如果没有,先去的第一步工作流程。步骤2:在生成的代码更新模型参数。

对于代码生成使用笔记和一个分类树模型的局限性,看到的代码生成部分CompactClassificationTree,预测,更新

创建

训练后的分类树模型通过使用fitctree为模型,创建一个编码器配置使用learnerCoderConfigurer。使用一个编码器的属性配置指定的编码属性预测更新参数。然后,用generateCode生成C / c++代码根据指定的编码属性。

属性

全部展开

预测参数

在这一节中列出的属性指定的编码属性预测函数参数的生成的代码。

编码器的属性预测数据传递给C / c++代码生成预测函数的分类树模型,指定为一个LearnerCoderInput对象。

当您创建一个编码器配置使用learnerCoderConfigurer函数的输入参数X确定的默认值LearnerCoderInput编码器属性:

  • SizeVector——默认值是数组大小的输入X

  • VariableDimensions这个值是[0 0](默认)或[1 0]

    • [0 0]表明中指定数组大小是固定的SizeVector

    • [1 0]表明,有适应行和固定大小列数组。在这种情况下,第一个值SizeVector的上界的行数,第二个值吗SizeVector列的数量。

  • 数据类型这个值是。默认数据类型取决于输入的数据类型X

  • 可调谐性——这个值必须真正的,这意味着预测在生成的C / c++代码总是包括预测数据作为输入。

您可以修改使用点符号的编码属性。例如,生成C / c++代码接受预测数据与100年的观察三个预测变量,指定这些编码器的属性X编码器的配置配置:

configurer.X。SizeVector= [100 3]; configurer.X.DataType =“双”;configurer.X.VariableDimensions= [0 0];
[0 0]表明第一和第二维度X(数量的观察和数量的预测变量,分别)具有固定的大小。

允许生成的C / c++代码接受预测数据与100观察,指定这些编码器的属性X:

configurer.X。SizeVector= [100 3]; configurer.X.DataType =“双”;configurer.X.VariableDimensions= [1 0];
[1 0]表明,第一个维度X(观察)有一个变量的大小和第二维度X(数量的预测变量)具有固定的大小。100年指定数量的观察,在这个例子中,成为了最大允许的观察生成的C / c++代码。允许任意数量的观察,指定绑定

的输出参数返回生成的C / c++代码预测函数的分类树模型,指定为1、2、3、4。

的输出参数预测标签(预测类标签),分数(后验概率),节点(节点编号为预测类)cnum(类的预测数量标签),秩序。预测在生成的C / c++代码返回第一个n输出的预测函数,nNumOutputs价值。

在创建了编码器配置配置,您可以指定输出通过使用点符号的数量。

配置。NumOutputs= 2;

NumOutputs属性是相当于“-nargout”编译器选项的codegen(MATLAB编码器)。这个选项指定的输出参数的入口点函数,代码生成。的目标函数generateCode生成两个入口点函数predict.mupdate.m预测更新奖学金的功能分类树模型,生成C / c++代码的两个入口点函数。指定的值NumOutputs属性对应的入口点函数的输出参数predict.m

数据类型:

更新参数

在这一节中列出的属性指定的编码属性更新函数参数的生成的代码。的更新函数接受一个训练模型和新模型参数作为输入参数,并返回一个更新版本的模型,包含了新的参数。使更新参数在生成的代码中,您需要指定在生成代码的编码属性参数。使用一个LearnerCoderInput对象指定每个参数的编码属性。默认的属性值是基于模型参数的输入参数MdllearnerCoderConfigurer

编码器的属性树中的每个节点的子节点(孩子们的分类树模型),指定为一个LearnerCoderInput对象。

默认的属性值LearnerCoderInput对象是基于输入参数MdllearnerCoderConfigurer:

  • SizeVector——默认值是(2 nd),在那里nd节点的数量在吗Mdl

  • VariableDimensions这个值是[0 0](默认)或[1 0]

    • [0 0]表明中指定数组大小是固定的SizeVector

    • [1 0]表明,有适应行和固定大小列数组。在这种情况下,第一个值SizeVector的上界的行数,第二个值吗SizeVector列的数量。

  • 数据类型这个值是“单一”“双”。默认数据类型是一致的数据类型使用训练数据训练Mdl

  • 可调谐性——这个值必须真正的

如果你修改的第一个维度SizeVectornewnd,那么软件修改的第一个维度SizeVector属性newnd的属性ClassProbability,割点,CutPredictorIndex。类似地,如果您修改的第一个维度VariableDimensions1,那么软件修改的第一个维度VariableDimensions属性1这些属性。

编码器的属性类概率树中的每个节点(ClassProbability的分类树模型),指定为一个LearnerCoderInput对象。

默认的属性值LearnerCoderInput对象是基于输入参数MdllearnerCoderConfigurer:

  • SizeVector——默认值是(nd c),在那里nd节点的数量在吗Mdlc类的数量。

  • VariableDimensions这个值是[0 0](默认)或[1 0]

    • [0 0]表明中指定数组大小是固定的SizeVector

    • [1 0]表明,有适应行和固定大小列数组。在这种情况下,第一个值SizeVector的上界的行数,第二个值吗SizeVector列的数量。

  • 数据类型这个值是“单一”“双”。默认数据类型是一致的数据类型使用训练数据训练Mdl

  • 可调谐性——这个值必须真正的

如果你修改的第一个维度SizeVectornewnd,那么软件修改的第一个维度SizeVector属性newnd的属性孩子们,割点,CutPredictorIndex。类似地,如果您修改的第一个维度VariableDimensions1,那么软件修改的第一个维度VariableDimensions属性1这些属性。

编码器误分类代价的属性(成本的分类树模型),指定为一个LearnerCoderInput对象。

默认的属性值LearnerCoderInput对象是基于输入参数MdllearnerCoderConfigurer:

  • SizeVector——这个值必须(c c),在那里c类的数量。

  • VariableDimensions——这个值必须[0 0],这表明中指定数组大小是固定的SizeVector

  • 数据类型这个值是“单一”“双”。默认数据类型是一致的数据类型使用训练数据训练Mdl

  • 可调谐性——默认值是真正的

编码器的属性树中的每个节点(减少点割点的分类树模型),指定为一个LearnerCoderInput对象。

默认的属性值LearnerCoderInput对象是基于输入参数MdllearnerCoderConfigurer:

  • SizeVector——默认值是(nd - 1),在那里nd节点的数量在吗Mdl

  • VariableDimensions这个值是[0 0](默认)或[1 0]

    • [0 0]表明中指定数组大小是固定的SizeVector

    • [1 0]表明,有适应行和固定大小列数组。在这种情况下,第一个值SizeVector的上界的行数,第二个值吗SizeVector列的数量。

  • 数据类型这个值是“单一”“双”。默认数据类型是一致的数据类型使用训练数据训练Mdl

  • 可调谐性——这个值必须真正的

如果你修改的第一个维度SizeVectornewnd,那么软件修改的第一个维度SizeVector属性newnd的属性孩子们,ClassProbability,CutPredictorIndex。类似地,如果您修改的第一个维度VariableDimensions1,那么软件修改的第一个维度VariableDimensions属性1这些属性。

编码器将预测的属性索引树中的每个节点(CutPredictorIndex的分类树模型),指定为一个LearnerCoderInput对象。

默认的属性值LearnerCoderInput对象是基于输入参数MdllearnerCoderConfigurer:

  • SizeVector——默认值是(nd - 1),在那里nd节点的数量在吗Mdl

  • VariableDimensions这个值是[0 0](默认)或[1 0]

    • [0 0]表明中指定数组大小是固定的SizeVector

    • [1 0]表明,有适应行和固定大小列数组。在这种情况下,第一个值SizeVector的上界的行数,第二个值吗SizeVector列的数量。

  • 数据类型这个值是“单一”“双”。默认数据类型是一致的数据类型使用训练数据训练Mdl

  • 可调谐性——这个值必须真正的

如果你修改的第一个维度SizeVectornewnd,那么软件修改的第一个维度SizeVector属性newnd的属性孩子们,ClassProbability,割点。类似地,如果您修改的第一个维度VariableDimensions1,那么软件修改的第一个维度VariableDimensions属性1这些属性。

编码器的属性先验概率(之前的分类树模型),指定为一个LearnerCoderInput对象。

默认的属性值LearnerCoderInput对象是基于输入参数MdllearnerCoderConfigurer:

  • SizeVector——这个值必须(1 c),在那里c类的数量。

  • VariableDimensions——这个值必须[0 0],这表明中指定数组大小是固定的SizeVector

  • 数据类型这个值是“单一”“双”。默认数据类型是一致的数据类型使用训练数据训练Mdl

  • 可调谐性——默认值是真正的

其他配置选项

文件名生成的C / c++代码,指定为一个特征向量。

的目标函数generateCodeClassificationTreeCoderConfigurer生成C / c++代码使用这个文件名称。

文件名称不能包含空格,因为他们可能会导致在某些操作系统配置代码生成失败。此外,名称必须是一个有效的MATLAB函数名。

在创建了编码器配置配置,您可以指定文件名使用点符号。

配置。OutputFileName =“myModel”;

数据类型:字符

冗长的水平,指定为真正的(逻辑1)或(逻辑0)冗长级别控制通知消息的显示在命令行。

价值 描述
真正的(逻辑1) 软件显示通知消息当你更改编码器的属性参数导致其他相关参数的变化。
(逻辑0) 软件不显示通知消息。

使更新机器学习模型参数在生成的代码中,您需要配置在生成代码的编码属性参数。参数的编码属性相互依赖,所以软件商店依赖配置约束。如果你修改一个参数的编码属性使用编码器配置,和修改需要对其他相关参数,以满足后续更改配置约束,那么软件更改的编码属性相关的参数。冗长的水平决定是否为这些后续更改软件显示通知消息。

在创建了编码器配置配置,您可以修改使用点符号的冗长的水平。

配置。详细的= false;

数据类型:逻辑

代码生成定制的选项

使用自定义代码生成工作流generateFiles函数和下面的三个属性codegen(MATLAB编码器),而不是使用generateCode函数。

生成两个入口点函数文件后(predict.mupdate.m)通过使用generateFiles功能,您可以修改这些文件根据你的代码生成工作流。例如,您可以修改predict.m文件包括数据预处理,或者您可以将这些入口点函数添加到另一个代码生成项目。然后,您可以通过使用生成C / c++代码codegen(MATLAB编码器)函数和codegen参数适用于修改后的入口点函数或代码生成项目。使用在这一节中描述的三个属性作为起点设置codegen参数。

这个属性是只读的。

codegen(MATLAB编码器)参数,指定为一个单元阵列。

这个属性使您能够定制代码生成工作流。使用generateCode函数如果你不需要自定义工作流。

而不是使用generateCode编码器的配置配置,您可以生成C / c++代码如下:

generateFiles cgArgs = configurer.CodeGenerationArguments(配置);codegen (cgArgs {}):
如果你定制代码生成工作流、修改cgArgs因此之前调用codegen

如果你修改的其他属性配置,软件更新CodeGenerationArguments相应的属性。

数据类型:细胞

这个属性是只读的。

入口点函数的输入参数predict.m对于代码生成,指定的单元阵列coder.PrimitiveType(MATLAB编码器)对象。的coder.PrimitiveType预测的对象包括编码器属性中存储的数据X财产。

如果你修改的编码属性预测数据,然后软件更新coder.PrimitiveType相应的对象。

coder.PrimitiveType对象PredictInputs相当于configurer.CodeGenerationArguments {6}编码器的配置配置

数据类型:细胞

这个属性是只读的。

列表的入口点函数的可调输入参数update.m对于代码生成,包括指定的单元阵列结构coder.PrimitiveType(MATLAB编码器)对象。每一个coder.PrimitiveType对象包括编码器属性可调机器学习模型的参数。

如果你修改模型参数的编码属性使用编码器配置属性(更新参数属性),那么相应的软件更新coder.PrimitiveType相应的对象。如果你指定可调谐性机器学习模型参数的属性,然后删除相应的软件coder.PrimitiveType对象的UpdateInputs列表。

的结构UpdateInputs相当于configurer.CodeGenerationArguments {3}编码器的配置配置

数据类型:细胞

对象的功能

generateCode 生成C / c++代码使用编码器配置
generateFiles 生成MATLAB使用编码器配置文件代码生成
validatedUpdateInputs 验证和提取机器学习模型参数更新

例子

全部折叠

火车一个机器学习模型,然后生成代码预测更新功能模型的使用编码器配置。

加载fisheriris数据集,其中包含花数据和训练一个决策树模型。

负载fisheririsX =量;Y =物种;Mdl = fitctree (X, Y);

Mdl是一个ClassificationTree对象。

创建一个编码器的配置ClassificationTree模型通过使用learnerCoderConfigurer。指定的预测数据X。的learnerCoderConfigurer函数使用的输入X配置的编码属性预测函数的输入。

X配置= learnerCoderConfigurer (Mdl)
配置= ClassificationTreeCoderConfigurer属性:更新输入:孩子们:[1 x1 LearnerCoderInput] ClassProbability: [1 x1 LearnerCoderInput]割点:[1 x1 LearnerCoderInput] CutPredictorIndex:之前[1 x1 LearnerCoderInput]: [1 x1 LearnerCoderInput]成本:[1 x1 LearnerCoderInput]预测输入:X: [1 x1 LearnerCoderInput]代码生成参数:NumOutputs: 1 OutputFileName:“ClassificationTreeModel”属性,方法

配置是一个ClassificationTreeCoderConfigurer对象,该对象是一个编码器的配置ClassificationTree对象。

生成C / c++代码,您必须访问一个C / c++编译器配置正确。MATLAB编码器定位和使用支持,安装编译器。金宝app您可以使用墨西哥人设置查看和更改默认编译器。更多细节,请参阅改变默认的编译器

生成的代码预测更新函数的分类树模型(Mdl用默认设置)。

generateCode(配置)
generateCode输出文件夹中创建这些文件:初始化。米”、“预测。米”、“更新。米”、“ClassificationTreeModel。垫的代码生成成功。

generateCode函数完成这些操作:

  • 生成所需的MATLAB文件生成代码,包括两个入口点函数predict.mupdate.m预测更新的功能Mdl,分别。

  • 创建一个墨西哥人函数命名ClassificationTreeModel两个入口点函数。

  • 创建中的墨西哥人功能的代码codegen \墨西哥人\ ClassificationTreeModel文件夹中。

  • 墨西哥人功能复制到当前文件夹。

显示的内容predict.m,update.m,initialize.m文件使用类型函数。

类型predict.m
变长度输入宗量函数varargout =预测(X) % # codegen %自动生成通过MATLAB, 01 - 9 - 2021 14:42:11 [varargout {1: nargout}] =初始化(“预测”,X,变长度输入宗量{:});结束
类型update.m
函数更新(变长度输入宗量)% # codegen %自动生成通过MATLAB, 01 - 9 - 2021 14:42:11初始化(“更新”,变长度输入宗量{:});结束
类型initialize.m
函数[varargout] =初始化(指挥、变长度输入宗量)% # codegen %自动生成通过MATLAB, 01 - 9 - 2021 14:42:11 coder.inline(“总是”)持久模型如果isempty(模型)模型= loadLearnerForCoder (“ClassificationTreeModel.mat”);终端开关(命令)案例'更新' %更新结构体字段:孩子% ClassProbability %之前割点% CutPredictorIndex % % =更新成本模型(模型、变长度输入宗量{:});例“预测”%预测输入:X X =变长度输入宗量{1};如果输入参数个数= = 2 (varargout {1: nargout}] =预测(模型中,X);其他PVPairs =细胞(1、nargin-2);i = 1: nargin-2 PVPairs{1,} =变长度输入宗量{i + 1};结束(varargout {1: nargout}] =预测(模型、X PVPairs {:});结束结束结束

火车一个多级决策树分类使用部分数据集和创建一个编码器的配置模型。使用编码器配置的属性来指定编码器模型参数的属性。使用编码器配置的目标函数来生成C代码,预测新的预测数据标签。使用整个数据集,然后再培训模型和更新参数生成的代码没有重新生成代码。

火车模型

加载fisheriris数据集,其中包含花数据。这个数据集有四个因素:花萼长度、宽度萼片,花瓣长度,和花的花瓣宽度。响应变量包含花物种的名字:setosa,杂色的,virginica。训练一个分类树模型使用一半的观察。

负载fisheririsX =量;Y =物种;rng (“默认”)%的再现性n =长度(Y);c = cvpartition (Y,“坚持”,0.5);idxTrain =培训(c, 1);XTrain = X (idxTrain:);YTrain = Y (idxTrain);Mdl = fitctree (XTrain YTrain);

Mdl是一个ClassificationTree对象。

创建编码器配置

创建一个编码器的配置ClassificationTree模型通过使用learnerCoderConfigurer。指定的预测数据。的learnerCoderConfigurer函数使用的输入XTrain配置的编码属性预测函数的输入。同时,输出的数量设置为4,这样生成的代码返回标签,预测分数,节点数量和类数字。

配置= learnerCoderConfigurer (Mdl XTrain,“NumOutputs”4);

配置是一个ClassificationTreeCoderConfigurer对象,该对象是一个编码器的配置ClassificationTree对象。

指定编码的属性参数

指定的编码属性分类树模型参数,这样您就可以更新培训后生成的代码模型中的参数。

首先,指定的编码属性X的属性配置这样生成的代码接受任何数量的观察。修改SizeVectorVariableDimensions属性。的SizeVector属性指定的上界预测数据大小,和VariableDimensions属性指定每个维度的预测数据是否有一个变量大小或固定大小。

configurer.X。SizeVector= [Inf 4]; configurer.X.VariableDimensions
ans =1 x2逻辑阵列1 0

第一个维度的大小是观测的数量。设置的值SizeVector属性来导致软件更改的值VariableDimensions属性来1。换句话说,大小的上限和大小是可变的,这意味着可以拥有任意数量的观察的预测数据。这个规范是方便如果你不知道观察当生成代码的数量。

第二个维度是大小的预测变量的数量。这个值必须为一个固定的机器学习模型。因为预测数据包含4预测,的值SizeVector属性必须4和的值VariableDimensions属性必须0

如果你再培训使用新数据树模型或不同的设置,在树中节点的数目可以有所不同。因此,指定的第一个维度SizeVector这些属性的属性,这样您就可以更新的节点生成的代码:孩子们,ClassProbability,割点,或CutPredictorIndex。然后软件自动修改其他属性。

例如,设置的第一个值SizeVector的属性割点财产。软件修改SizeVectorVariableDimensions的属性孩子们,ClassProbability,CutPredictorIndex为了配合新的上限在树上的节点数量。此外,的第一个值VariableDimensions的属性割点更改1

configurer.CutPoint。SizeVector= [Inf 1];
儿童SizeVector属性被修改以满足配置约束。SizeVector属性CutPredictorIndex已被修改,以满足配置约束。儿童VariableDimensions属性被修改以满足配置约束。VariableDimensions属性CutPredictorIndex已被修改,以满足配置约束。SizeVector属性ClassProbability已被修改,以满足配置约束。VariableDimensions属性ClassProbability已被修改,以满足配置约束。
configurer.CutPoint.VariableDimensions
ans =1 x2逻辑阵列1 0

生成代码

生成C / c++代码,您必须访问一个C / c++编译器配置正确。MATLAB编码器定位和使用支持,安装编译器。金宝app您可以使用墨西哥人设置查看和更改默认编译器。更多细节,请参阅改变默认的编译器

生成的代码预测更新函数的分类树模型(Mdl)。

generateCode(配置)
generateCode输出文件夹中创建这些文件:初始化。米”、“预测。米”、“更新。米”、“ClassificationTreeModel。垫的代码生成成功。

generateCode函数完成这些操作:

  • 生成所需的MATLAB文件生成代码,包括两个入口点函数predict.mupdate.m预测更新的功能Mdl,分别。

  • 创建一个墨西哥人函数命名ClassificationTreeModel两个入口点函数。

  • 创建中的墨西哥人功能的代码codegen \墨西哥人\ ClassificationTreeModel文件夹中。

  • 墨西哥人功能复制到当前文件夹。

验证生成的代码

一些预测数据来验证是否通过预测的函数Mdl预测函数在墨西哥人函数返回相同的输出参数。在墨西哥人叫一个入口点函数有多个入口点函数,函数名指定为第一个输入参数。

[标签,分数、节点cnum] =预测(Mdl XTrain);[label_mex, score_mex node_mex cnum_mex] = ClassificationTreeModel (“预测”,XTrain);

比较标签label_mex通过使用isequal。同样的,比较节点node_mexcnumcnum_mex

label_mex isequal(标签)
ans =逻辑1
node_mex isequal(节点)
ans =逻辑1
isequal (cnum cnum_mex)
ans =逻辑1

isequal返回逻辑1 (真正的)如果所有的输入参数是相等的。确认进行了比较预测的函数Mdl预测墨西哥人的函数返回相同的标签,节点数量和类数字。

比较分数score_mex

马克斯(abs (score-score_mex), [],“所有”)
ans = 0

一般来说,score_mex可能包括舍入差异比较分数。在这种情况下,对比确认分数score_mex是相等的。

重新培训模型和更新参数生成的代码

使用整个数据集训练模型。

retrainedMdl = fitctree (X, Y);

提取参数更新使用validatedUpdateInputs。这个函数修正模型参数的检测retrainedMdl并验证修改后的参数值是否满足编码器的属性参数。

params = validatedUpdateInputs(配置、retrainedMdl);

在生成的代码更新参数。

ClassificationTreeModel (“更新”params)

验证生成的代码

比较的输出参数预测的函数retrainedMdl预测功能更新的墨西哥人的功能。

[标签,分数、节点cnum] =预测(retrainedMdl X);[label_mex, score_mex node_mex cnum_mex] = ClassificationTreeModel (“预测”,X);label_mex isequal(标签)
ans =逻辑1
node_mex isequal(节点)
ans =逻辑1
isequal (cnum cnum_mex)
ans =逻辑1
马克斯(abs (score-score_mex), [],“所有”)
ans = 0

比较确认了标签,节点数量,类数量和分数是相等的。

更多关于

全部展开

介绍了R2019b