这个示例演示了如何使用二叉决策树模型生成代码来对表中的数字和类别数据进行分类。在这个例子中训练的模型识别分类预测因子CategoricalPredictors
财产;因此,该软件自动处理分类预测器。您不需要手动为分类预测器创建虚拟变量来生成代码。
在通用代码生成工作流中,您可以针对表中的数据训练分类或回归模型。将数组(而不是表)传递给入口点函数进行预测,在入口点函数中创建一个表,然后将表传递给预测
.有关代码生成中的表支持的更多信息,请参见金宝app表的代码生成(MATLAB编码器)和代码生成的表限制(MATLAB编码器).
加载病人
数据集。创建包含类型为数字的预测器的表单
和双
,分类预测类型分类
,以及响应变量吸烟者
类型的逻辑
.表格中的每一行对应于一个不同的病人。
负载病人年龄=单(年龄);重量=单(重量);性别=分类(性别);SelfAssessedHealthStatus =分类(SelfAssessedHealthStatus);台=表(年龄、舒张、收缩、体重、性别、SelfAssessedHealthStatus,吸烟者);
使用中的数据训练分类树资源描述
.
Mdl = fitctree(资源描述,“抽烟”)
Mdl = ClassificationTree PredictorNames: {1x6 cell} ResponseName: '吸烟者' CategoricalPredictors: [5 6] ClassNames: [0 1] ScoreTransform: 'none' NumObservations: 100属性,方法
的CategoricalPredictors
属性值是(5 - 6)
,这表明Mdl
确定第5和第6预测因子(“性别”
和“SelfAssessedHealthStatus”
)作为绝对预测因子。要将任何其他预测器标识为分类预测器,可以使用“CategoricalPredictors”
名称-值参数。
显示预测器名称和它们的顺序Mdl
.
Mdl。PredictorNames
ans =1 x6单元格第1至5列{'Age'}{'舒张'}{'收缩期'}{'Weight'} {'Gender'}第6列{' selfassesssedhe…'}
使用。将树分类器保存到文件saveLearnerForCoder
.
saveLearnerForCoder (Mdl“TreeModel”);
saveLearnerForCoder
将分类器保存到MATLAB®二进制文件TreeModel.mat
作为当前文件夹中的结构数组。
定义入口点函数predictSmoker
,它将预测变量作为输入参数。在函数中,通过使用loadLearnerForCoder
,根据输入参数创建表,然后将分类器和表传递给预测
.
函数(标签、分数)= predictSmoker(年龄、舒张、收缩、体重、性别、selfAssessedHealthStatus)% # codegen使用训练过的树模型标记新的观察结果% predict吸烟者预测患者是吸烟者(1)还是非吸烟者%(0)根据年龄、舒张压、收缩压%压力、体重、性别和自我评估健康状况。这个函数%还提供分类分数,表明a%预测标签来自一个特定的类别(吸烟者或非吸烟者)。mdl = loadLearnerForCoder (“TreeModel”);varnames = mdl.PredictorNames;台=表(年龄、舒张、收缩、体重、性别、selfAssessedHealthStatus,...“VariableNames”, varnames);(标签、分数)=预测(mdl(资源);结束
在入口点函数中创建表时,必须指定变量名(例如,使用“VariableNames”
的名称-值对参数表格
).如果您的表只包含预测变量,并且预测变量的顺序与用于训练模型的表相同,那么您可以在mdl。PredictorNames
.
生成的代码predictSmoker
通过使用codegen
.使用该参数指定预测器变量输入参数的数据类型和维度coder.typeof
.
的第一个输入参数coder.typeof
指定预测器的数据类型。
第二个输入参数指定行数的上限(正
)及列(1
)。
第三个输入参数指定预测器中的行数可以在运行时更改,但列数是固定的。
ARGS =细胞(4,1);ARGS{1} =编码器。typeof(年龄、[正1]1 [0]);ARGS{2} =编码器。typeof(舒张压、[正1]1 [0]);ARGS{3} =编码器。typeof(收缩压、[正1]1 [0]);ARGS{4} =编码器。typeof(体重、[正1]1 [0]);ARGS{5} =编码器。typeof(Gender,[Inf 1],[1 0]); ARGS{6} = coder.typeof(SelfAssessedHealthStatus,[Inf 1],[1 0]); codegenpredictSmokerarg游戏arg游戏
代码生成成功。
codegen
生成MEX函数predictSmoker_mex
使用当前文件夹中与平台相关的扩展名。
验证预测
,predictSmoker
, MEX文件对随机抽样的20名患者返回相同的结果。
rng (“默认”)%的再现性[newTbl, idx] = datasample(台,20);[labels1, scores1] =预测(Mdl newTbl);[labels2, scores2] = predictSmoker(年龄(idx)、舒张压(idx)、收缩压(idx)、体重(idx)、性别(idx) SelfAssessedHealthStatus (idx));[labels3, scores3] = predictSmoker_mex(年龄(idx)、舒张压(idx)、收缩压(idx)、体重(idx)、性别(idx) SelfAssessedHealthStatus (idx));verifyMEXlabels = isequal (labels1 labels2 labels3)
verifyMEXlabels =逻辑1
verifyMEXscores = isequal (scores1 scores2 scores3)
verifyMEXscores =逻辑1
codegen
(MATLAB编码器)|coder.typeof
(MATLAB编码器)|loadLearnerForCoder
|saveLearnerForCoder