此示例显示如何将MATLAB®功能块添加到Simulink®模型中以进行标签预测。MATLAB功能块接受流数据,并使用经万博1manbetx过训练的支持向量机(SVM)分类模型预测标签和分类分数。有关使用MATLAB功能块的详细信息,请参阅万博1manbetx使用MATLAB功能块创建自定义功能(万博1manbetx模型).
本示例使用电离层
包含雷达回波质量的数据集(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);
使用所有当前可用数据训练SVM模型。指定预测数据标准化。
Mdl=fitcsvm(prsntX、prsntY、,“标准化”,真正的);
Mdl
是一个分类VM
模型。
saveLearnerForCoder
在命令行中,可以使用Mdl
对新的观测结果进行预测。但是,您不能使用Mdl
作为用于代码生成的函数中的输入参数。
准备Mdl
要在函数中加载,请使用saveLearnerForCoder
.
saveLearnerForCoder(Mdl,“SVMIonosphere”);
saveLearnerForCoder
压实Mdl
,然后保存到MAT-file中SVMIonosphere.mat
.
定义一个名为Svminosphereprodict.m
这可以预测雷达回波质量是否良好。函数必须:
包括代码生成指令% # codegen
函数中的某个地方。
接受雷达回波预测器数据。数据必须与X
除了行数。
负载SVMIonosphere.mat
使用loadLearnerForCoder
.
返回用于预测雷达返回质量的预测标签和分类分数(即,正等级分数)。
作用[标签,分数]=Svminosphereprodict(X)% # codegen使用支持向量机模型预测雷达回波质量% svmIonospherePredict预测标签和估计分类%预测器数据X数值矩阵中的雷达回波分数%使用文件SVMIonosphere.mat.X行中的压缩SVM模型%对应观察值和预测变量的列。标签%是预测标签,分数是对的置信度测量%将雷达回波质量分类为良好。%版权所有2016 The MathWorks Inc.Mdl = loadLearnerForCoder (“SVMIonosphere”);[标签,bothscores] =预测(Mdl X);分数= bothscores (:, 2);结束
注意:如果单击此页面右上角的按钮并在MATLAB中打开此示例,则MATLAB将打开示例文件夹。此文件夹包括入口点函数文件。
使用MATLAB功万博1manbetx能块创建Simulink模型,该功能块分配给Svminosphereprodict.m
.
这个例子提供了Simulink模型万博1manbetxSLEXSVM电离层预测样本.slx
.打开Simulin万博1manbetxk模型。
SimMdlName =“slexSVMIonospherePredictExample”;开放式系统(SimMdlName)
图中显示了Simulink模型。万博1manbetx当输入节点检测到雷达返回时,它将该观察结果导向MATLAB函数块,并将其分派到Svminosphereprodict.m
。预测标签和分数后,模型会将这些值返回到工作区,并在模型中一次显示一个值。加载时SLEXSVM电离层预测样本.slx
, MATLAB也加载它需要调用的数据集雷达回波输入
.但是,这个示例展示了如何构造所需的数据集。
模型期望以结构数组的形式接收输入数据雷达回波输入
包含以下字段:
时间
-观测数据进入模型的时间点。在这个例子中,持续时间包括从0到50的整数。方位必须与预测器数据中的观测值相对应。在这个例子中,时间
必须是列向量。
信号
—描述输入数据的1 × 1结构数组,包含字段价值观
和尺寸
.价值观
是预测数据的矩阵。尺寸
是预测变量的数量。
为将来雷达返回创建一个适当的结构阵列。
radarReturnInput。时间= (0:50)';radarReturnInput.signals(1)。值= ftrX;radarReturnInput.signals(1)。尺寸大小= (ftrX 2);
您可以更改名称雷达回波输入
,然后在模型中指定新名称。但是,Simuli万博1manbetxnk希望结构数组包含所描述的字段名。
使用训练之外的数据,即训练中的数据,模拟模型雷达回波输入
.
sim(SimMdlName);
该图显示了模型在处理中的所有观察结果后的情况雷达回波输入
一次一个。预测的标签X(351,:)
是1
它的积极等级得分是1.431
. 变量吹捧
,你
和svmlogsout
出现在工作区中。你
和svmlogsout
是万博1manbetxSimulinkData。数据集
包含预测标签和分数的对象。有关详细信息,请参见记录的模拟数据的数据格式(万博1manbetx模型).
从仿真日志中提取仿真数据。
labelsSL = svmlogsout.getElement (1) .Values.Data;scoresSL = svmlogsout.getElement (2) .Values.Data;
标签
是一个51乘1的预测标签的数字向量。labelsSL(j)
=1
表示SVM模型预测雷达返回j
在未来的样品是好的质量,和0
否则意味着。scoresSL
是一个51乘1的正类分数数值向量,即距离决策边界的有符号距离。正分数对应于预测的分数标签1
,而负分则对应于预测的标签0
.
使用命令行预测标签和正类得分预测
.
[labelCMD, scoresCMD] =预测(Mdl ftrX);scoresCMD = scoresCMD (:, 2);
labelCMD
和计分器
相称标签
和scoresSL
.
比较一下由SLEXSVM电离层预测样本
给那些通过呼叫返回的人预测
在命令行。
err = sum((scoresCMD - scoresSL).^2);犯错< eps
ans =逻辑1
两组分数之间的平方偏差之和可以忽略不计。
如果您也有Simulink Coder万博1manbetx™许可证,那么您可以从SLEXSVM电离层预测样本.slx
在Si万博1manbetxmulink中或从命令行中使用slbuild
(万博1manbetx模型)。有关详细信息,请参阅为模型生成C代码(万博1manbetx仿真软件编码器).
预测
|loadLearnerForCoder
|saveLearnerForCoder
|slbuild
(万博1manbetx模型)|LearnerCoder配置器