主要内容

为分类预测器创建虚拟变量,并生成C / C ++代码

此示例显示如何使用支持向量机(SVM)模型生成用于对数据进行分类的代码。金宝app使用数字和编码的分类预测器列车模型。用戴维尔在拟合SVM分类器之前将分类预测器转换为数字虚拟变量。将新数据传递给培训的模型时,必须以类似的方式预处理数据。

或者,如果训练模型识别出分类预测器分类预测器属性,然后您无需手动创建虚拟变量以生成代码。软件自动处理分类预测器。例如,看到生成代码以在表中对数据进行分类

预处理数据和火车SVM分类器

加载耐心数据集。使用该表创建一个表舒张收缩系统数字变量。表的每一行对应于不同的患者。

加载耐心TBL =表(舒张,收缩);头(TBL)
ans =.8×2表舒张式收缩__________________ 93 124 77 109 83 125 75 117 80 122 70 121 88 130 82 115

转换性别变量到A.分类多变的。类别的顺序类别很重要,因为它确定了预测器数据中列的顺序。用戴维尔将分类变量转换为零的矩阵和其中的矩阵1价值在(I,J)进入表示一世患者属于j类别。

分类哥剂=分类(性别);OrderGender =类别(类别)
OrderGender =.2x1细胞{'女人男人' }
dummygender = dummyvar(类别);

笔记:所结果的DummyGender.矩阵是排名缺陷。根据您训练的型号类型,这个等级缺陷可能是有问题的。例如,在培训线性模型时,删除虚拟变量的第一列。

创建包含虚拟变量的表DummyGender.使用相应的可变标题。将这张新表结合在一起TBL.

tblgender = Array2Table(Dummygender,'variablenames',订单);tbl = [tbl tblgender];头(TBL)
ans =.8×4表舒张收缩雌性男性_________ ___________________ 93 124 0 1 77 109 0 1 83 125 1 0 75 117 1 0 80 122 1 0 70 121 11 0 88 130 1 0 82 115 0 1

转换Selfassessedhealthstatus.变量到A.分类多变的。注意类别的顺序分类健康,并使用数字矩阵将变量转换为戴维尔

分类健康=分类(SelfassessedHealthStatus);OrderHealth =类别(分类医疗)
OrderHealth =.4x1细胞{'feater'} {'fair'} {'好'} {'穷'}
DummyHealth = Dummyvar(分类健康);

创建一个包含的表DummyHealth.使用相应的可变标题。将这张新表结合在一起TBL.

TBLHealth = Array2Table(DummyHealth,'variablenames',oriterhealth);tbl = [tbl tblhealth];头(TBL)
ans =.8×8表舒张性收缩女性男性优秀公平差_________ ___________________________________ 93 124 0 1 0 0 1 0 0 0 0 83 125 11 0 0 0 1 0 0 0 8 3 117 1 0 0 1 0 0 0 8 3 117 1 0 0 1 0 0 0 80 1221 0 0 0 1 0 70 121 1 0 0 0 1 0 88 130 1 0 0 0 1 0 82 115 0 1 0 0 1 0

第三行TBL.例如,对应于具有这些特性的患者:舒张压血压为83,收缩压125,女性和良好的自我评估的健康状况。

因为所有的价值TBL.是数字,可以将表转换为矩阵X

x = table2Array(TBL);

使用SVM分类器使用X。指定吸烟者变量作为响应。

Y =吸烟者;mdl = fitcsvm(x,y);

生成C / C ++代码

生成加载SVM分类器的代码,将新的预测器数据作为输入参数,然后对新数据进行分类。

使用使用的文件将SVM分类器保存到文件中Savelarnerforcoder.

SavelAlnerForCoder(MDL,'svmclassifier'

Savelarnerforcoder.将分类器保存到MATLAB®二进制文件svmclassifier.mat.作为当前文件夹中的结构阵列。

定义入口点函数mysvmpredict.,将新的预测器数据作为输入参数。在函数中,使用使用加载SVM分类器loadlearnerforcoder.,然后将加载的分类器传递给预测

功能label = mysvmpredict(x)%#codegen.mdl = loadlearnerforcoder('svmclassifier');标签=预测(MDL,x);结尾

生成代码mysvmpredict.通过使用Codegen.。通过使用指定新预测器数据的数据类型和维度Coder.typeof.因此,生成的代码接受可变大小的数组。

Codegen.mysvmpredict.-  args.{coder.typeof(X,[INF 8],[1 0])}
代码成功。

验证mysvmpredict.并且MEX文件返回培训数据的相同结果。

标签=预测(MDL,x);mylabel = mysvmpredict(x);mylabel_mex = mysvmpredict_mex(x);验证ex = isequal(标签,mylabel,mylabel_mex)
验证ex =.逻辑1

预测新数据标签

要预测新数据标签,您必须先预处理新数据。如果在MATLAB环境中运行生成的代码,则可以遵循本节中描述的预处理步骤。如果您在MATLAB环境之外部署生成的代码,则预处理步骤可能会有所不同。在任何一种情况下,您必须确保新数据具有与培训数据相同的列X

在这个例子中,采取第三,第四和第五名患者耐心数据集。预处理这些患者的数据,以便得到的数字矩阵与训练数据的形式匹配。

将分类变量转换为虚拟变量。由于新的观察可能不包含所有类别的值,因此您需要将与培训期间使用的类别指定相同的类别,并保持相同的类别顺序。在MATLAB中,通过与相应的培训数据变量关联的类别名称的有序小区数组(在此示例中,订单对于性别价值观和OrderHealth.用于自我评估的健康状况值)。

newcategoricalgender =分类(性别(3:5),Orivergender);newdummygender = dummyvar(newcategoricalgender);New类别河流=分类(SelfassessedHealthStatus(3:5),OrderHealth);newdummyhealth = dummyvar(new类别健康);

将所有新数据组合成一个数字矩阵。

newx = [舒张(3:5)收缩(3:5)newdummygender newdummyhealth]
newx =3×8.83 125 1 0 0 0 1 0 75 117 1 0 0 0 0 0 80 122 1 0 0 0 1 0

注意新兴对应于矩阵的第三,第四和第五行X

验证mysvmpredict.MEX文件返回新数据的相同结果。

newlabel =预测(mdl,newx);newmylabel = mysvmpredict(newx);newmylabel_mex = mysvmpredict_mex(newx);newverifymex = isequal(newlabel,newmylabel,newmylabel_mex)
newverifymex =逻辑1

也可以看看

|||||(MATLAB编码器)|(MATLAB编码器)|(MATLAB编码器)

相关话题