2015-09-13 6 views
0

Я пишу код для 2 класса svm классификатора, и теперь я хочу продлить его на 4 класса.svm matlab code for 4 class

У меня есть 4 класса и некоторые данные для обучения и тестирования. Я пробовал много кодов MATLAB для этой классификации, но я не знал, как я могу расширить свой код для 4-го класса. Я должен делать эту работу с помощью Matlab, не любой программы, такой как LIbsvm или svmlight или labview ...

Пожалуйста, помогите мне в этом процессе.

trainingdata = mydata 
classes =[0;0;0;0;1;1;1;1;2;2;2;2;3;3;3;3] 
[train, test] = crossvalind('holdOut',classes); 
cp = classperf(classes); 
svmStruct = svmtrain(data(train,:),groups(train),... 
'showplot',true,'boxconstraint',1e6); 
classes = svmclassify(svmStruct,data(test,:),'showplot',true); 
classperf(cp,classes,test); 
+0

Чтобы продлить этот код вы должны реализовать один-все-все. Лучше было бы просто использовать 'templateSVM',' fitcecoc' и 'прогноз' последнего инструментария для статистического и машинного обучения; они имеют встроенную многофункциональную функциональность. – Adriaan

+0

1-vs-1 - еще один возможный выбор. Это действительно поможет вам, если вы создадите 2 функции-обертки для решения проблемы двоичной классификации, один для обучения и один для тестирования. Покажите нам свой прогресс, и мы поможем вам больше. Btw, libsvm - очень мощная библиотека с простым интерфейсом matlab. –

+0

@Adriaan: я использую matlab 2009b version.i хочу, чтобы khow wich версия matlab имеет эту функцию, которую вы мне сказали? можете ли вы привести меня к примеру мультикласса svm? –

ответ

0

Предположим, что у вас есть M-классы (M = 4 в вашем случае), обучениеData и trainingLabels. Есть два возможных варианта (как указано в комментариях): а) 1-против-всех б) 1-против-1

Так как вам нужно использовать только MatLab SVM, я бы рекомендовал 1 -vs-1. Причина в том, что функция svmclassify не возвращает оценки, а только предсказанный класс. Если вы обязательно хотите использовать 1-vs-all, вы можете увидеть это сообщение: How to find the score of a SVM classifier in MATLAB?

Ниже я полагаю, что вы продолжаете работу с 1-vs-1. Чтобы понять это, прочитать слайд 3 из этого: https://www.sec.in.tum.de/assets/lehre/ws0910/ml/slideslecture9.pdf

Короче говоря, это обучение:

Вы обучаете M * (M-1)/2 бинарных классификаторов SVM. В вашем случае это 6 классификаторов, сравнивающих классы 1-vs-2, 1-vs-3, 1-vs-4, 2-vs-3, 2-vs-4 и 3-vs-4. Обратите внимание, что вам не нужно тренироваться для 2-vs-1, так как он уже покрыт 1-vs-2. На этом этапе вам нужно будет подать функцию svmtrain правильными данными обучения и метками. Например, для обучения 1-vs-2 вам понадобятся только примеры и метки из этих двух классов.

Вам также необходимо сохранить полученные 6 классификаторов в хорошей структуре данных. Самым простым является multiModel {classA} {classB}.

Это испытание для неизвестного вектора запроса:

1) инициализации вектор голосования голосов = нули (М, 1); голосовать за каждый класс.

2) Вы классифицируете вектор запроса со всеми 6 бинарными классификаторами. Исходя из результатов, вы повышаете класс победы, голосов (winnerClassID) = голосов (winnerClassID) + 1; Например, предположим, вы получаете следующие двоичные результаты классификации: 1-против-2: 2 1-против-3: 1 1-против-4: 1 2-против-3: 2 2-VS- 4: 2 3-vs-4: 3 Голос векторов будет [2 3 1 0].

3) Класс максимальных голосов является окончательной предсказанной меткой для вектора запроса. В приведенном выше примере: поскольку класс 2 имеет максимальное количество голосов (3 голоса), результатом мультикласса svm является метка 2.

+0

Я пытаюсь применить изменения, которые вы мне рассказываете о них. Но я не могу прийти к правильному выводу. Можете ли вы рассказать мне больше об изменениях в коде? я нахожусь в спешке, и у меня мало времени, и у нас не будет никого, кто мог бы мне помочь. Пожалуйста, помогите мне, если сможете. –

+0

Я объяснил немного больше процедур обучения и тестирования. Я думаю, вы сможете легко его закодировать, просто прочитайте ответ еще раз и выполните шаги. –

0

LIBSVM и LIBLINEAR являются двумя популярными библиотеками обучения с открытым исходным кодом, разработанными на Национальный Тайваньский университет и оба написаны на C++, хотя с C API. LIBSVM реализует алгоритм SMO для ядровых векторных машин поддержки (SVM), поддерживающих классификацию и регрессию. Тем не менее, вы можете сделать их и в matlab, они дадут вам код mex, который мог бы классифицировать столько классов, сколько захотите. Вы можете скачать инструментарии снизу: https://github.com/cjlin1/libsvm http://www.csie.ntu.edu.tw/~cjlin/libsvm/

недавно я нашел новый метод DSVM, скачать и протестировать его с Elow ссылка: enter link description here