在 matlab 中使用交叉验证的 Knn 分类器模型预测新数据集(测试数据)的标签
Predict labels for new dataset (Test data) using cross validated Knn classifier model in matlab
我有一个训练数据集 (50000 X 16) 和测试数据集 (5000 X 16)[两个数据集中的第 16 列是决策标签或响应。测试数据集中的决策标签用于检查训练分类器的分类准确性]。我正在使用我的训练数据来训练和验证我的交叉验证 knn 分类器。我使用以下代码创建了一个交叉验证的 knn 分类器模型:
X = Dataset2(1:50000,:); % Use some data for fitting
Y = Training_Label(1:50000,:); % Response of training data
%Create a KNN Classifier model
rng(10); % For reproducibility
Mdl = fitcknn(X,Y,'Distance', 'Cosine', 'Exponent', '', 'NumNeighbors', 10,'DistanceWeight', 'Equal', 'StandardizeData', 1);
%Construct a cross-validated classifier from the model.
CVMdl = crossval(Mdl,'KFold', 10);
%Examine the cross-validation loss, which is the average loss of each cross-validation model when predicting on data that is not used for training.
kloss = kfoldLoss(CVMdl, 'LossFun', 'ClassifError')
% Compute validation accuracy
validationAccuracy = 1 - kloss;
现在我想使用这个经过交叉验证的 knn 分类器对我的测试数据进行分类,但我真的不知道该怎么做。我已经浏览了 matlab 中的可用示例,但找不到任何合适的函数或示例来执行此操作。
我知道如果我的分类器没有经过交叉验证,我可以使用 "predict" 函数来预测我的测试数据的类标签。代码如下:
X = Dataset2(1:50000,:); % Use some data for fitting
Y = Training_Label(1:50000,:); % Response of training data
%Create a KNN Classifier model
rng(10); % For reproducibility
Mdl = fitcknn(X,Y,'Distance', 'Cosine', 'Exponent', '', 'NumNeighbors', 10,'DistanceWeight', 'Equal', 'StandardizeData', 1);
%Classification using Test Data
Classifier_Output_Labels = predict(Mdl,TestDataset2(1:5000,:));
但我找不到任何类似的功能(如 "predict")用于交叉验证训练的 knn 分类器。我在 Matlab 文档中找到了 "kfoldPredict" 函数,但它说该函数用于评估训练模型。
http://www.mathworks.com/help/stats/classificationpartitionedmodel.kfoldpredict.html 但是我没有找到通过这个函数输入的新数据。
那么谁能告诉我如何使用交叉验证的 knn 分类器模型来预测新数据的标签?任何帮助表示赞赏和急需。 :( :(
你似乎把这里的事情弄糊涂了。交叉验证是 模型选择和评估 的工具。这本身不是培训程序。因此,您不能 "use" 交叉验证对象。您使用 trained 对象进行预测。交叉验证是一种估计给定模型泛化能力的形式,它与实际训练无关,而是一个评估特定 属性 的小型统计实验。
假设您在学习模型时正在进行 10 折交叉验证。然后,您可以使用 kfoldLoss 函数也获得每次折叠的 CV 损失,然后通过以下方式选择给您带来最少 CV 损失的训练模型:
modelLosses = kfoldLoss(Mdl,'mode','individual');
如果你在学习时做了10折交叉验证,上面的代码会给你一个长度为10的向量(10个CV误差值)。假设经过训练的 CV 误差最小的模型是第“k”个,那么您将使用:
testSetPredictions = predict(Mdl.Trained{k}, testSetFeatures);
我有一个训练数据集 (50000 X 16) 和测试数据集 (5000 X 16)[两个数据集中的第 16 列是决策标签或响应。测试数据集中的决策标签用于检查训练分类器的分类准确性]。我正在使用我的训练数据来训练和验证我的交叉验证 knn 分类器。我使用以下代码创建了一个交叉验证的 knn 分类器模型:
X = Dataset2(1:50000,:); % Use some data for fitting
Y = Training_Label(1:50000,:); % Response of training data
%Create a KNN Classifier model
rng(10); % For reproducibility
Mdl = fitcknn(X,Y,'Distance', 'Cosine', 'Exponent', '', 'NumNeighbors', 10,'DistanceWeight', 'Equal', 'StandardizeData', 1);
%Construct a cross-validated classifier from the model.
CVMdl = crossval(Mdl,'KFold', 10);
%Examine the cross-validation loss, which is the average loss of each cross-validation model when predicting on data that is not used for training.
kloss = kfoldLoss(CVMdl, 'LossFun', 'ClassifError')
% Compute validation accuracy
validationAccuracy = 1 - kloss;
现在我想使用这个经过交叉验证的 knn 分类器对我的测试数据进行分类,但我真的不知道该怎么做。我已经浏览了 matlab 中的可用示例,但找不到任何合适的函数或示例来执行此操作。
我知道如果我的分类器没有经过交叉验证,我可以使用 "predict" 函数来预测我的测试数据的类标签。代码如下:
X = Dataset2(1:50000,:); % Use some data for fitting
Y = Training_Label(1:50000,:); % Response of training data
%Create a KNN Classifier model
rng(10); % For reproducibility
Mdl = fitcknn(X,Y,'Distance', 'Cosine', 'Exponent', '', 'NumNeighbors', 10,'DistanceWeight', 'Equal', 'StandardizeData', 1);
%Classification using Test Data
Classifier_Output_Labels = predict(Mdl,TestDataset2(1:5000,:));
但我找不到任何类似的功能(如 "predict")用于交叉验证训练的 knn 分类器。我在 Matlab 文档中找到了 "kfoldPredict" 函数,但它说该函数用于评估训练模型。 http://www.mathworks.com/help/stats/classificationpartitionedmodel.kfoldpredict.html 但是我没有找到通过这个函数输入的新数据。
那么谁能告诉我如何使用交叉验证的 knn 分类器模型来预测新数据的标签?任何帮助表示赞赏和急需。 :( :(
你似乎把这里的事情弄糊涂了。交叉验证是 模型选择和评估 的工具。这本身不是培训程序。因此,您不能 "use" 交叉验证对象。您使用 trained 对象进行预测。交叉验证是一种估计给定模型泛化能力的形式,它与实际训练无关,而是一个评估特定 属性 的小型统计实验。
假设您在学习模型时正在进行 10 折交叉验证。然后,您可以使用 kfoldLoss 函数也获得每次折叠的 CV 损失,然后通过以下方式选择给您带来最少 CV 损失的训练模型:
modelLosses = kfoldLoss(Mdl,'mode','individual');
如果你在学习时做了10折交叉验证,上面的代码会给你一个长度为10的向量(10个CV误差值)。假设经过训练的 CV 误差最小的模型是第“k”个,那么您将使用:
testSetPredictions = predict(Mdl.Trained{k}, testSetFeatures);