这个例子展示了如何将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(1:300,:);prsntY = Y(1:300);ftrX = X(301:结束,:);ftrY = Y(301:结束);
培养使用所有的SVM模型,目前可用的数据。指定预测数据标准化。
MDL = fitcsvm(prsntX,prsntY,“标准化”,真正的);
MDL
是一个ClassificationSVM
模型。在命令行中,您可以使用MDL
使新的观察预测。但是,您不能使用MDL
如在指用于代码生成的功能的输入自变量。
准备MDL
要使用函数内加载saveLearnerForCoder
。
saveLearnerForCoder(MDL,“SVMIonosphere”);
saveLearnerForCoder
契约MDL
,然后将其保存到mat文件中SVMIonosphere.mat
。
定义一个名为入口点函数svmIonospherePredict.m
这就可以预测雷达回波的质量是否良好。这个函数应该:
包括代码生成指令% # codegen
某处功能。
接受雷达收益预测数据。数据必须是相称X
除了行数。
加载SVMIonosphere.mat
使用loadLearnerForCoder
。
返回预测预测雷达回波良好的质量标签和分类评分(即,在正级分)。
功能[标号,得分= svmIonospherePredict(X)% # codegen%svmIonospherePredict使用SVM模型预测雷达回波质量svmIonospherePredict预测标签和估计分类雷达回波的%分数的预测数据X的数值矩阵使用%在文件SVMIonosphere.mat紧凑SVM模型。X的行%表示观测值,列表示预测变量。标签%为预测标签,分数为置信测度%分类雷达收益质量良好。%% MathWorks Inc.版权所有Mdl = loadLearnerForCoder (“SVMIonosphere”);[标签,bothscores] =预测(Mdl X);分数= bothscores (:, 2);结束
注:如果您单击位于此页面的右上部分的按钮,打开在MATLAB®这个例子中,然后打开MATLAB的示例文件夹中。此文件夹包含入口点函数文件。
加载Simulin万博1manbetxk®模型slexSVMIonospherePredictExample.slx
。
SimMdlName =“slexSVMIonospherePredictExample”;open_system (SimMdlName);
图中显示的是Simulink®模型。万博1manbetx当输入节点检测到雷达返回时,它将该观察结果定向到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
,然后指定型号的新名称。但是,预计的Sim万博1manbetxulink结构阵列,以包含所描述的字段名称。
使用训练外的数据模拟模型,即训练中的数据radarReturnInput
。
SIM(SimMdlName);
由图可知它后处理模型所有观测中radarReturnInput
一次一个。的预测标签X(351,:)
是1
它的正类分数是1.431
。变量吹捧
,你
和svmlogsout
出现在工作区中。你
和svmlogsout
是万博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 - scoresSL).^2);犯错< eps
ANS =逻辑1
两组分数之间偏差的平方和可以忽略不计。
如果你也有一个编码器的Simulink万博1manbetx™许可证,那么你就可以生成C代码slexSVMIonospherePredictExample.slx
使用的万博1manbetxSimulink或命令行rtwbuild
。有关更多细节,请参见生成C代码模型(万博1manbetx仿真软件编码器)。
learnerCoderConfigurer
|loadLearnerForCoder
|预测
|rtwbuild
|saveLearnerForCoder