一旦分类器通过交叉验证方法训练和测试后,如何使用这些结果来验证未见过的数据,尤其是在自由运行阶段/部署阶段?如何使用学习的模型?以下代码使用交叉验证对数据X
进行训练和测试。在计算完pred = predict(svmModel, X(istest,:));
这一行后,我应该如何使用学习的模型?
part = cvpartition(Y,'Holdout',0.5);istrain = training(part); % 用于拟合的数据istest = test(part); % 用于质量评估的数据balance_Train=tabulate(Y(istrain))NumbTrain = sum(istrain); % 训练样本中的观测数NumbTest = sum(istest);svmModel = fitcsvm(X(istrain,:),Y(istrain), 'KernelFunction','rbf');pred = predict(svmModel, X(istest,:));% 计算混淆矩阵cmat = confusionmat(Y(istest),pred);acc = 100*sum(diag(cmat))./sum(cmat(:))
回答:
线索就在名称中:
predict
使用支持向量机(SVM)分类器预测标签
语法
label = predict(SVMModel,X)
[label,score] = predict(SVMModel,X)
描述
label = predict(SVMModel,X)
根据训练的支持向量机(SVM)分类模型SVMModel,返回表格或矩阵X中预测数据的预测类标签向量。训练的SVM模型可以是完整的或紧凑的。
在您的问题中的代码中,从pred = ...
开始的代码用于评估您的svmModel
对象所做的预测。然而,您可以使用同一个对象,并用它对进一步的输入数据集进行预测 – 或者,更好的是,使用所有数据训练第二个模型,并使用该模型对新的、未知的输入进行实际预测。
您似乎对(交叉)验证在模型构建中的作用不太清楚。您应该使用整个数据集构建部署模型(如您的评论中的X
),因为通常更多的数据总是能给您带来更好的模型。为了估计这个部署模型的表现如何,您可以从X的子集中构建一个或多个模型,并将每个模型与未在该模型训练子集中的X的其余部分进行测试。如果您只做一次,这被称为保留验证;如果您使用多个子集并平均结果,这就是交叉验证。
如果出于某种原因,您希望部署的模型与您用来获得验证结果的模型完全相同,那么您可以部署在保留的训练分区上训练的模型。但正如我所说,更多的训练数据通常会带来更好的模型。