2015-12-18 2 views
3

Я пытаюсь выполнить кросс-валидацию на своих моделях с несколькими классификационными классами, но при попытке обновить свой classperf при каждой смене я получаю ошибки. Я получаю эту ошибку «Индексный вектор имеет недопустимые значения».Ошибка перекрестной проверки Matlab при вычислении производительности модели

Мой код, как показано ниже:

K = 5; 
N = size(DataSet, 1); 
idx = crossvalind('Kfold', N, K); 
cp = classperf(trainLabel); 
for i = 1:K 
    ... 
    %Long codes for svmtrain & svmclassify 
    ... 
    cp = classperf(cp, Group, trueTestLabel); %error on this line 
end 
cp.CorrectRate 

где trainLabel является 120 х 1 двойными, состоящим из нот приземной истинности для всех элементов; Группа - это результаты, полученные от svmclassify в 20 x 1 double; и trueTestLabel является оценкой приземной истины для класса тестирования в 20 х 1 двойной форме, полученных с использованием следующей функции:

trueTestLabel = trainLabel(idx == i, end); 

Я попытался преобразовать «Группу» и «trueTestLabel» в клетки с помощью num2cell функции как таковые :

cp = classperf(cp, num2cell(Group), num2cell(trueTestLabel)); 

, но вместо этого, я получил другую ошибку, говоря «Когда класс метка объекта CP являются числовой, выходом классификатора должен быть все неотрицательными целыми числами или Нэн.»

ответ

0

Я нашел решение своей проблемы. По-видимому, после прочтения документации по classperf несколько раз, я обнаружил, что проблема заключается в моем «testidx» из функции

classperf(CP, classout, testidx); 

, где ранее я использовал

cp = classperf(cp, Group, trueTestLabel); 

и trueTestLabel является наземным оценка истины для тестового класса в 20 х 1 двойной форме. В основном, из документации, в нем говорится, что testidx - это наблюдения, которые использовались в текущей проверке вместо фактического балла по наземной истине модели.

Я понял документацию без проблем и, таким образом, столкнулся с проблемой, упомянутой выше. Я установил его, изменив линию на

cp = classperf(cp, Group, idx == i); 

и он работает сейчас. Пожалуйста, поправьте меня, если я все еще использую неправильный подход. Благодарю.

Смежные вопросы