Лучший способ выполнить мультикласс SVM


18

Я знаю, что 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

Как это можно улучшить?


Что делает переменная classes в коде? Это кажется бесполезным.

ты пришел к какому-либо заключению? У меня есть эта проблема с моей работой. Если вы достигли подходящего результата, пожалуйста, поделитесь своим кодом мультиклассификации здесь. Спасибо.
me.rasouli

Ответы:


16

Есть много методов для мультиклассовой классификации. Два классических варианта, которые не являются специфичными для SVM:

  1. Классификация "все против всех" (OVA):
    Предположим, у вас есть классы A, B, C и D. Вместо четырехсторонней классификации вы можете обучить четырем двоичным классификаторам: A против not-A, B против not-B , C против не-C, и D против не-D. Затем выберите положительный класс, который является «лучшим» (например, дальше от края на всех четырех участках). Если ни одна из классификаций не является положительной (т. Е. Все они не-X), выберите «противоположный» класс, который является наихудшим (например, ближайшим к краю).

  2. Все-против-всего:
    Обучите все возможные пары классификаций. Оцените классы по некоторому коэффициенту (например, количество выбранных раз) и выберите лучший.

То, что работает лучше всего, было спорным: у Дуана и Керти есть эмпирическое исследование, которое предлагает конкретный метод «все против всех», в то время как Рифкин и Клаутау приводят доводы в пользу схемы «один против всех». Существуют даже схемы, в которых вместо кодов самих меток изучаются коды с исправлением ошибок, описывающие метки классов.

Удачи!

Изменить: что вы действительно хотите, особенно для OVA, это апостериорная вероятность каждого класса. Для некоторых методов, таких как Наивный Байес, это тривиально. SVM обычно не дают вам вероятности, но есть способы их вычислить. См. Статью Джона Платта 1999 года "Вероятностные результаты для машин опорных векторов ..."


2
Для OVA - можете ли вы выбрать класс с наибольшей вероятностью (вызванный масштабированием по Платту)?
B_Miner

1
Да, это в основном результат работы газеты «Дуань и Керти». Они сочетают в себе вероятности Платт с парным приемом Хасти и получают хорошие результаты. Я должен вероятно отредактировать текст, чтобы включить это. Хороший улов B_Miner!
Мэтт Краузе

в SVM, вам нужно сделать голосование или суммирование?
Lakesh

@lakesh, One-vs-all или All-vs-all похожи на схемы голосования. Если вы используете набор двоичных классификаторов, вам нужно что- то сделать, чтобы превратить их в мультиклассовый классификатор. Кроме того, вы можете использовать модифицированный SVM, описанный carlosdc ниже ...
Мэтт Краузе

что это такое?
Lakesh

6

Позвольте мне добавить, что есть работа по расширению SVM для нескольких классов (в отличие от методов, описанных Мэттом Краузе, которые разлагаются на несколько задач двоичной классификации). Одна важная работа: Об алгоритмической реализации многоклассовой векторной машины на основе ядра

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.