火车一个纠错输出编码二进制学习者使用SVM (ECOC)模型,并创建一个编码器的配置模型。使用编码器配置的属性来指定编码器ECOC模型参数的属性。使用编码器配置的目标函数来生成C代码,预测新的预测数据标签。使用不同的设置,然后重新训练模型和更新参数生成的代码没有重新生成代码。
火车模型
加载费雪的虹膜数据集。
创建一个二进制学习者模板使用高斯核函数的SVM和标准化预测数据。
使用模板训练多级ECOC模型t
。
Mdl
是一个ClassificationECOC
对象。
创建编码器配置
创建一个编码器的配置ClassificationECOC
模型通过使用learnerCoderConfigurer
。指定的预测数据X
。的learnerCoderConfigurer
函数使用的输入X
配置的编码属性预测
函数的输入。同时,设置输出的数量2,这样生成的代码返回的前两个输出预测
函数,它是预测标签和否定平均二进制损失。
配置= ClassificationECOCCoderConfigurer属性:更新输入:BinaryLearners:之前[1 x1 ClassificationSVMCoderConfigurer]: [1 x1 LearnerCoderInput]成本:[1 x1 LearnerCoderInput]预测输入:X: [1 x1 LearnerCoderInput]代码生成参数:NumOutputs: 2 OutputFileName:“ClassificationECOCModel”属性,方法
配置
是一个ClassificationECOCCoderConfigurer
对象,该对象是一个编码器的配置ClassificationECOC
对象。显示器显示的可调输入参数预测
和更新
:X
,BinaryLearners
,之前
,成本
。
指定编码的属性参数
指定的编码属性预测
参数(预测数据和参数名称-值对“解码”
和“BinaryLoss”
),更新
参数的SVM(支持向量金宝app学习者),这样您就可以使用这些参数作为输入参数预测
和更新
在生成的代码。
首先,指定的编码属性X
这样生成的代码接受任何数量的观察。修改SizeVector
和VariableDimensions
属性。的SizeVector
属性指定的上界预测数据大小,和VariableDimensions
属性指定每个维度的预测数据是否有一个变量大小或固定大小。
第一个维度的大小是观测的数量。在这种情况下,代码指定大小的上限正
和大小是可变的,这意味着X
可以拥有任意数量的观察。这个规范是方便如果你不知道观察当生成代码的数量。
第二个维度是大小的预测变量的数量。这个值必须为一个固定的机器学习模型。X
包含4预测,因此第二个值SizeVector
属性必须是4,第二个值VariableDimensions
属性必须假
。
接下来,修改编码的属性BinaryLoss
和解码
使用“BinaryLoss”
和“解码”
名称-值对参数在生成的代码中。显示的编码属性BinaryLoss
。
ans = EnumeratedInput属性:价值:“枢纽”SelectedOption:“内置”BuiltInOptions:{“汉明”“线性”“二次”“指数”“binodeviance”“枢纽”的分对数}IsConstant: 1可调谐性:0
使用默认的值在生成的代码中,您必须指定的值在生成代码。指定价值
的属性BinaryLoss
作为“指数”
。
ans = EnumeratedInput属性:价值:“指数”SelectedOption:“内置”BuiltInOptions:{“汉明”“线性”“二次”“指数”“binodeviance”“枢纽”的分对数}IsConstant: 1可调谐性:1
如果你修改属性值时可调谐性
是假
(逻辑0),软件设置可调谐性
来真正的
(逻辑1)。
显示的编码属性解码
。
ans = EnumeratedInput属性:价值:“lossweighted”SelectedOption:“内置”BuiltInOptions: {“lossweighted”“lossbased”} IsConstant: 1可调谐性:0
指定IsConstant
的属性解码
作为假
因此,您可以使用所有可用的值BuiltInOptions
在生成的代码。
ans = EnumeratedInput属性:价值:[1 x1 LearnerCoderInput] SelectedOption:“非常数的”BuiltInOptions: {“lossweighted”“lossbased”} IsConstant: 0可调谐性:1
软件变更价值
的属性解码
到一个LearnerCoderInput
对象,这样你可以同时使用“lossweighted”
和“lossbased
”的价值“解码”
。此外,软件设置SelectedOption
来“非常数的”
和可调谐性
来真正的
。
最后,修改编码的属性金宝appSupportVectors
在BinaryLearners
。显示的编码属性金宝appSupportVectors
。
ans = LearnerCoderInput属性:SizeVector: [54 4] VariableDimensions:[1 0]数据类型:“双”可调谐性:1
的默认值VariableDimensions
是(真假)
因为每个学习者都有不同数量的支持向量。金宝app如果你再培训ECOC模型使用新数据或不同的设置,支持向量的个数在SVM学习者可以有所不同。金宝app因此,提高支持向量的个数的上界。金宝app
αSizeVector属性已被修改,以满足配置约束。SizeVector属性SupportVector金宝appLabels已被修改,以满足配置约束。
如果你修改的编码属性金宝appSupportVectors
,那么软件修改的编码属性α
和金宝appSupportVectorLabels
为了满足配置约束。如果编码器属性的修改一个参数需要对其他相关参数,以满足后续更改配置约束,那么软件更改的编码属性相关的参数。
显示编码器配置。
配置= ClassificationECOCCoderConfigurer属性:更新输入:BinaryLearners:之前[1 x1 ClassificationSVMCoderConfigurer]: [1 x1 LearnerCoderInput]成本:[1 x1 LearnerCoderInput]预测输入:X: [1 x1 LearnerCoderInput] BinaryLoss: [1 x1 EnumeratedInput]解码:[1 x1 EnumeratedInput]代码生成参数:NumOutputs: 2 OutputFileName:“ClassificationECOCModel”属性,方法
显示现在包括BinaryLoss
和解码
。
生成代码
生成C / c++代码,您必须访问一个C / c++编译器配置正确。MATLAB编码器定位和使用支持,安装编译器。金宝app您可以使用墨西哥人
设置
查看和更改默认编译器。更多细节,请参阅改变默认的编译器。
生成的代码预测
和更新
功能ECOC分类模型(Mdl
)。
generateCode输出文件夹中创建这些文件:初始化。米”、“预测。米”、“更新。米”、“ClassificationECOCModel。垫的代码生成成功。
的generateCode
函数完成这些操作:
生成所需的MATLAB文件生成代码,包括两个入口点函数predict.m
和update.m
为预测
和更新
的功能Mdl
,分别。
创建一个墨西哥人函数命名ClassificationECOCModel
两个入口点函数。
创建中的墨西哥人功能的代码codegen \墨西哥人\ ClassificationECOCModel
文件夹中。
墨西哥人功能复制到当前文件夹。
验证生成的代码
一些预测数据来验证是否通过预测
的函数Mdl
和预测
墨西哥人的函数返回相同的标签。在墨西哥人叫一个入口点函数有多个入口点函数,函数名指定为第一个输入参数。因为你指定的“解码”
作为一个可调输入参数通过改变IsConstant
属性生成代码之前,您还需要指定调用墨西哥人的功能,尽管“lossweighted”
的默认值吗“解码”
。
比较标签
来label_mex
通过使用isequal
。
isequal
返回逻辑1 (真正的
如果所有的输入都是平等的。确认进行了比较预测
的函数Mdl
和预测
墨西哥人的函数返回相同的标签。
NegLoss_mex
可能包括舍入差异比较NegLoss
。在这种情况下,比较NegLoss_mex
来NegLoss
,允许一个小宽容。
比较证实,NegLoss
和NegLoss_mex
宽容是相等的1 e-8
。
重新培训模型和更新参数生成的代码
重新培训模型使用不同的设置。指定“KernelScale”
作为“汽车”
这样的软件使用启发式程序选择合适的比例因子。
提取参数更新使用validatedUpdateInputs
。这个函数修正模型参数的检测retrainedMdl
并验证修改后的参数值是否满足编码器的属性参数。
在生成的代码更新参数。
验证生成的代码
比较的输出预测
的函数retrainedMdl
的输出预测
功能更新的墨西哥人的功能。
比较证实,标签
和label_mex
是相等的,NegLoss
和NegLoss_mex
宽容是相等的。