主要内容

用MATLAB函数块预测类标签

这个例子展示了如何将MATLAB®函数块添加到Simulink®模型中进行标签预测。MATLAB函数块接受流数据,并使用训练过的支持向量机(SVM)分类模型预测标签和分类分数。关于使用MATLAB函数块的详细信息,请参见用MATLAB函数块在Simulink中实现MATLAB函数(模型)

训练分类模型

此示例使用电离层数据集,其中包含雷达返回的质量(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文件中SVMIonosphere.mat

定义MATLAB函数

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

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

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

  • 负载SVMIonosphere.mat使用loadLearnerForCoder

  • 返回预测的标签和分类评分为预测雷达返回的质量为好(即正类评分)。

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

注意:如果您单击位于此页右上角部分的按钮,并在MATLAB中打开此示例,那么MATLAB将打开示例文件夹。这个文件夹包括入口点函数文件。

创建模型模型

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

本示例提供了Simulink模型slexSVMIonospherePredictExample.slx。打开Simulink模型。

SimMdlName =“slexSVMIonospherePredictExample”;open_system (SimMdlName)

classifyIonosphereBeforeSim.png

图中显示了Simulink模型。当输入节点检测到雷达返回时,它将观察结果引导到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,然后在模型中指定新名称。然而,Simulink期望结构数组包含所描述的字段名。

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

sim (SimMdlName);

classifyIonosphereAfterSim.png

图中显示了处理所有观测后的模型radarReturnInput一次一个。的预测标签X(351年:)1它的正班分数是1.431。的变量吹捧,svmlogsout出现在工作区中。而且svmlogsoutSimulinkData。数据集对象,其中包含预测的标签和分数。有关更多细节,请参见日志模拟数据格式(模型)

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

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

labelsSL是预测标签的51 × 1数字向量。labelsSL (j)1意味着支持向量机模型预测了雷达返回j以后的样品质量很好,而且0否则意味着。scoresSL是一个51 × 1的正类分数的数值向量,即,到决策边界的带符号距离。阳性分数与预测的标签相对应1,负分数对应于的预测标签0

在命令行中预测标签和正类分数预测

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

labelCMD而且scoresCMD是相称labelsSL而且scoresSL

比较未来样本,积极的班级分数返回slexSVMIonospherePredictExample给那些被召唤回来的人预测在命令行。

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

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

如果您也有Simulink Coder™许可证,那么您可以从slexSVMIonospherePredictExample.slx在Simulink或从命令行使用slbuild(模型)。有关更多细节,请参见为模型生成C代码(仿真软件编码器)

另请参阅

|||(模型)|

相关的话题

Baidu
map