主要内容

使用状态流预测类标签

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

Fisher’s虹膜数据集,包含在Statistics and Machine Learning Toolbox™中,包含物种(物种)及测量(测定)萼片长度,萼片宽度,花瓣长度和花瓣宽度为150鸢尾标本。数据集包含来自三种种类中的每一个的50个标本:Setosa,Versicolor和Virginica。

加载Fisher虹膜数据集。

负载渔民

转换物种到1,2和3的索引矢量分别对应于Setosa,Versicolor和Virginica。

物种= grp2idx(物种);

将数据分区为培训集和测试集。

RNG('默认')重复性的%IDX1 = RANDPERM(150,75)';idx2 = setdiff((1:150)',IDX1);x = meas(idx1,:);Y =物种(IDX1,:);trainx = meas(idx2,:);Trainy =物种(IDX2,:);

TrainX.训练培训模型,并使用XY测试训练有素的模型。

培训二次判别分析模型。

mdl = fitcdiscr(Trainx,Trapty,“DiscrimType”,'二次');

MDL.是一个ClassificationDiscriminant模型。在命令行中,您可以使用MDL.对新观察进行预测。但是,你不能使用MDL.作为函数中用于生成代码的输入参数。准备MDL.通过使用加载到函数内Savelarnerforcoder.

SavelAlnerForCoder(MDL,“DiscrIris”);

Savelarnerforcoder.紧凑型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%MyPredict使用判别模型预测虹膜鲜花的种类%MyPredict使用Compact预测虹膜花的种类文件中的%判别模型.MAT。行的X行对应于%观察和列对应于预测变量。标签是%预测的物种。mdl = loadLearnerForCoder (“DiscrIris”);labeltemp = predict(mdl,x);标签= irisspecies(Labeltemp);结束

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

sfName =“sf_countflowers”;open_system (sfName);

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

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

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

  • 信号- 一个1×1结构阵列,描述输入数据并包含字段价值方面。这价值字段是预测器数据的矩阵。这方面字段是预测变量的数量。

创建一个适当的结构阵列鸢尾花测量。

fisheririsinput.time =(0:74)';fisheririsinpul.signals.dimensions = 4;fisheririsinput.signals.values = x;

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

模拟模型。

sim (sfName)

该图显示了它在处理所有观察后的模型fisheririsInput,一次一个。预测的物种x(75,:)是弗吉尼察。setosa,versicolor和virginica的数量X分别为22,22和31。

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

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

在命令行中使用预测

labelcmd = predict(mdl,x);

比较返回的预测物种sf_countflowers.给那些呼唤归来的人预测在命令行。

isequal (labelCMD labelSF)
ans =逻辑1

isequal返回逻辑1(真的),如果所有输入都相等。这个比较证实了sf_countflowers.返回预期结果。

如果您还拥有Simulink Code金宝appr™许可,那么您可以从sf_countflowers.slx.在Si金宝appmulink中或从命令行中使用rtwbuild(金宝app仿真软件编码器)。更多信息请参见为模型生成C代码(金宝app仿真软件编码器)

另请参阅

|||(金宝app模型)

相关话题