使用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)
如图所示为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);
图中显示了在处理所有观测后的模型radarReturnInput
一次一个。预测的标签X(351年:)
是1
它的正课分数是1.431
.的变量吹捧
,你
,svmlogsout
出现在工作区中。你
而且svmlogsout
是SimulinkData。数据集
对象,其中包含预测的标签和分数。详情请参见记录模拟数据的数据格式(模型).
从仿真日志中提取仿真数据。
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代码(仿真软件编码器).
另请参阅
预测
|loadLearnerForCoder
|saveLearnerForCoder
|slbuild
(模型)|learnerCoderConfigurer