主要内容

使用Stateflow预测类标签

这个例子展示了如何使用一个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:);

使用trainXtrainY训练一个模型,并使用XY测试训练过的模型。

训练一个二次判别分析模型。

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仿真软件编码器)

另请参阅

|||(万博1manbetx模型)

相关的话题