这个例子展示了如何使用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.
和训练
培训模型,并使用X
和Y
测试训练有素的模型。
培训二次判别分析模型。
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仿真软件编码器)。
loadLearnerForCoder
|预测
|Savelarnerforcoder.
|slbuild
(金宝app模型)