2016-04-15 8 views
0

Kann mir jemand mit "Sequencefs" helfen?Verwenden Sie sequentialfs mit SVM in Matlab

Ich kann es nicht mit den folgenden SVM-Funktionen verwenden. 'X' enthält die Merkmale für jede Beobachtung und 'y' enthält die Klassen jeder Beobachtung.

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

Wenn sequentialfs Ausführen der folgenden Fehler auftritt:

Die Funktion ‚Feature Subset Selection‘ der folgende Fehler generiert: Zu viele Eingabeargumente.

Hier mein Code:

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 

Dank!

Antwort

1

Ich hatte das gleiche Problem. Nach MATLAB Dokumentation:

sequentialfs performs 10-fold cross-validation by repeatedly calling fun with different training subsets of X and y, XTRAIN and ytrain, and test subsets of X and y, XTEST and ytest, as follows:

criterion = fun(XTRAIN,ytrain,XTEST,ytest)

Das bedeutet, dass Ihr Kriterium Funktion der Form folgen soll:

Ihre X-Daten zu XTRAIN und XTEST Subsets
function err=featureSelection(XTRAIN,ytrain,XTEST,yTest) 

solange sequentialfs wird standardmäßig trennen.

Unten ist ein Beispiel:

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)