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

一旦分类器通过交叉验证方法训练和测试后,如何使用这些结果来验证未见过的数据,尤其是在自由运行阶段/部署阶段?如何使用学习的模型?以下代码使用交叉验证对数据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的其余部分进行测试。如果您只做一次,这被称为保留验证;如果您使用多个子集并平均结果,这就是交叉验证。

如果出于某种原因,您希望部署的模型与您用来获得验证结果的模型完全相同,那么您可以部署在保留的训练分区上训练的模型。但正如我所说,更多的训练数据通常会带来更好的模型。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注