主要内容

使用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(1:300,:);prsntY = Y(1:300);ftrX = X(301:end,:);ftrY = Y(301:end);

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

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

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

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

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

创建Simulink模型

使用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)。values = ftrX;radarReturnInput.signals(1)。维度= size(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] = predict(Mdl,ftrX);scoresCMD = scoresCMD(:,2);

labelCMD而且scoresCMD都与labelsSL而且scoresSL

比较未来样本,正类分数返回slexSVMIonospherePredictExample给那些召唤回来的人预测在命令行。

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

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

如果您还拥有Simulink Coder™许可证,则可以从slexSVMIonospherePredictExample.slx在Simulink或从命令行使用slbuild(模型).详情请参见为模型生成C代码(仿真软件编码器)

另请参阅

|||(模型)|

相关的话题

Baidu
map