这个例子展示了如何使用一个statflow®图表来预测标签。该实例利用,对Fisher虹膜数据集训练判别分析模型fitcdiscr
,并定义一个用于代码生成的函数,该函数加载训练过的模型并预测新数据的标签。本例中的Stateflow图表接受流数据并使用您定义的函数预测标签。
Fisher's虹膜数据集包含在统计和机器学习工具箱™中,包含物种(物种
)及测量(量
)的花萼长度,花萼宽度,花瓣长度和花瓣宽度150个标本。该数据集包含三个物种各50个样本:濑鱼,花彩和弗吉尼亚。
加载Fisher iris数据集。
负载fisheriris
转换物种
到一个索引向量,其中1、2和3分别对应setosa、versicolor和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文件中DiscrIris.mat
.
要在Stateflow模型的显示框中显示预测的物种,可以使用classdef
在MATLAB®文件中IrisSpecies.m
.
classdefIrisSpecies <仿万博1manbetx真软件。IntEnumType枚举Setosa(1)多色的(2)Virginica (3)结束结束
有关枚举数据的详细信息,请参见定义枚举数据类型(Stateflow).
定义一个名为mypredict.m
通过使用训练好的模型,从新的测量数据中预测虹膜种类。这个函数应该:
包含代码生成指令% # codegen
在函数中。
接受虹膜测量数据。除了行数之外,数据必须与X一致。
负载DiscrIris.mat
使用loadLearnerForCoder
.
返回预测的虹膜种类。
函数标签= mypredict (X)% # codegen%MYPREDICT使用判别模型预测鸢尾花的种类mypredict用紧凑型预测鸢尾花的种类%判别模型在文件discriis .mat。X的行对应于%观察值和列对应预测变量。标签是%预测的物种。mdl = loadLearnerForCoder (“DiscrIris”);labelTemp =预测(mdl X);标签= IrisSpecies (labelTemp);结束
打开Simulin万博1manbetxk®模型sf_countflowers.slx
.
sfName =“sf_countflowers”;open_system (sfName);
图中显示了Simulink模型和包含在State万博1manbetxflow图表中的流程图。当输入节点检测到测量数据时,它将数据导入图表。然后该图表预测了一种鸢尾花,并计算了每种鸢尾花的数量。图表将预测的物种返回到工作空间,并在模型中一次显示一个物种。数据存储内存块NumFlowers
储存每一种花的数量。
该图表期望以调用的结构数组的形式接收输入数据fisheririsInput
包含这些字段:
时间
-观测值进入模型的时间点。在这个示例中,持续时间包括从0到74的整数。的方向时间
必须与预测数据中的观察值相对应。对于这个例子,时间
一定是列向量。
信号
-一个1乘1的结构数组,描述输入数据并包含字段值
和维
.的值
字段是预测器数据的矩阵。的维
字段为预测变量的数量。
为鸢尾花的测量创建一个合适的结构阵列。
fisheririsInput。时间= (0:74)';fisheririsInput.signals.dimensions = 4;fisheririsInput.signals.values = X;
您可以更改名称fisheririsInput
,然后在模型中指定新名称。但是,Stateflow希望结构数组包含所描述的字段名。要了解更多细节,请参见加载数据结构到根级输入(万博1manbetx模型).
模拟模型。
sim (sfName)
图中显示了模型处理所有观测值后的结果fisheririsInput
,一次一个。预测的物种X(75年:)
virginica。花斑菊、花斑菊和弗吉尼亚菊的数量X
分别为22、22和31。
的变量logsout
出现在工作区中。logsout
是一个万博1manbetxSimulinkData。数据集
包含预测物种的物体。从模拟日志中提取预测物种数据。
labelSF = logsout.getElement (1) .Values.Data;
在命令行中使用预测
.
labelCMD =预测(Mdl X);
比较返回的预测物种sf_countflowers
敬那些召唤归来的人预测
在命令行。
isequal (labelCMD labelSF)
ans =逻辑1
isequal
返回逻辑1 (真正的
),如果所有的输入是相等的。这个比较证实了sf_countflowers
返回预期的结果。
如果您还拥有Simulink Code万博1manbetxr™许可证,那么您可以从sf_countflowers.slx
或从命万博1manbetx令行中使用rtwbuild
(万博1manbetx仿真软件编码器).要了解更多细节,请参见为模型生成C代码(万博1manbetx仿真软件编码器).
loadLearnerForCoder
|saveLearnerForCoder
|预测
|slbuild
(万博1manbetx模型)