Я знаю, что SVM - это двоичный классификатор. Я хотел бы расширить его до мультикласса SVM. Какой самый лучший и, возможно, самый простой способ это сделать?
код: в MATLAB
u=unique(TrainLabel);
N=length(u);
if(N>2)
itr=1;
classes=0;
while((classes~=1)&&(itr<=length(u)))
c1=(TrainLabel==u(itr));
newClass=double(c1);
tst = double((TestLabel == itr));
model = svmtrain(newClass, TrainVec, '-c 1 -g 0.00154');
[predict_label, accuracy, dec_values] = svmpredict(tst, TestVec, model);
itr=itr+1;
end
itr=itr-1;
end
Как это можно улучшить?
machine-learning
matlab
svm
multi-class
lakesh
источник
источник
classes
в коде? Это кажется бесполезным.Ответы:
Есть много методов для мультиклассовой классификации. Два классических варианта, которые не являются специфичными для SVM:
Классификация "все против всех" (OVA):
Предположим, у вас есть классы A, B, C и D. Вместо четырехсторонней классификации вы можете обучить четырем двоичным классификаторам: A против not-A, B против not-B , C против не-C, и D против не-D. Затем выберите положительный класс, который является «лучшим» (например, дальше от края на всех четырех участках). Если ни одна из классификаций не является положительной (т. Е. Все они не-X), выберите «противоположный» класс, который является наихудшим (например, ближайшим к краю).
Все-против-всего:
Обучите все возможные пары классификаций. Оцените классы по некоторому коэффициенту (например, количество выбранных раз) и выберите лучший.
То, что работает лучше всего, было спорным: у Дуана и Керти есть эмпирическое исследование, которое предлагает конкретный метод «все против всех», в то время как Рифкин и Клаутау приводят доводы в пользу схемы «один против всех». Существуют даже схемы, в которых вместо кодов самих меток изучаются коды с исправлением ошибок, описывающие метки классов.
Удачи!
Изменить: что вы действительно хотите, особенно для OVA, это апостериорная вероятность каждого класса. Для некоторых методов, таких как Наивный Байес, это тривиально. SVM обычно не дают вам вероятности, но есть способы их вычислить. См. Статью Джона Платта 1999 года "Вероятностные результаты для машин опорных векторов ..."
источник
Позвольте мне добавить, что есть работа по расширению SVM для нескольких классов (в отличие от методов, описанных Мэттом Краузе, которые разлагаются на несколько задач двоичной классификации). Одна важная работа: Об алгоритмической реализации многоклассовой векторной машины на основе ядра
источник