Я пытаюсь сделать выбор функции с помощью Matlab sequentialfs
, однако у меня возникает проблема для fun
, которую я определил следующим образом:
function err = fun(XT,yT,Xt,yt)
%XT: xtrain yT:label of training set(ytrain) Xt:xtest yt:ytest
rng(1);
model = svmtrain(XT,yT,'Kernel_Function', 'rbf', 'boxconstraint', 1);
err = sum(svmclassify(model, Xt) ~= yt);
end
, и я сохранил свойданные в массив ячеек, один для объектов (Xtrain
) и один для меток (Ytrain`), где
XT: Xtrain{1,1}, yT:Ytrain{1,1}, Xt:Xtrain{1,2}, yt:Ytrain{1,2}
в качестве примера на странице математических операций ,
c = cvpartition(y,'k',10);
opts = statset('display','iter');
fun = @(XT,yT,Xt,yt)...
(sum(~strcmp(yt,classify(Xt,XT,yT,'quadratic'))));
[fs,history] = sequentialfs(fun,X,y,'cv',c,'options',opts)
, даже когда я пытаюсь запустить предустановленные настройки Matlab, я получаю сообщение об ошибке:
Columns that can not be included: none
Step 1, added column 1, criterion value 3.04984e-05
Error using crossval>evalFun (line 480)
The function '@(XT,yT,Xt,yt)(sum(~strcmp(yt,classify(Xt,XT,yT,'quadratic'))))' generated the following error:
The covariance matrix of each group in TRAINING must be positive definite.
Error in crossval>getFuncVal (line 497)
funResult = evalFun(funorStr,arg(:));
Error in crossval (line 343)
funResult = getFuncVal(1, nData, cvp, data, funorStr, []);
Error in sequentialfs>callfun (line 485)
funResult = crossval(fun,x,other_data{:},...
Error in sequentialfs (line 353)
crit(k) = callfun(fun,x,other_data,cv,mcreps,ParOptions);
Error in feature_selection (line 11)
[fs,history] = sequentialfs(fun,X,y,'cv',c,'options',opts);
Я хочу выполнить перекрестную проверку в два раза (один поезд и один тест), Мойвопросы:
- Как мне установить
cvpartition
? - как настроить
sequentialfs
на использование определенной мной функции? - как вызвать функцию costomized
fun
, для которой установлен классификатор svm
?
Ваша помощь очень ценится