此示例显示如何将Matlab®功能块添加到Simulink®模型以进行标签预测。金宝appMatlab功能块接受流数据,并使用培训的支持向量机(SVM)分类模型预测标签和分类分数。金宝app有关使用MATLAB功能块的详细信息,请参阅使用MATLAB功能块创建自定义功能(金宝appSimulink)。
这个例子使用了电离层
数据集,包含雷达返回质量(y
)和预测数据(X
)。雷达返回质量很好('G'
)或质量不好('B'
)。
加载电离层
数据集。确定样本大小。
加载电离层n = numel(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.
是A.分类VM.
模型。
Savelarnerforcoder.
在命令行,您可以使用MDL.
对新观察进行预测。但是,你不能使用MDL.
作为函数中的输入参数意味着代码生成。
准备MDL.
使用在功能内加载Savelarnerforcoder.
。
SavelAlnerForCoder(MDL,'svmionosphere');
Savelarnerforcoder.
紧凑型MDL.
,然后将其保存在Mat文件中svmionosphere.mat
。
定义名为matlab函数svmionopepredict.m.
预测雷达返回是否具有质量优良。功能必须:
包括代码生成指令%#codegen.
在功能的某个地方。
接受雷达返回预测器数据。数据必须与之相称X
除了行数。
加载svmionosphere.mat
使用loadlearnerforcoder.
。
返回预测标签和分类分数,用于预测雷达返回的质量,如良好的(即积极级别得分)。
功能[标签,得分] = svmionopepredict(x)%#codegen.使用SVM模型预测雷达返回质量%SVMiOneSpeic%svmionopepredict预测标签和估计分类雷达的%分数在预测器数据x的数字矩阵中返回%使用文件svmionoSphere.mat中的Compact SVM模型。行的行%对应于预测变量的观察和列。标签%是预测的标签和得分是置信度量%将雷达返回质量分类为好。%%版权所有2016 MathWorks Inc.mdl = loadlearnerforcoder('svmionosphere');[标签,两个谱] =预测(MDL,x);得分=两个谱(:,2);结尾
注意:如果单击此页面的右侧部分中的按钮并在MATLAB中打开此示例,则MATLAB将打开示例文件夹。此文件夹包含入口点函数文件。
使用Matlab功金宝app能块创建一个Simulink模型,该模块调度svmionopepredict.m.
。
此示例提供了Simulink模型金宝appslexsvmionopepredictexample.slx.
。打开Simulin金宝appk模型。
simmdlname ='slexsvmionospherepredictexample';Open_System(SIMMDLNAME)
该图显示了Simulink模型。金宝app当输入节点检测到雷达返回时,它将观察到发出的MATLAB功能块。svmionopepredict.m.
。在预测标签和分数之后,模型将这些值返回到工作区,并一次显示模型内的值。当你加载时slexsvmionopepredictexample.slx.
,MATLAB还加载它需要调用的数据集RadarreturnInput.
。但是,此示例显示了如何构建所需的数据集。
该模型希望接收输入数据作为调用的结构阵列RadarreturnInput.
包含这些字段:
时间
- 观察到进入模型的时间点。在该示例中,持续时间包括从0的整数虽然50.方向必须对应于预测器数据中的观察。所以,对于这个例子,时间
必须是列向量。
信号
- 1×1结构阵列描述输入数据,并包含字段价值
和方面
。价值
是预测器数据的矩阵。方面
是预测变量的数量。
为将来的雷达返回创建适当的结构阵列。
RadarreturnInput.time =(0:50)';RadarreturnInput.Signals(1).values = ftrx;RadarreturnInput.Signals(1).dimensions =尺寸(ftrx,2);
您可以从中更改名称RadarreturnInput.
,然后在模型中指定新名称。但是,Simuli金宝appnk期望结构阵列包含所描述的字段名称。
使用培训的数据模拟模型,即数据RadarreturnInput.
。
sim(simmdlname);
该图显示了它在处理所有观察后的模型RadarreturnInput.
一次一个。预测标签x(351,:)
是1
它的正面分数是1.431.
。变量兜售
那you ..
, 和svmlogsout.
出现在工作区。you ..
和svmlogsout.
是金宝appSimulinkData.Dataset.
包含预测标签和分数的对象。有关更多详细信息,请参阅用于记录模拟数据的数据格式(金宝appSimulink)。
从仿真日志中提取模拟数据。
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.
。
比较未来样本,返回的正级别分数slexsvmionopepreptictexample.
致电返回的人预测
在命令行。
err = sum((scorescmd - scoressl)。^ 2);错误
ans =.逻辑1
分数集之间的平方偏差之和可忽略不计。
如果您还有Simulink Coder金宝app™许可证,则可以从中生成C代码slexsvmionopepredictexample.slx.
在Si金宝appmulink中或使用命令行使用SLBUILD.
(金宝appSimulink)。有关更多详细信息,请参阅为模型生成C代码(金宝appSimulink编码器)。
Learnercoderconfigurer
|loadlearnerforcoder.
|预测
|Savelarnerforcoder.
|SLBUILD.
(金宝appSimulink)