交叉分类器在 MATLAB 中显示输出



我有一个简单的问题,我对 matlab 不是很熟悉。 所以代码;)会很有帮助。我确实有一个 KNN 分类器,我想通过交叉验证进行评估。我的代码如下所示:

load ds
train_data= trainData';
train_target=trainLabels;
Num=size(3,3);
Smooth=0.2;
nfold=10

indices = crossvalind('Kfold',train_target,10);
for i = 1:nfold
    test = (indices == i); train = ~test;
    [Prior,PriorN,Cond,CondN]=KNNtr(train_data(train,:),train_target(train,:),Num,Smooth);
    [HammingLoss,RankingLoss,OneError,Coverage,Average_Precision,Outputs,Pre_Labels] = KNNte(train_data(train,:),train_target(train,:),train_data(test,:),train_target(test,:),Num,Prior,PriorN,Cond,CondN);
end

我的输入数据是标签 10000*1 和training_data 128*10000。现在,当我运行该程序时,它会产生 1000*1 Pre_Labels 或其他输出。我想这是因为我只显示了 1 折。我想要的只是以有序的结构显示所有折叠的所有输出。我必须如何更改我的代码才能实现此目的?

谢谢!!这是一个很大的帮助

也许PreLabel中的值一次又一次地被重写,因为你没有将其定义为数组。将 PreLabel 定义为类似于 PreLabel(i) 的数组,以便它可以存储不同折叠的值。同样,如果您需要每个折叠的其他变量的值,请将它们也定义为数组

for i = 1:nfold
test = (indices == i); train = ~test;
[Prior,PriorN,Cond,CondN]=KNNtr(train_data(train,:),train_target(train,:),Num,Smooth);
[HammingLoss(i),RankingLoss(i),OneError(i),Coverage(i),Average_Precision(i),Outputs(i),Pre_Labels(1)] = KNNte(train_data(train,:),train_target(train,:),train_data(test,:),train_target(test,:),Num,Prior,PriorN,Cond,CondN);
end

最新更新