交叉验证后如何在 Matlab 中应用学习模型

How to apply the learned model in Matlab after cross-validation

使用交叉验证方法对分类器进行训练和测试后,如何使用结果验证未见过的数据,尤其是在免费 运行 阶段/部署阶段?如何使用学习模型?以下代码使用交叉验证训练和测试数据 X。在计算 pred = predict(svmModel, X(istest,:)); 行后,我应该如何使用学习模型?

part = cvpartition(Y,'Holdout',0.5);
istrain = training(part); % Data for fitting
istest = test(part);      % Data for quality assessment
balance_Train=tabulate(Y(istrain))
NumbTrain = sum(istrain);         % Number of observations in the training sample
NumbTest = sum(istest);
svmModel = fitcsvm(X(istrain,:),Y(istrain), 'KernelFunction','rbf');
pred = predict(svmModel, X(istest,:));
% compute the confusion matrix
cmat = confusionmat(Y(istest),pred);
acc = 100*sum(diag(cmat))./sum(cmat(:))   

clue's in the name:

predict

Predict labels using support vector machine (SVM) classifier

Syntax

label = predict(SVMModel,X)

[label,score] = predict(SVMModel,X)

Description

label = predict(SVMModel,X) returns a vector of predicted class labels for the predictor data in the table or matrix X, based on the trained support vector machine (SVM) classification model SVMModel. The trained SVM model can either be full or compact.

在您问题的代码中,从 pred = ... 开始的代码用于评估您的 svmModel 对象所做的预测。但是,您可以采用相同的对象并使用它对进一步的输入数据集进行预测 - 或者,更好的是,使用 all 数据训练第二个模型,并使用该模型进行预测对新的未知输入的实际预测。

您似乎不清楚(交叉)验证在模型构建中的作用。您应该使用整个数据集构建您的部署模型X,根据您的评论),因为通常更多的数据总能为您提供更好的模型。要估计此部署模型的好坏程度,您从 X 的子集构建一个或多个模型,并针对不在该模型训练子集中的 X 的其余部分测试每个模型。如果您只执行一次,则称为 holdout validation;如果您使用多个子集并对结果进行平均,这就是交叉验证。

如果出于某种原因部署的模型与您用于获取验证结果的模型完全相同对您来说很重要,那么您可以部署在 holdout 的训练分区上训练的模型。但正如我所说,更多的训练数据通常会产生更好的模型。