Используйте 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)