Используйте sequentialfs с SVM в Matlab

Может кто-нибудь помочь мне с "sequentialfs "?

Я не могу использовать его со следующими функциями SVM. "X" содержит характеристики каждого наблюдения, а "y" - классы каждого наблюдения.

SVMModel = fitcsvm(X,Y);
predict(SVMModel, X);

При выполнении sequentialfs возникает следующая ошибка:

Функция featureSelection сгенерировала следующую ошибку: Слишком много входных аргументов.

Вот мой код:

fs = sequentialfs(@featureSelection,X,y)

function err=featureSelection(X,y)
    SVMModel = fitcsvm(X,y,'KernelFunction','gaussian', 'KernelScale','auto');
    err = 0;
    for i=1:size(X,1)
         err = err + (y(i) ~= predict(SVMModel,X(i,:)));
    end 
end

Спасибо!

1 ответ

У меня такая же проблема. Согласно документации MATLAB:

sequentialfs выполняет 10-кратную перекрестную проверку, многократно вызывая fun с различными обучающими подмножествами X и y, XTRAIN и ytrain, и проверяя подмножества X и y, XTEST и ytest следующим образом:

критерий = веселье (XTRAIN,ytrain,XTEST,ytest)

Это означает, что ваша целевая функция должна иметь вид:

function err=featureSelection(XTRAIN,ytrain,XTEST,yTest)

до тех пор, пока sequentialfs по умолчанию разделит ваши данные X на подмножества XTRAIN и XTEST.

Ниже приведен пример:

c = cvpartition(Labels,'Holdout',0.3);
opts = statset('display','iter');
classf = @(train_data,train_labels,test_data,test_labels) ...
       sum(predict(fitcsvm(train_data,train_labels,'KernelFunction','rbf'), test_data) ~= test_labels); 
[fs,history] = sequentialfs(classf,Data,Labels,'cv',c,'options',opts)
Другие вопросы по тегам