Проблемы с путаницей классификатора SVM - PullRequest
0 голосов
/ 12 декабря 2018

Это мой код:

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 предсказывает значения.Как вы предсказываете значения, которых изначально не было?

...