这个例子展示了如何使用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:);
使用trainX
和trainY
训练模型,并使用X
和Y
测试训练过的模型。
训练二次判别分析模型。
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仿真软件编码器).
loadLearnerForCoder
|预测
|saveLearnerForCoder
|slbuild
(万博1manbetx模型)