使用Stateflow预测类标签
这个例子展示了如何使用一个Stateflow®图表标签预测。火车费雪的判别分析模型的例子虹膜数据集使用fitcdiscr
,定义了一个函数的代码生成加载训练模型和预测新数据标签。Stateflow图在本例接受流数据和预测标签使用函数定义。
费雪的虹膜数据集,包括在统计和机器学习工具箱™,包含物种(物种
)和测量(量
花萼长度,萼片宽,花瓣长度和花瓣宽度150虹膜样本。数据集包含50个标本每个三个物种:setosa,杂色的,virginica。
加载费舍尔虹膜数据集。
负载fisheriris
转换物种
索引向量中1、2和3对应setosa杂色的,和virginica分别。
物种= grp2idx(物种);
分区数据为训练集和测试集。
rng (“默认”)%的再现性idx1 = randperm (150、75)”;idx2 = setdiff ((1:15)”, idx1);X =量(idx1,:);Y =物种(idx1,:);trainX =量(idx2:);trainY =物种(idx2:);
使用trainX
和trainY
训练一个模型,和使用X
和Y
测试训练模型。
列车二次判别分析模型。
Mdl = fitcdiscr (trainX trainY,“DiscrimType”,“二次”);
Mdl
是一个ClassificationDiscriminant
模型。在命令行上,您可以使用Mdl
为新的观察结果做出预测。然而,您不能使用Mdl
作为一个输入参数的函数代码生成。准备Mdl
在函数通过使用加载saveLearnerForCoder
。
saveLearnerForCoder (Mdl“DiscrIris”);
saveLearnerForCoder
契约Mdl
并将它保存在MAT-fileDiscrIris.mat
。
显示预测物种的展示盒Stateflow模型,定义一个枚举类通过使用classdef
在MATLAB®文件IrisSpecies.m
。
classdefIrisSpecies < 万博1manbetxSimulink.IntEnumType枚举Setosa(1)多色的(2)Virginica (3)结束结束
枚举数据的详细信息,请参阅定义枚举数据类型(Stateflow)。
定义一个函数的名字mypredict.m
预测虹膜物种从新的测量数据通过使用训练模型。这个函数应该:
包括代码生成指令
% # codegen
在这个函数。接受虹膜测量数据。数据必须符合X除了的行数。
负载
DiscrIris.mat
使用loadLearnerForCoder
。回归预测虹膜的物种。
函数标签= mypredict (X)% # codegen% MYPREDICT预测物种的虹膜花使用判别模型% mypredict预测物种使用紧凑的虹膜的花% DiscrIris.mat判别模型文件。行X的对应%的观察和列对应预测变量。标签是%预测物种。mdl = loadLearnerForCoder (“DiscrIris”);labelTemp =预测(mdl X);标签= IrisSpecies (labelTemp);结束
打开模型®模型万博1manbetxsf_countflowers.slx
。
sfName =“sf_countflowers”;open_system (sfName);
数据显示仿真软件模型和流图中包含的Statefl万博1manbetxow图表。当输入节点检测测量数据时,它将数据图表。然后图表预测一种虹膜花和计数鲜花为每个物种的数量。图返回预测物种工作区并显示模型内的物种,一次一个。数据存储内存块NumFlowers
商店花送给每个物种的数量。
期望获得输入数据的图表作为一个结构数组fisheririsInput
包含这些字段:
时间
——的时间点观察输入模型。在这个例子中,期间包括从0到74的整数。的方向时间
必须对应于观测的预测数据。所以,对于这个示例,时间
必须是一个列向量。信号
- 1×1结构阵列描述输入数据和包含字段值
和维
。的值
字段是一个矩阵的预测数据。的维
字段的数量预测变量。
创建一个适当的结构数组虹膜花测量。
fisheririsInput。时间= (0:74)';fisheririsInput.signals。尺寸= 4;fisheririsInput.signals。值= X;
你可以改变这个名字fisheririsInput
,然后在模型中指定的新名称。然而,Stateflow预计结构数组包含描述字段名称。更多细节,请参阅加载数据结构根级输入(万博1manbetx模型)。
模拟模型。
sim (sfName)
图显示了模型后,处理所有的观察fisheririsInput
,每次一个。的预测物种X(75年:)
virginica。setosa数量的,杂色的,virginicaX
分别是22、22日和31日。
的变量logsout
出现在工作区中。logsout
是一个万博1manbetxSimulinkData.Dataset
对象包含预测物种。提取仿真预测物种数据日志。
labelSF = logsout.getElement (1) .Values.Data;
预测物种在命令行中使用预测
。
labelCMD =预测(Mdl X);
返回的预测物种进行比较sf_countflowers
通过调用返回预测
在命令行中。
isequal (labelCMD labelSF)
ans =逻辑1
isequal
返回逻辑1 (真正的
如果所有的输入都是平等的。这种比较证实,sf_countflowers
返回预期的结果。
如果你也有一个仿真软件编码器™许可证,万博1manbetx然后你可以从生成C代码sf_countflowers.slx
在仿真万博1manbetx软件或从命令行rtwbuild
(万博1manbetx仿真软件编码器)。更多细节,请参阅为一个模型生成C代码(万博1manbetx仿真软件编码器)。
另请参阅
loadLearnerForCoder
|saveLearnerForCoder
|预测
|slbuild
(万博1manbetx模型)