预测类标签使用MATLAB函数块
这个例子展示了如何添加一个仿真软件MATLAB®功能块®标签模型预测。MATLAB函数块接受流数据,预测使用标签和分类训练,支持向量机(SVM)分类模型。使用MATLAB函数块的详细信息,请参见实现MATLAB函数与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-file,然后保存它SVMIonosphere.mat
。
定义MATLAB函数
定义一个MATLAB函数命名svmIonospherePredict.m
,预计雷达回波是否质量好。函数必须:
包括代码生成指令
% # codegen
在这个函数。接受雷达回波的预测数据。数据必须相称
X
除了的行数。负载
SVMIonosphere.mat
使用loadLearnerForCoder
。返回标签和分类预测分数预测雷达回波的质量一样好(即positive-class分数)。
函数(标签,分数)= svmIonospherePredict (X)% # codegen% svmIonospherePredict预测雷达回波质量使用支持向量机模型% svmIonospherePredict预测估计标签和分类%的雷达返回数值矩阵的预测数据X%在文件SVMIonosphere.mat使用紧凑的SVM模型。行(X)%列对应于观察和预测变量。标签%是预测标签和分数是衡量信心%分类雷达回波质量一样好。%% 2016年版权MathWorks公司。Mdl = loadLearnerForCoder (“SVMIonosphere”);[标签,bothscores] =预测(Mdl X);分数= bothscores (:, 2);结束
注意:如果您单击按钮位于这个页面的右上角部分,在MATLAB中打开这个例子,然后用MATLAB打开示例文件夹。这个文件夹包含的入口点函数文件。
创建模型模型
创建一个仿真软件模型的MATLAB分派功能块svmIonospherePredict.m
。
这个示例提供了仿真软件模型slexSVMIonospherePredictExample.slx
。打开仿真软件模型。
SimMdlName =“slexSVMIonospherePredictExample”;open_system (SimMdlName)
图显示了仿真软件模型。当输入节点检测到一个雷达回波,它指导观察到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
,然后在模型中指定的新名称。然而,模型预计结构数组包含描述字段名称。
使用数据模拟模型的训练,即数据radarReturnInput
。
sim (SimMdlName);
图显示了模型后,处理所有的观察radarReturnInput
一次一个。预测的标签的X(351年:)
是1
及其positive-class得分1.431
。的变量吹捧
,你
,svmlogsout
出现在工作区中。你
和svmlogsout
是SimulinkData.Dataset
对象包含预测的标签和分数。更多细节,请参阅数据格式记录仿真数据(模型)。
提取仿真模拟的数据日志。
labelsSL = svmlogsout.getElement (1) .Values.Data;scoresSL = svmlogsout.getElement (2) .Values.Data;
labelsSL
是一个51-by-1数值向量的预测标签。labelsSL (j)
=1
意味着支持向量机模型预测,雷达回波j
未来的样品质量好,0
否则意味着。scoresSL
51-by-1数值向量positive-class分数,也就是说,签署了边界距离决定。积极预测分数对应的标签1
预测,负分数对应的标签0
。
预测标签和positive-class分数在命令行中使用预测
。
[labelCMD, scoresCMD] =预测(Mdl ftrX);scoresCMD = scoresCMD (:, 2);
labelCMD
和scoresCMD
是相称labelsSL
和scoresSL
。
比较future-sample, positive-class分数返回的slexSVMIonospherePredictExample
通过调用返回预测
在命令行中。
呃=总和((scoresCMD - scoresSL) ^ 2);犯错< eps
ans =逻辑1
集之间的偏差的平方和成绩是微不足道的。
如果你也有一个仿真软件编码器™许可证,然后你可以从生成C代码slexSVMIonospherePredictExample.slx
在仿真软件或从命令行slbuild
(模型)。更多细节,请参阅为一个模型生成C代码(仿真软件编码器)。
另请参阅
预测
|loadLearnerForCoder
|saveLearnerForCoder
|slbuild
(模型)|learnerCoderConfigurer