创建虚拟变量分类预测和生成C / c++代码
这个例子展示了如何生成代码使用支持向量机(SVM)分类数据模型。金宝app火车使用数字和编码的分类预测模型。使用dummyvar
将分类预测数字虚拟变量之前安装一个支持向量机分类器。当新数据传递给你的训练模式,你必须进行预处理以类似方式的数据。
另外,如果一个训练有素的模式识别分类的预测因子CategoricalPredictors
属性,那么您不需要手动创建虚拟变量来生成代码。软件自动处理分类预测。例如,看到的生成代码对数据表进行分类。
预处理数据和训练支持向量机分类器
加载病人
使用的数据集。创建一个表舒张压
和收缩压
数值变量。表的每一行对应一个不同的病人。
负载病人台=表(舒张压、收缩压);头(台)
ans =8×2表舒张压收缩压_____ ________ 93 124 77 109 83 125 75 117 80 122 70 121 88 130 82 115
转换性别
变量,分类
变量。类别的顺序categoricalGender
很重要,因为它决定了预测数据的顺序列。使用dummyvar
将分类变量转换为0和1的矩阵,其中1
的价值(i, j)
表明th条目我
病人属于j
类别。
categoricalGender =分类(性别);orderGender =类别(categoricalGender)
orderGender =2 x1细胞{'女'}{‘男性’}
dummyGender = dummyvar (categoricalGender);
注意:由此产生的dummyGender
矩阵的秩是有缺陷的。取决于你火车模型的类型,这等级不足可能会有问题。例如,当训练线性模型,消除虚变量的第一列。
创建一个表,其中包含了哑变量dummyGender
与标题对应的变量。把这个新表资源描述
。
tblGender = array2table (dummyGender,“VariableNames”,orderGender);台=[(资源tblGender];头(台)
ans =8×4表________ ________舒张收缩女性男性____ ____ 93 124 0 1 77 109 0 0 1 83 125 75 117 0 1 0 80 122 70 121 0 1 0 88 130 82 115 0 1
转换SelfAssessedHealthStatus
变量,分类
变量。注意类的顺序categoricalHealth
,将变量转换为一个数字矩阵dummyvar
。
categoricalHealth =分类(SelfAssessedHealthStatus);orderHealth =类别(categoricalHealth)
orderHealth =4 x1细胞{‘优秀’}{‘公平’}{‘好’}{“贫穷”}
dummyHealth = dummyvar (categoricalHealth);
创建一个表,其中包含dummyHealth
与标题对应的变量。把这个新表资源描述
。
tblHealth = array2table (dummyHealth,“VariableNames”,orderHealth);台=[(资源tblHealth];头(台)
ans =8×8表舒张收缩女性男性优秀的公平好可怜的_____ ________ ________ ___ _____ _____上93 124 0 1 1 0 0 0 77 109 0 1 0 1 0 0 0 0 0 1 0 83 125 75 117 1 0 0 1 0 0 0 0 0 1 0 80 122 70 121 1 0 0 0 0 0 0 0 1 0 88 130 82 115 0 1 0 0 1 0
的第三行资源描述
例如,对应于一个病人与这些特点:舒张压83,收缩压125年女性,和良好的自我评价健康状况。
因为所有的值资源描述
是数字,可以将表转换成矩阵X
。
X = table2array(台);
训练一个支持向量机分类器使用X
。指定吸烟者
变量的响应。
Y =吸烟者;Mdl = fitcsvm (X, Y);
生成C / c++代码
生成的代码加载SVM分类器,接受新的预测数据作为输入参数,然后分类新数据。
将支持向量机分类器保存到一个文件使用saveLearnerForCoder
。
saveLearnerForCoder (Mdl“SVMClassifier”)
saveLearnerForCoder
节省了MATLAB®二进制文件的分类器SVMClassifier.mat
作为一个结构数组在当前文件夹。
定义的入口点函数mySVMPredict
新的预测数据作为输入参数。内部函数,加载SVM分类器通过使用loadLearnerForCoder
,然后通过加载分类器预测
。
函数标签= mySVMPredict (X)% # codegenMdl = loadLearnerForCoder (“SVMClassifier”);标签=预测(Mdl X);结束
生成的代码mySVMPredict
通过使用codegen
。指定数据类型和维度的新预测数据通过使用coder.typeof
这样生成的代码接受适应可变数组。
codegenmySVMPredictarg游戏{编码器。typeof (X,[正8],[1 0])}
代码生成成功。
验证mySVMPredict
和墨西哥人训练数据文件返回相同的结果。
标签=预测(Mdl X);mylabel = mySVMPredict (X);mylabel_mex = mySVMPredict_mex (X);verifyMEX = isequal(标签、mylabel mylabel_mex)
verifyMEX =逻辑1
预测新数据标签
预测新数据标签,您必须首先进行预处理的新数据。如果你在MATLAB环境中运行生成的代码,您可以按照本节中描述的预处理步骤。如果你部署生成的代码在MATLAB环境中,可以不同的预处理步骤。在这两种情况下,您必须确保新数据具有相同的列作为训练数据X
。
在这个例子中,第三,第四和第五的病人病人
数据集。为这些患者预处理数据,这样产生的数值矩阵匹配训练数据的形式。
分类变量转换为虚拟变量。因为新的观察结果可能不包括所有类别值,您需要指定相同的类别中使用的培训和维护同一类别秩序。在MATLAB,通过命令单元阵列的类别名称与相应的训练数据变量(在这个例子中,orderGender
性别价值观和orderHealth
对自我评价的健康状态值)。
newcategoricalGender =分类(性别(3:5),orderGender);newdummyGender = dummyvar (newcategoricalGender);newcategoricalHealth =分类(SelfAssessedHealthStatus (3:5), orderHealth);newdummyHealth = dummyvar (newcategoricalHealth);
结合所有的新数据转换成一个数字矩阵。
newX =[舒张压(3:5)收缩压(3:5)newdummyGender newdummyHealth]
newX =3×80 75 117 83 125 1 0 0 0 1 1 0 0 1 0 0 80 122 1 0 0 0 1 0
请注意,newX
完全对应第三、第四和第五行的矩阵X
。
验证mySVMPredict
和墨西哥人文件为新数据返回相同的结果。
newX newlabel =预测(Mdl);newmylabel = mySVMPredict (newX);newmylabel_mex = mySVMPredict_mex (newX);newverifyMEX = isequal (newlabel newmylabel newmylabel_mex)
newverifyMEX =逻辑1
另请参阅
dummyvar
|分类
|ClassificationSVM
|codegen
(MATLAB编码器)|coder.typeof
(MATLAB编码器)|loadLearnerForCoder
|coder.Constant
(MATLAB编码器)|saveLearnerForCoder