这个例子展示了如何将MATLAB®Function块添加到Simulink®模型中用于标签预测。金宝appMATLAB函数块接受流数据,并使用训练有素的支持向量机(SVM)分类模型预测标签和分类分数。金宝app关于使用MATLAB函数块的详细信息,请参见使用MATLAB函数块创建自定义功能(金宝app模拟链接).
本例使用电离层
数据集,包含雷达回波质量(Y
)及预测数据(十
).雷达回波的质量较好(“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:结束);
使用所有现有数据训练一个SVM模型。指定预测器数据标准化。
Mdl = fitcsvm (prsntX prsntY,“标准化”,正确);
Mdl
是一个ClassificationSVM
模型
saveLearnerForCoder
在命令行中,您可以使用Mdl
为新的观测做预测。但是,您不能使用Mdl
作为用于代码生成的函数的输入参数。
准备Mdl
要加载在函数内使用saveLearnerForCoder
.
saveLearnerForCoder (Mdl“超光球”);
saveLearnerForCoder
契约Mdl
,然后将其保存在MAT文件中虚拟世界.mat
.
定义一个MATLAB函数名为svmIonospherePredict.m
这就预示了雷达回波的质量是否良好。函数必须:
包含代码生成指令%#编码基因
在函数的某个地方。
接受雷达返回的预报数据。数据必须匹配十
除了行数。
负载虚拟世界.mat
使用LoadLearnerFor编码器
.
返回预测标签和分类评分,用于预测雷达返回质量为好(即正类评分)。
函数(标签,分数)= svmIonospherePredict (X)%#编码基因%SVM模型预测雷达回波质量%SVMIonosphereProdict预测标签和分类估计在预报器数据X的数值矩阵中,雷达返回的分数%%在文件svmionsphere .mat中使用紧凑的SVM模型。行(X)%对应于观察值,列对应于预测变量。标签%是预测的标签,分数是%,雷达回波质量为好。%%版权所有2016 The MathWorks Inc。Mdl=编码器的LoadLearner(“超光球”); [label,bothscores]=预测(Mdl,X);得分=两个分数(:,2);结束
注意:如果您点击位于本页右上方的按钮,并在MATLAB中打开这个示例,那么MATLAB将打开示例文件夹。这个文件夹包括入口点函数文件。
用MATLAB函数金宝app块创建一个Simulink模型svmIonospherePredict.m
.
本例提供了Simulink模型金宝appslexSVMIonospherePredictExample.slx
. 打开Simulin金宝appk模型。
简单名称='SLEXSV电离层预测样本';open_system (SimMdlName)
此图显示Simulink模型。当输入节点检测到雷金宝app达回波时,它将该观测值引导到MATLAB功能块中,并发送给svmIonospherePredict.m
.在预测标签和分数之后,模型将这些值返回到工作区,并在模型中每次显示一个值。当你负荷slexSVMIonospherePredictExample.slx
,MATLAB还加载它需要调用的数据集radarReturnInput
. 然而,这个例子展示了如何构造所需的数据集。
模型期望以一个名为radarReturnInput
包含这些字段:
时间
-观测数据进入模型的时间点。在本例中,持续时间包括0到50之间的整数。方向必须与预测器数据中的观测值相对应。所以,在这个例子中,时间
一定是列向量。
信号
-描述输入数据并包含字段的1乘1结构数组值
和维
.值
是一个预测数据的矩阵。维
是预测变量的数量。
为未来的雷达回波建立一个适当的结构阵列。
radarReturnInput.time=(0:50)';radarReturnInput.signals(1).值=ftrX;雷达回波输入。信号(1)。尺寸=尺寸(ftrX,2);
你可以把名字改成radarReturnInput
,然后在模型中指定新名称。但是,Simulink希望结构数组包含所描述的字段名。金宝app
使用训练之外的数据,即radarReturnInput
.
sim (SimMdlName);
图中显示的是在处理所有观测数据后的模型radarReturnInput
一次一个。预测的标签X(351年:)
是1.
它的正班级分数是1.431
.的变量吹牛
,青年
,斯文洛格苏特
出现在工作区中。青年
和斯文洛格苏特
是金宝appSimulinkData.数据集
包含预测标签和分数的对象。有关详细信息,请参阅模拟数据日志格式(金宝app模拟链接).
从仿真日志中提取仿真数据。
labelsSL=svmlogsout.getElement(1).Values.Data;scoresl=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);
标签CMD
和scoresCMD
是相称labelsSL
和scoresSL
.
比较未来的样本,积极的班级成绩返回slexSVMIonospherePredictExample
给那些打电话回来的人预测
在命令行。
err=总和((scoresCMD-scoresl)。^2);err<每股收益
答案=符合逻辑的1.
两组分数的平方差之和可以忽略不计。
如果你还有一个Simulink编码器™金宝app 许可证,然后您可以从slexSVMIonospherePredictExample.slx
在Si金宝appmulink中或从命令行使用slbuild公司
(金宝app模拟链接).更多信息请参见为模型生成C代码(金宝appSimulink编码器).
learnerCoderConfigurer
|LoadLearnerFor编码器
|预测
|saveLearnerForCoder
|slbuild公司
(金宝app模拟链接)