Реализация Sequentialfs - PullRequest
       13

Реализация Sequentialfs

0 голосов
/ 03 февраля 2012

Я пытаюсь реализовать sequentialfs для выбора функции. Я видел этот пост: Последовательный выбор функции Matlab

Пытался следовать примеру, приведенному в качестве решения для реализации.

My TrainVec - это матрица размером 268 x1475, тогда как TestVec - 116x1475, TestLabel - 116 x 1, TestLabel - 268 x 1.

код, который я реализовал, это

f = @(TrainVec,TrainLabel,TestVec,TestLabel) sum(TestLabel ~= predict_label); 
fs = sequentialfs(f,Vec,Label);

Я получаю ошибку:

??? Error using ==> crossval>evalFun at 505
The function
'@(TrainVec,TrainLabel,TestVec,TestLabel)sum(TestLabel~=predict_label)'
generated the following error:
Matrix dimensions must agree.

Error in ==> crossval>getFuncVal at 524
funResult = evalFun(funorStr,arg(:));

Error in ==> crossval at 363
    funResult = getFuncVal(1, nData, cvp, data, funorStr, []);

Error in ==> sequentialfs>callfun at 495
    funResult = crossval(fun,x,other_data{:},...

Я проверил все свои матрицы и убедился, что они имеют одинаковые размеры. Не уверен, что не так. Нужно некоторое руководство. Ошибка в ==> sequentialfs на 357 crit (k) = callfun (веселье, x, другие_данные, cv, mcreps);

1 Ответ

0 голосов
/ 03 февраля 2012

Я не уверен, что predict_label - это переменная или функция с нулевыми входными аргументами. Я предполагаю, что если это переменная, она не того же размера, что и TestLabel; и если это функция, она либо не возвращает что-то того же размера, что и TestLabel, либо имеет промежуточный расчет, который дает ошибку.

В любом случае, вы обычно хотели бы написать

f = @(TrainVec,TrainLabel,TestVec,TestLabel) sum(TestLabel ~= predict_label(TrainVec,TrainLabel,TestVec));

где predict_label - теперь функция, которая принимает ваши TrainVec и TrainLabel, строит модель, оценивает ее по TestVec и возвращает массив предсказанных меток того же размера, что и TestLabel.

...