此示例显示如何将Matlab®功能块添加到Simulink®模型以进行标签预测。金宝appMatlab功能块接受流数据,并使用培训的支持向量机(SVM)分类模型预测标签和分类分数。金宝app有关使用MATLAB功能块的详细信息,请参阅使用MATLAB功能块创建自定义功能(金宝app模型).
本示例使用电离层
数据集,包含雷达返回质量(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.
是一个分类VM.
模型。
Savelarnerforcoder.
在命令行,您可以使用MDL.
对新观察进行预测。但是,你不能使用MDL.
作为函数中的输入参数意味着代码生成。
准备MDL.
使用在功能内加载Savelarnerforcoder.
.
SavelAlnerForCoder(MDL,“SVMIonosphere”);
Savelarnerforcoder.
紧凑型MDL.
,然后保存到MAT-file中SVMIonosphere.mat
.
定义名为matlab函数svmionopepredict.m.
这可以预测雷达回波质量是否良好。函数必须:
包括代码生成指令% # codegen
在功能的某个地方。
接受雷达返回预测器数据。数据必须与之相称X
除了行数。
加载SVMIonosphere.mat
使用loadLearnerForCoder
.
返回预测标签和分类分数,用于预测雷达返回的质量,如良好的(即积极级别得分)。
功能[标签,得分] = svmionopepredict(x)% # codegen使用支持向量机模型预测雷达回波质量% svmIonospherePredict预测标签和估计分类雷达的%分数在预测器数据x的数字矩阵中返回%使用文件svmionoSphere.mat中的Compact SVM模型。行的行%对应观察值和预测变量的列。标签%是预测标签,分数是对的置信度测量%将雷达返回质量分类为好。%版权所有2016 The MathWorks Inc.Mdl = loadLearnerForCoder (“SVMIonosphere”);[标签,bothscores] =预测(Mdl X);分数= bothscores (:, 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。时间= (0:50)';radarReturnInput.signals(1)。值= ftrX;radarReturnInput.signals(1)。尺寸大小= (ftrX 2);
您可以更改名称RadarreturnInput.
,然后在模型中指定新名称。然而,Simuli金宝appnk®期望结构数组包含所描述的字段名。
使用训练之外的数据,即训练中的数据,模拟模型RadarreturnInput.
.
sim(simmdlname);
该图显示了它在处理所有观察后的模型RadarreturnInput.
一次一个。预测的标签x(351,:)
是1
它的积极等级得分是1.431
.变量吹捧
,你
, 和svmlogsout
出现在工作区中。你
和svmlogsout
是金宝appSimulinkData。数据集
包含预测标签和分数的对象。有关详细信息,请参见用于记录模拟数据的数据格式(金宝app模型).
从仿真日志中提取仿真数据。
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®Coder金宝app™许可证,则可以从中生成C代码slexsvmionopepredictexample.slx.
在Si金宝appmulink®或使用命令行使用rtwbuild
(金宝app仿真软件编码器).有关详细信息,请参见为模型生成C代码(金宝app仿真软件编码器).
Learnercoderconfigurer
|loadLearnerForCoder
|预测
|Savelarnerforcoder.
|rtwbuild
(金宝app仿真软件编码器)