这个例子展示了如何将MATLAB®函数块添加到Simulink®模型中进行标签预测。万博1manbetxMATLAB函数块接受流数据,并使用经过训练的支持向量机(SVM)分类模型预测标签和分类评分。万博1manbetx关于使用MATLAB函数块的详细信息,请参见使用MATLAB函数块创建自定义功能(万博1manbetxSimulink).
此示例使用电离层
数据集,其中包含雷达返回质量(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“中微子层”);
saveLearnerForCoder
契约Mdl
,然后将其保存在MAT文件中SVMIonosphere.mat
.
定义一个MATLAB函数,名为svmIonospherePredict.m
这可以预测雷达回波的质量是否良好。该功能必须:
包括代码生成指令%#编码基因
在函数的某个地方。
接受雷达返回预报数据。数据必须与X
除了行数。
负载SVMIonosphere.mat
使用loadLearnerForCoder
.
返回预测标签和分类分数,以预测雷达的质量返回良好(即阳性等级分数)。
函数(标签,分数)= svmIonospherePredict (X)%#编码基因%SVM模型预测雷达回波质量%SVM预测标签和分类估计雷达得分的%返回预测器数据X的数字矩阵%使用文件SVMIonosphere.mat中的紧凑SVM模型。行(X)%对应观察值和预测变量的列。标签%是预测的标签,分数是%,雷达回波质量良好。%%版权所有2016 MathWorks公司。Mdl=loadLearnerForCoder(“中微子层”); [标签,两个核心]=预测(Mdl,X);分数=两个分数(:,2);终止
注意:如果你点击这个页面右上方的按钮并在MATLAB中打开这个例子,那么MATLAB就会打开这个例子文件夹。这个文件夹包括入口点函数文件。
用MATLAB函数万博1manbetx块创建一个Simulink模型svmIonospherePredict.m
.
此示例提供Simulink模型万博1manbetxslexSVMIonospherePredictExample.slx
.打开Simulin万博1manbetxk模型。
SimMdlName=“SLEXSVM电离层预测样本”;open_system (SimMdlName)
该图显示Simulink模型。当输入节点检测到雷万博1manbetx达回波时,它将该观测值引导到MATLAB功能块中,并发送给svmIonospherePredict.m
.在预测标签和得分之后,模型将这些值返回到工作区,并在模型中一次显示一个值。当你负荷slexSVMIonospherePredictExample.slx
,MATLAB还加载它需要调用的数据集radarReturnInput
. 然而,这个例子展示了如何构造所需的数据集。
模型希望以一个名为radarReturnInput
包含这些字段:
时间
-观测值进入模型的时间点。在本例中,持续时间包括0到50之间的整数。方向必须与预测数据中的观测值相对应。那么这个例子,,时间
必须是一个列向量。
信号
-描述输入数据并包含字段的1×1结构数组值
和维
.值
是预测数据的矩阵。维
为预测变量的数量。
为将来雷达返回创建一个适当的结构阵列。
radarReturnInput.time=(0:50)';雷达回波输入。信号(1)。值=ftrX;雷达回波输入。信号(1)。尺寸=尺寸(ftrX,2);
您可以从更改名称radarReturnInput
,然后在模型中指定新名称。但是,Simulink希望结构数组包含所描述的字段名。万博1manbetx
使用培训之外的数据(即中的数据)模拟模型radarReturnInput
.
sim (SimMdlName);
图中显示了模型处理所有观测后的结果radarReturnInput
一次一个。预测的标签X(351年:)
是1.
它的正课堂成绩是1.431
.的变量吹牛
,青年
,斯文洛格苏特
显示在工作区中。青年
和斯文洛格苏特
是万博1manbetxSimulinkData.Dataset
包含预测标签和分数的对象。有关详细信息,请参阅记录仿真数据的数据格式(万博1manbetxSimulink).
从仿真日志中提取仿真数据。
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-scoresl)。^2);err
ans =必然的1.
分数集之间的平方偏差之和可以忽略不计。
如果您还有Simulink编码器™ 许万博1manbetx可证,然后您可以从slexSVMIonospherePredictExample.slx
在Si万博1manbetxmulink中或从命令行使用slbuild
(万博1manbetxSimulink).有关详细信息,请参见为模型生成C代码(万博1manbetxSimulink编码器).
预测
|loadLearnerForCoder
|saveLearnerForCoder
|slbuild
(万博1manbetxSimulink)|learnerCoderConfigurer