主要内容

使用状态流预测类标签

这个例子展示了如何使用statflow®图表进行标签预测。通过实例对Fisher虹膜数据集训练了判别分析模型fitcdiscr,并定义一个用于代码生成的函数,该函数加载经过训练的模型并预测新数据的标签。本例中的状态流图接受流数据并使用您定义的函数预测标签。

Fisher's虹膜数据集,包含在统计和机器学习工具箱™中,包含物种(物种)及尺寸()的萼片长度,萼片宽度,花瓣长度和花瓣宽度为150个鸢尾标本。该数据集包含了来自三个物种的50个样本:梭子蟹、花斑蟹和弗吉尼亚蟹。

加载Fisher虹膜数据集。

负载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

要在statflow模型的显示框中显示预测的物种,可以使用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使用compact来预测鸢尾花的种类discriis .mat文件中的%判别模型。行X对应于%观察值和列对应预测变量。标签是%预测的物种。mdl = loadLearnerForCoder (“DiscrIris”);labelTemp =预测(mdl X);标签= IrisSpecies (labelTemp);结束

打开Simulin万博1manbetxk®模型sf_countflowers.slx

sfName =“sf_countflowers”;open_system (sfName);

这些图显示了Simulink模型和包含在状态流程万博1manbetx图中的流程图。当输入节点检测到测量数据时,将数据导入图表。然后图表预测了鸢尾花的一种,并计算了每种鸢尾花的数量。图表将预测的物种返回到工作空间,并在模型中一次显示一个物种。数据存储的内存块NumFlowers存储每个物种的花的数量。

图表期望以结构数组的形式接收输入数据fisheririsInput包含这些字段:

  • 时间-观测数据进入模型的时间点。在本例中,持续时间包括从0到74的整数。的方向时间必须与预测器数据中的观测值相一致。在这个例子中,时间必须是一个列向量。

  • 信号—描述输入数据并包含字段的1 × 1结构数组.的字段是预测数据的矩阵。的字段是预测变量的数量。

为鸢尾花的测量创建一个合适的结构数组。

fisheririsInput。时间= (0:74)';fisheririsInput.signals.dimensions = 4;fisheririsInput.signals.values = X;

您可以更改名称fisheririsInput,然后在模型中指定新名称。但是,statflow期望结构数组包含所描述的字段名。有关详细信息,请参见将数据结构加载到根级输入(万博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 Coder万博1manbetx™许可证,那么您可以从sf_countflowers.slx在Si万博1manbetxmulink中或从命令行中使用rtwbuild(万博1manbetx仿真软件编码器).有关详细信息,请参见为模型生成C代码(万博1manbetx仿真软件编码器)

另请参阅

|||(万博1manbetx模型)

相关的话题