主要内容

导出分类模型预测新数据

将模型导出到工作区以对新数据进行预测

在classification Learner中交互式地创建分类模型后,可以将最佳模型导出到工作区。然后,您可以使用训练过的模型使用新数据进行预测。

请注意

分类学习器导出的最终模型总是使用完整的数据集进行训练,不包括任何为测试保留的数据。您使用的验证方案只会影响应用程序计算验证指标的方式。您可以使用验证指标和各种可视化结果的图来为您的分类问题选择最佳模型。

下面是将模型导出到MATLAB的步骤®工作区:

  1. 中的“分类学习器”中选择要导出的模型模型窗格。

  2. 分类学习者选项卡,在出口部分,单击其中一个导出选项:

    • 若要包含用于训练模型的数据,请单击出口模式并选择出口模式.此选项将训练好的模型作为包含分类对象的结构导出到工作区,例如ClassificationTree.模型对象在可能的情况下包含训练数据。请注意,一些模型,如核近似模型,从不存储训练数据。

    • 如需排除培训数据,请单击出口模式并选择出口紧凑型.该选项导出删除了不必要数据的模型。也就是说,导出的结构包含一个不包括训练数据的分类对象(如果可能的话)。您仍然可以使用该模型对新数据进行预测。

      注意,有些模型,比如最近邻模型,总是存储训练数据。

  3. 在“导出模型”对话框中,如果需要,编辑导出变量的名称,然后单击好吧.导出模型的默认名称,trainedModel,每次导出时递增,以避免覆盖分类器(例如,trainedModel1).

    新变量(例如,trainedModel)出现在您的工作空间中。

    应用程序在命令窗口中显示关于导出模型的信息。阅读这篇文章,学习如何用新数据进行预测。

对新数据进行预测

当您从Classification Learner导出模型到工作区,或运行从应用程序生成的代码后,您将得到一个trainedModel结构,您可以使用新数据进行预测。该结构包含一个分类对象和一个预测函数。该结构允许您对包含主成分分析(PCA)的模型进行预测。

  1. 为了使用导出的分类器对新数据进行预测,T,使用以下表格:

    yfit = C.predictFcn(T)
    在哪里C是变量的名称(例如,trainedModel).

    提供数据T使用与应用程序中使用的训练数据相同的格式和数据类型(表格或矩阵)。

    • 如果您提供一个表,请确保它包含与您的训练数据相同的预测器名称。的predictFcn函数忽略表中的其他变量。变量格式和类型必须与原始训练数据匹配。

    • 如果你提供一个矩阵,它必须包含与你的训练数据相同的预测列或行,以相同的顺序和格式。不要包含响应变量、应用程序中没有导入的任何变量或其他未使用的变量。

    输出yfit包含每个数据点的类预测。

  2. 检查导出结构的字段。如需帮助进行预测,请输入:

    C.HowToPredict

还可以从导出的结构中提取分类对象,以便进行进一步分析(例如,trainedModel。ClassificationSVMtrainedModel。ClassificationTree等等,这取决于你的模型类型)。注意,如果你在应用中使用了特征转换,比如PCA,你将需要通过使用结构的PCA字段中的信息来考虑这种转换。

生成MATLAB用新数据训练模型的代码

在classification Learner中交互式创建分类模型后,您可以为您的最佳模型生成MATLAB代码。然后,您可以使用代码用新数据训练模型。

生成MATLAB代码以:

  • 在庞大的数据集上进行训练。在应用程序中探索在数据子集上训练的模型,然后生成代码在更大的数据集上训练选定的模型

  • 创建训练模型的脚本,而不需要学习不同函数的语法

  • 检查代码,了解如何以编程方式训练分类器

  • 修改代码以进行进一步分析,例如设置应用程序中不能更改的选项

  • 重复你对不同数据的分析并自动化训练

  1. 在分类学习器中,在模型窗格中,选择要为其生成代码的模型。

  2. 分类学习者选项卡,在出口部分中,点击生成函数

    该应用程序从您的会话生成代码,并在MATLAB编辑器中显示文件。该文件包括预测器和响应、分类器训练方法和验证方法。保存文件。

  3. 要重新训练分类器模型,请使用原始数据或新数据作为输入参数从命令行调用该函数。新数据必须与原始数据具有相同的形状。

    复制生成的代码的第一行,不包括单词函数,并编辑trainingData输入参数以反映您的训练数据或新数据的变量名。类似地,编辑responseData输入参数(如果适用)。

    例如,重新训练一个用fishertable数据集,输入:

    [trainedModel,validationAccuracy] = trainClassifier(渔场表)

    生成的代码返回trainedModel结构,该结构包含与从Classification Learner导出分类器到工作区时创建的结构相同的字段。

  4. 如果您想用新数据自动训练相同的分类器,或者学习如何以编程方式训练分类器,请检查生成的代码。该代码向您展示如何:

    • 将数据处理成正确的形状

    • 训练一个分类器并指定所有分类器选项

    • 进行交叉验证

    • 计算验证精度

    • 计算验证预测和分数

    请注意

    如果从经过训练的可优化模型生成MATLAB代码,则生成的代码不包括优化过程。

生成用于预测的C代码

如果您使用Classification Learner训练表中的一个模型,则可以生成用于预测的C代码。

请注意

您可以使用逻辑回归模型生成用于预测的C代码。然而,由于逻辑回归的基础模型是一个GeneralizedLinearModelCompactGeneralizedLinearModel对象时,此过程需要在预测入口点函数中添加额外的代码行,以将数值预测转换为类预测。有关示例,请参见分类学习者训练的逻辑回归模型的代码生成

C代码生成需要:

  • MATLAB编码器™许可证

  • 适当的模型(二进制或多类)

  1. 例如,在Classification Learner中训练SVM模型,然后将模型导出到工作空间。

    在导出的结构中查找底层分类模型对象。检查结构的字段以查找模型对象,例如,C.ClassificationSVM,在那里C是结构的名称。

    底层模型对象取决于您训练的SVM类型(二进制或多类)以及您是否导出了紧凑模型。模型对象可以是ClassificationSVMCompactClassificationSVMClassificationECOC,或CompactClassificationECOC

  2. 使用函数saveLearnerForCoder为代码生成准备模型:saveLearnerForCoder (Mdl文件名).例如:

    saveLearnerForCoder (C。ClassificationSVM,“mySVM”

  3. 创建一个函数,加载保存的模型并对新数据进行预测。例如:

    函数标签=分类(X)% # codegen使用支持向量机模型进行分类% CLASSIFYX对X中的测量值进行分类%使用SVM模型在文件mysql .mat中,而且then返回label中的类标签。CompactMdl = loadLearnerForCoder(“mySVM”);label = predict(CompactMdl,X);结束
  4. 从函数生成一个MEX函数。例如:

    codegenclassifyX.marg游戏{数据}
    % # codegen编译指令表明MATLAB代码是用于代码生成的。方法将工作区中的数据指定为函数的参数,以确保MEX函数可以使用相同的输入arg游戏选择。指定数据作为仅包含用于训练模型的预测列的矩阵。

  5. 使用MEX函数进行预测。例如:

    标签= classifyX_mex(数据);

如果你在应用程序中使用了特征选择或PCA特征转换,那么你需要采取额外的步骤。如果您使用手动特性选择,则在X.的X参数是函数的输入。

如果您在应用程序中使用了PCA,请使用导出结构的PCA字段中的信息来考虑这种转换。这并不重要,你是否导入表或矩阵到应用程序,只要X以相同的顺序包含矩阵列。在生成代码之前,执行以下步骤:

  1. 保存PCACenters而且PCACoefficients训练的分类器结构的字段,C,使用以下命令保存到文件中:

    保存(“pcaInfo.mat”“结构”“C”“PCACenters”“PCACoefficients”);

  2. 在函数文件中,包含额外的行来执行PCA转换。创建一个函数,加载保存的模型,执行PCA,并对新数据进行预测。例如:

    函数标签=分类(X)% # codegen使用支持向量机模型进行分类% CLASSIFYX对X中的测量值进行分类%使用SVM模型在文件mysql .mat中,然后返回label中的类标签。%如果您在应用程序中使用手动功能选择,请确保X%仅包含模型中包含的列。CompactMdl = loadLearnerForCoder(“mySVM”);pcaInfo = code .load(“pcaInfo.mat”“PCACenters”“PCACoefficients”);PCACenters = pcaInfo.PCACenters;pcacoeffents = pcainfo . pcacoeffents;%执行PCA变换pcaTransformedX = bsxfun(@minus,X,PCACenters)*PCACoefficients;[label,scores] = predict(CompactMdl,pcaTransformedX);结束

有关更详细的示例,请参见代码生成和分类学习应用程序.有关C代码生成工作流和限制的更多信息,请参见代码生成

使用MATLAB编译器部署预测

从Classification Learner将模型导出到工作区后,可以使用MATLAB编译器™

假设您根据中的说明将训练好的模型导出到MATLAB工作区将模型导出到工作区,用名字trainedModel.要部署预测,请执行以下步骤。

  • 保存trainedModel结构在.mat文件中。

    保存mymodeltrainedModel
  • 编写要编译的代码。这段代码必须加载经过训练的模型,并使用它来进行预测。它还必须有一个pragma,这样编译器才能识别已编译的应用程序中需要Statistics and Machine Learning Toolbox™代码。此pragma可以是Classification Learner中使用的任何模型训练函数(例如,fitctree).

    函数Ypred = mypredict(tbl)% #函数fitctree负载(“mymodel.mat”);ypred = trainedModel.predictFcn(tbl);结束
  • 编译为一个独立的应用程序。

    世纪挑战集团- mmypredict.m

导出用于部署的模型MATLAB生产服务器

在Classification Learner中训练模型后,可以导出模型以部署到其中MATLAB生产服务器(需要MATLAB编译SDK™).

  • 中选择训练过的模型模型窗格。在分类学习者选项卡,在出口部分中,点击出口模式并选择用于部署的导出模型

  • 在“为模型部署选择项目文件”对话框中,为您的项目文件选择一个位置和名称。

  • 在自动生成的predictFunction.m根据需要归档、检查和修改代码。

  • 使用生产服务器编译器应用程序打包您的模型和预测功能。您可以模拟模型部署到MATLAB制作服务器请按测试客户端按钮。测试部份编译器选项卡,然后通过单击按钮。部分。

有关示例,请参见将分类学习器中训练的模型部署到MATLAB生产服务器.有关更多信息,请参见为MATLAB生产服务器创建可部署存档(MATLAB Production Server)

另请参阅

功能

相关的话题