主要内容

使用Stateflow预测类标签

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

Fisher's虹膜数据集,包含在统计和机器学习工具箱™中,包含物种()及尺寸(梅斯)150个鸢尾标本的萼片长度、萼片宽度、花瓣长度和花瓣宽度。该数据集包含来自三个物种的50个标本:刚毛、杂色和维吉尼亚。

加载Fisher虹膜数据集。

负载鱼腥草

转换一个索引向量,其中1、2和3分别对应于刚毛、花色和弗吉尼亚。

物种= grp2idx(物种);

将数据划分为训练集和测试集。

rng(“默认”%为了再现性idx1=randperm(150,75)';idx2=setdiff((1:150)”,idx1);X=meas(idx1,:);Y=物种(idx1,:);列车X=MEA(idx2,:);trany=种(idx2,:);

使用列车训练有素的训练一个模型,并使用XY对训练后的模型进行测试。

训练二次判别分析模型。

Mdl=fitcdiscr(第X列、第Y列、,“DiscrimType”“二次”);

Mdl是一个ClassificationDiscriminant模型。在命令行中,您可以使用Mdl对新的观测结果进行预测。但是,您不能使用Mdl作为函数中用于代码生成的输入参数。准备Mdl在函数中通过使用saveLearnerForCoder

saveLearnerForCoder(Mdl,“DiscrIris”);

saveLearnerForCoder压实Mdl并将其保存在MAT文件中DiscrIris.mat

要在statflow模型的显示框中显示预测的物种,可以使用classdef块在MATLAB®文件IrisSpecies.m

classdefIrisSpecies <仿金宝app真软件。IntEnumType枚举Setosa(1)多色的(2)Virginica (3)结束结束

枚举数据的详细信息请参见定义枚举数据类型(Stateflow)

定义一个名为mypredict.m通过使用经过训练的模型从新的测量数据预测虹膜物种。该函数应:

  • 包括代码生成指令% # codegen函数中的某个地方。

  • 接受虹膜测量数据。除行数外,数据必须与X一致。

  • 负载DiscrIris.mat使用loadLearnerForCoder

  • 返回预测的虹膜种类。

作用标签= mypredict (X)% # codegen%用判别模型预测鸢尾花的种类%用紧凑型计算机预测鸢尾花的种类%DiscrIris.mat文件中的判别模型。X行对应于%观察值和列对应于预测变量。标签是%预测的物种。mdl = loadLearnerForCoder (“DiscrIris”); labelTemp=预测(mdl,X);标签=虹膜物种(labelTemp);结束

打开Simulin金宝appk®模型sf_countflowers.slx

sfName =“sf_countflowers”;open_system (sfName);

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

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

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

  • 信号-描述输入数据并包含字段的1×1结构数组价值观尺寸这个价值观字段是预测数据的矩阵。这个尺寸字段是预测变量的数量。

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

FisheRisInput.time=(0:74)';FisheRisInput.signals.dimensions=4;FisheRisInput.signals.values=X;

您可以更改名称fisheririsInput,然后在模型中指定新名称。但是,statflow期望结构数组包含所描述的字段名。有关详细信息,请参见将数据结构加载到根级输入(金宝app模型)

模拟模型。

sim (sfName)

该图显示了模型在处理中的所有观察结果后的情况fisheririsInput,一次一个。预测的物种X(75,:)这是弗吉尼亚州。非洲刚毛、杂色和维吉尼亚的数量X分别为22、22和31。

变量罗格苏特出现在工作区中。罗格苏特是一个金宝appSimulinkData。数据集包含预测物种的对象。从模拟日志中提取预测物种数据。

labelSF = logsout.getElement (1) .Values.Data;

使用命令行预测物种预测

labelCMD=预测(Mdl,X);

比较预测返回的物种花儿给那些通过呼叫返回的人预测在命令行。

isequal (labelCMD labelSF)
ans =逻辑1

isequal返回逻辑1(符合事实的),如果所有输入相等。这个比较证实了花儿返回预期的结果。

如果您也有Simulink Coder金宝app™许可证,那么您可以从sf_countflowers.slx在Si金宝appmulink中或从命令行中使用rtwbuild(金宝app仿真软件编码器)。有关详细信息,请参阅为模型生成C代码(金宝app仿真软件编码器)

另请参阅

|||(金宝app模型)

相关话题