Предположим, что у вас есть 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.
Чтобы продлить этот код вы должны реализовать один-все-все. Лучше было бы просто использовать 'templateSVM',' fitcecoc' и 'прогноз' последнего инструментария для статистического и машинного обучения; они имеют встроенную многофункциональную функциональность. – Adriaan
1-vs-1 - еще один возможный выбор. Это действительно поможет вам, если вы создадите 2 функции-обертки для решения проблемы двоичной классификации, один для обучения и один для тестирования. Покажите нам свой прогресс, и мы поможем вам больше. Btw, libsvm - очень мощная библиотека с простым интерфейсом matlab. –
@Adriaan: я использую matlab 2009b version.i хочу, чтобы khow wich версия matlab имеет эту функцию, которую вы мне сказали? можете ли вы привести меня к примеру мультикласса svm? –