主要内容

用MATLAB函数块预测类标签

这个例子展示了如何将MATLAB®函数块添加到Simulink®模型中进行标签预测。金宝appMATLAB函数块接受流数据,并使用经过训练的支持向量机(SVM)分类模型预测标签和分类评分。金宝app关于使用MATLAB函数块的详细信息,请参见使用MATLAB函数块创建自定义功能(金宝app模型)

训练分类模型

本示例使用电离层数据集,其中包含雷达返回质量(Y)及预测数据(X).雷达回波要么质量好(‘g’)或质量差的(“b”).

加载电离层数据集。确定样本量。

负载电离层n =元素个数(Y)
n = 351

MATLAB函数块不能返回单元格数组。将响应变量转换为逻辑向量,其元素为1如果雷达恢复正常,然后0否则。

Y = strcmp (Y,‘g’);

假设按顺序探测到雷达返回,您已经有了前300个观测值,但还没有收到最后51个。将数据划分为当前和未来的样本。

prsntX = X(施用:);prsntY = Y(施用);ftrX = X(301年:,);ftrY = Y(301:结束);

使用所有当前可用的数据训练支持向量机模型。指定预测器数据标准化。

Mdl = fitcsvm (prsntX prsntY,“标准化”,真正的);

Mdl是一个ClassificationSVM模型。

保存模型使用saveLearnerForCoder

在命令行中,您可以使用Mdl对新的观测结果进行预测。但是,您不能使用Mdl作为用于代码生成的函数的输入参数。

准备Mdl在函数中加载saveLearnerForCoder

saveLearnerForCoder (Mdl“SVMIonosphere”);

saveLearnerForCoder契约Mdl,然后保存到MAT-file中SVMIonosphere.mat

定义MATLAB函数

定义一个MATLAB函数,名为svmIonospherePredict.m这可以预测雷达回波质量是否良好。函数必须:

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

  • 接受雷达返回预报数据。数据必须与X除了行数。

  • 负载SVMIonosphere.mat使用loadLearnerForCoder

  • 返回预测标签和分类分数,以预测雷达的质量返回良好(即阳性等级分数)。

函数(标签,分数)= svmIonospherePredict (X)% # codegen使用支持向量机模型预测雷达回波质量% svmIonospherePredict预测标签和估计分类雷达得分的%返回预测器数据X的数字矩阵%使用文件SVMIonosphere.mat中的紧凑SVM模型。行(X)%对应观察值和预测变量的列。标签%是预测标签,分数是对的置信度测量%,雷达回波质量良好。版权所有2016 The MathWorks Inc.Mdl = loadLearnerForCoder (“SVMIonosphere”);[标签,bothscores] =预测(Mdl X);分数= bothscores (:, 2);结束

注意:如果你点击这个页面右上方的按钮并在MATLAB中打开这个例子,那么MATLAB就会打开这个例子文件夹。这个文件夹包括入口点函数文件。

创建模型模型金宝app

用MATLAB函数金宝app块创建一个Simulink模型svmIonospherePredict.m

这个例子提供了Simulink模型金宝appslexSVMIonospherePredictExample.slx.打开Simulin金宝appk模型。

SimMdlName =“slexSVMIonospherePredictExample”;open_system (SimMdlName)

图中显示了Simulink模型。金宝app当输入节点检测到雷达返回时,它将该观察结果导向MATLAB函数块,并将其分派到svmIonospherePredict.m.在预测标签和得分之后,模型将这些值返回到工作区,并在模型中一次显示一个值。当你负荷slexSVMIonospherePredictExample.slx, MATLAB也加载它需要调用的数据集radarReturnInput.但是,这个示例展示了如何构造所需的数据集。

模型期望以结构数组的形式接收输入数据radarReturnInput包含这些字段:

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

  • 信号—描述输入数据的1 × 1结构数组,包含字段是预测数据的矩阵。为预测变量的数量。

为将来雷达返回创建一个适当的结构阵列。

radarReturnInput。时间= (0:50)';radarReturnInput.signals(1)。值= ftrX;radarReturnInput.signals(1)。尺寸大小= (ftrX 2);

您可以更改名称radarReturnInput,然后在模型中指定新名称。但是,Simuli金宝appnk希望结构数组包含所描述的字段名。

使用训练之外的数据,即训练中的数据,模拟模型radarReturnInput

sim (SimMdlName);

图中显示了模型处理所有观测后的结果radarReturnInput一次一个。预测的标签X(351年:)1它的积极等级得分是1.431.的变量吹捧,svmlogsout出现在工作区中。svmlogsout金宝appSimulinkData。数据集包含预测标签和分数的对象。有关详细信息,请参见记录仿真数据的数据格式(金宝app模型)

从仿真日志中提取仿真数据。

labelsSL = svmlogsout.getElement (1) .Values.Data;scoresSL = svmlogsout.getElement (2) .Values.Data;

labelsSL是一个51乘1的预测标签的数字向量。labelsSL (j)1表示SVM模型预测雷达返回j在未来的样品是好的质量,和0否则意味着。scoresSL为正类分数的51乘1数字向量,即与决策边界的标记距离。积极的分数对应于预测的标签1,而负分则对应于预测的标签0

使用命令行预测标签和正类得分预测

[labelCMD, scoresCMD] =预测(Mdl ftrX);scoresCMD = scoresCMD (:, 2);

labelCMDscoresCMD是相称labelsSLscoresSL

比较一下由slexSVMIonospherePredictExample给那些通过呼叫返回的人预测在命令行。

err = sum((scoresCMD - scoresSL).^2);犯错< eps
ans =逻辑1

两组分数之间的平方偏差之和可以忽略不计。

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

另请参阅

||||(金宝app模型)

相关的话题