这个例子展示了如何将MATLAB®函数块添加到Simulink®模型中进行标签预测。金宝appMATLAB函数块接受流数据,并使用经过训练的支持向量机(SVM)分类模型预测标签和分类评分。金宝app关于使用MATLAB函数块的详细信息,请参见使用MATLAB函数块创建自定义功能(金宝appSimulink).
这个例子使用了电离层
数据集,其中包含雷达返回质量(y
)及预测数据(X
).雷达回波要么质量好('G'
)或质量差的('B'
).
加载电离层
数据集。确定样本量。
加载电离层n = numel(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
是A.ClassificationSVM
模型。
saveLearnerForCoder
在命令行中,您可以使用Mdl
对新的观测结果进行预测。但是,您不能使用Mdl
作为用于代码生成的函数的输入参数。
准备Mdl
在函数中加载saveLearnerForCoder
.
saveLearnerForCoder (Mdl'svmionosphere');
saveLearnerForCoder
契约Mdl
,然后将其保存在Mat文件中svmionosphere.mat
.
定义一个MATLAB函数,名为svmIonospherePredict.m
预测雷达返回是否具有质量优良。功能必须:
包括代码生成指令%#codegen.
在函数的某个地方。
接受雷达返回预报数据。数据必须与X
除了行数。
负载svmionosphere.mat
使用loadlearnerforcoder.
.
返回预测标签和分类分数,以预测雷达的质量返回良好(即阳性等级分数)。
函数(标签,分数)= svmIonospherePredict (X)%#codegen.使用SVM模型预测雷达返回质量%SVMiOneSpeic%svmionopepredict预测标签和估计分类雷达得分的%返回预测器数据X的数字矩阵%使用文件SVMIonosphere.mat中的紧凑SVM模型。行(X)%对应于预测变量的观察和列。标签%是预测的标签和得分是置信度量%,雷达回波质量良好。%%版权所有2016 MathWorks Inc.mdl = loadlearnerforcoder('svmionosphere');[标签,两个谱] =预测(MDL,x);得分=两个谱(:,2);结尾
注意:如果你点击这个页面右上方的按钮并在MATLAB中打开这个例子,那么MATLAB就会打开这个例子文件夹。这个文件夹包括入口点函数文件。
用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.time =(0:50)';RadarreturnInput.Signals(1).values = ftrx;RadarreturnInput.Signals(1).dimensions =尺寸(ftrx,2);
您可以从中更改名称radarReturnInput
,然后在模型中指定新名称。但是,Simuli金宝appnk期望结构阵列包含所描述的字段名称。
使用培训的数据模拟模型,即数据radarReturnInput
.
sim (SimMdlName);
图中显示了模型处理所有观测后的结果radarReturnInput
一次一个。预测标签X(351年:)
是1
它的正面分数是1.431
.的变量兜售
那you ..
,svmlogsout.
出现在工作区。you ..
和svmlogsout.
是金宝appSimulinkData.Dataset.
包含预测标签和分数的对象。有关更多详细信息,请参阅记录仿真数据的数据格式(金宝appSimulink).
从仿真日志中提取模拟数据。
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);
LabelCmd.
和scoresCMD
是相称labelsSL
和scoresSL
.
比较未来样本,返回的正级别分数slexSVMIonospherePredictExample
致电返回的人预测
在命令行。
err = sum((scorescmd - scoressl)。^ 2);错误
ans =.逻辑1
分数集之间的平方偏差之和可忽略不计。
如果您还有Simulink Coder金宝app™许可证,则可以从中生成C代码slexSVMIonospherePredictExample.slx
在Si金宝appmulink中或使用命令行使用SLBUILD.
(金宝appSimulink).有关更多详细信息,请参阅为模型生成C代码(金宝appSimulink编码器).
learnerCoderConfigurer
|loadlearnerforcoder.
|预测
|saveLearnerForCoder
|SLBUILD.
(金宝appSimulink)