使用交叉验证方法对分类器进行培训和测试后,如何使用结果验证未见数据,尤其是在自由运行阶段/部署阶段?如何使用学习模型?以下代码使用交叉验证训练和测试数据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(:))
答案 0 :(得分:0)
<强>预测强>
使用支持向量机(SVM)分类器预测标签
<强>语法强>
label = predict(SVMModel,X)
[label,score] = predict(SVMModel,X)
<强>描述强>
label = predict(SVMModel,X)
返回预测类标签的向量 对于表格或矩阵X中的预测数据,基于训练的 支持向量机(SVM)分类模型SVMModel。该 训练有素的SVM模型可以是完整的也可以是紧凑的。
在您的问题的代码中,pred = ...
以后的代码用于评估您的svmModel
对象所做的预测。但是,您可以使用相同的对象并使用它来使用更多输入数据集进行预测 - 或者更好的是,使用 all 数据训练第二个模型,并使用该模型进行实际预测新的未知输入。
您似乎不清楚(交叉)验证在模型构建中的作用。您应该使用整个数据集构建部署模型(X
,根据您的评论),因为通常更多数据总能为您提供更好的模型。要估计此部署模型的优秀程度,您可以从X的子集构建一个或多个模型,并针对不在该模型的训练子集中的X的其余部分测试每个模型。如果你只这样做一次,这称为保持验证;如果你使用多个子集并对结果进行平均,那就是交叉验证。
如果由于某种原因部署的模型与您用于获取验证结果的模型完全相同,那么您可以部署在您的保留的训练分区上训练的模型。但正如我所说,更多的训练数据通常会产生更好的模型。