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