Это мой код:
num_classes = [1 2 4 5 11];
num_split = 5;
for i=1:num_split
current_train_data = ....;
current_train_labes = ....;
current_test_data = ....;
current_test_labes = ....;
SVMModels = cell(length(num_classes),1);
Scores = zeros(size(current_test_data,1),length(num_classes));
for j = 1:length(num_classes)
indx = current_train_labes==num_classes(1,j);
SVMModels{j} = fitcsvm(current_train_data,indx,'Standardize',true,'KernelFunction','RBF',...
'KernelScale','auto');
[~,score] = predict(SVMModels{j},current_test_data);
Scores(:,j) = score(:,2);
end
[~,predictions] = max(Scores,[],2);
results = predictions ==current_test_labes;
class_accuracy = [];
for l=1:length(num_classes)
true_positives = current_test_labes == num_classes(1,l);
class_accuracy = [class_accuracy; sum(predictions(true_positives) == num_classes(1,l))/size(labels_test{l,1},1)];
end
final_results{eva,1} = (sum(results))/size(current_test_labes,1);
final_results{eva,2} = mean(class_accuracy);
final_results{eva,3} = confusionmat(current_test_labes,predictions);
end
Но последний беспорядок также содержит столбец 3 и строку 3, которых там быть не должно.Зачем?строки и столбцы путаницы должны представлять числа, содержащиеся в num_classes
, и, следовательно, это должна быть матрица 5x5, однако на выходе получается матрица 6x6.Кроме того, третья строка состоит из всех значений в нуле, в то время как столбец 3 предсказывает значения.Как вы предсказываете значения, которых изначально не было?