用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(施用:);prsntY = Y(施用);ftrX = X(301年:,);ftrY = Y(301:结束);
使用所有当前可用的数据训练支持向量机模型。指定预测器数据标准化。
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
。返回预测的标签和分类评分为预测雷达返回的质量为好(即正类评分)。
函数(标签,分数)= svmIonospherePredict (X)% # codegen使用支持向量机模型预测雷达返回质量svmIonospherePredict预测标签和估计分类雷达返回的百分比分数在预测数据X的数字矩阵中%,使用文件SVMIonosphere.mat中的压缩支持向量机模型。行(X)%对应观察值,列对应预测变量。标签%为预测标签,分数为置信度测量%分类雷达返回质量为良好。%版权所有2016 The MathWorks Inc.Mdl = loadLearnerForCoder (“SVMIonosphere”);[标签,bothscores] =预测(Mdl X);分数= bothscores (:, 2);结束
注意:如果您单击位于此页右上角部分的按钮,并在MATLAB中打开此示例,那么MATLAB将打开示例文件夹。这个文件夹包括入口点函数文件。
创建模型模型
用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)。值= ftrX;radarReturnInput.signals(1)。尺寸大小= (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] =预测(Mdl ftrX);scoresCMD = scoresCMD (:, 2);
labelCMD
而且scoresCMD
是相称labelsSL
而且scoresSL
。
比较未来样本,积极的班级分数返回slexSVMIonospherePredictExample
给那些被召唤回来的人预测
在命令行。
err = sum((scoresCMD - scoresSL).^2);犯错< eps
ans =逻辑1
两组分数之间的偏差平方和可以忽略不计。
如果您也有Simulink Coder™许可证,那么您可以从slexSVMIonospherePredictExample.slx
在Simulink或从命令行使用slbuild
(模型)。有关更多细节,请参见为模型生成C代码(仿真软件编码器)。
另请参阅
预测
|loadLearnerForCoder
|saveLearnerForCoder
|slbuild
(模型)|learnerCoderConfigurer