如何在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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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