0

簡単な質問がありますが、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つしかないためだと思います。私が望むのは、すべての折り畳みのすべての出力を、順序付けられた構造で表示することだけです。これを実現するには、コードをどのように変更する必要がありますか?

どうもありがとうございました!!大変助かります

4

1 に答える 1

0

配列として定義していないため、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
于 2013-10-30T11:15:03.210 に答える