我有一个训练数据集(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中的可用示例,但找不到任何合适的函数或示例。
我知道如果我的分类器没有经过交叉验证,我可以使用“预测”功能来预测我的测试数据的类标签。代码如下:
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,:));
但我找不到任何类似的功能(如“预测”)用于交叉验证训练的knn分类器。我在Matlab文档中找到了“kfoldPredict”函数,但它说该函数用于评估训练模型。 http://www.mathworks.com/help/stats/classificationpartitionedmodel.kfoldpredict.html但我没有通过此功能找到任何新数据的输入。
那么有人可以告诉我如何使用交叉验证的knn分类器模型来预测新数据的标签吗?任何帮助都是值得赞赏和急需的。 :( :(
答案 0 :(得分:2)
假设您在学习模型时正在进行10倍交叉验证。然后,您可以使用kfoldLoss函数同时获得每次折叠的CV损失,然后选择训练有素的模型,以下列方式减少CV损失:
Regex
如果您在学习期间进行了10次交叉验证,上面的代码将为您提供长度为10(10个CV错误值)的向量。假设经过训练的模型具有最小的CV误差是第k个,那么您将使用:
SELECT pool_features as PF, close_date as CD, close_price as CP, category as CAT
FROM (SELECT close_date, close_price, pool_features,
CASE
WHEN pool_features[0] = 'no_pool' THEN 'No Pool'
WHEN pool_features[0] = 'private_pool' THEN 'Private Pool'
WHEN pool_features[0] = 'heated_pool' THEN 'Heated Pool'
ELSE 'No Pool'
END AS category
FROM dwellings.listings_oid
) as laundryData
WHERE close_date > '2016-04-01' AND close_price IS NOT NULL AND close_price < 1000000000
答案 1 :(得分:1)
你似乎在这里混淆了一些事情。交叉验证是模型选择和评估的工具。这不是训练程序本身。因此,您无法“使用”交叉验证的对象。您预测使用经过培训的对象。交叉验证是估计给定模型的泛化能力的一种形式,它与实际训练无关,而是评估特定属性的小型统计实验。