Мне нужно реализовать классификатор SVM, который распознает метки. Код такой:
function[Y_SVM_test] = getSVM(x,y,z, labels)
%matrix that contain x,y,z
X = [];
%vector of labels
Y = [];
X = [X; x y z];
Y = [Y; labels];
cv = cvpartition(length(X),'holdout',0.2);
% Training set
Xtrain = X(training(cv),:);
Ytrain = Y(training(cv));
% Test set
Xtest = X(test(cv),:);
Ytest = Y(test(cv));
tic
mySVM = fitcecoc(Xtrain,Ytrain);
toc
Y_SVM_test = predict(mySVM,Xtest);
end
С функцией fitcecoc выполнение никогда не заканчивается, я неправильно ее использовал? Я попытался использовать также функцию fitcsvm, которая кажется более конкретной из документации, но я получаю следующую ошибку: Error using ClassificationSVM.prepareData (line 686) You can not train an SVM model for more than 2 classes.
В общем, я не очень хорошо понял, как лучше всего запускать SVM в Matlab. Кто-нибудь может мне помочь?





Мне нравится твой код. Когда вы говорите, что это никогда не кончится, я предполагаю, что вы просто не ждали достаточно долго. Если ваш набор данных довольно большой, настройка модели SVM ECOC может занять много времени.
Использование fitcecoc - правильный способ соответствовать мультиклассовой модели SVM. Сами по себе SVM - это всего лишь двухклассная модель, которая оснащена fitcsvm. Чтобы поместиться в мультиклассовую модель, нужна оболочка. ECOC - это такая оболочка - что она делает, чтобы взять каждый класс и отдельно подогнать двухклассовую модель для этого класса ко всем остальным. Вот почему это может занять так много времени - он должен соответствовать нескольким моделям, по одной для каждого класса.
PS: вам не нужны X = [];, а затем X = [X; x y z];. Просто скажите X = [x y z], он имеет тот же эффект. Точно так же просто скажите Y = labels.