Найкращий спосіб виконати багатокласний 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. Класифікація "Один проти всіх" (ОВА):
    Припустимо, у вас класи A, B, C та D. Замість того, щоб робити чотиристоронні класифікації, підготуйте чотири двійкові класифікатори: A проти не-A, B проти не-B , C проти не-C, і D проти не-D. Потім виберіть будь-який позитивний клас, який є "найкращим" (наприклад, найдаліший від поля на всіх чотирьох пробігах). Якщо жодна з класифікацій не є позитивною (тобто всі вони не є X), виберіть «протилежний» клас, який є найгіршим (наприклад, найближчим до поля).

  2. Усі проти всіх:
    Тренуйте всі можливі пари класифікацій. Класуйте класи за деяким фактором (наприклад, кількість вибраних разів) та виберіть найкращий.

Найкраще, що найкраще працює, було суперечливим: Дуан та Керті провели емпіричне дослідження, яке передбачає конкретний метод "все проти всіх", тоді як Ріфкін і Клаутау стверджують, що існує схема "проти всіх". Існують навіть схеми, де замість самих міток навчаються коди з виправленням помилок, що описують мітки класу.

Удачі!

Редагувати: Чому ви дійсно хочете, особливо для OVA, це задня ймовірність кожного класу. Для деяких методів, як, наприклад, Наївний Байєс, це неприємно. SVM, як правило, не надають вам ймовірностей, але існують способи їх обчислення. Дивіться статтю Джона Платта 1999 року "Імовірнісні результати для векторних машин підтримки ..."


2
Для OVA - чи можете ви вибрати клас, який має найбільшу ймовірність (викликаний масштабом Платта)?
B_Miner

1
Так, це в основному підсумок папери Дуана та Керті. Вони поєднують ймовірності Платта з трюком попарного з’єднання Хасті і отримують хороші результати. Я, мабуть, повинен редагувати текст, щоб включити його. Гарний улов B_Miner!
Метт Крауз

у SVM, чи потрібно вам голосувати чи об'єднувати підсумки?
озеро

@lakesh, One-vs-all або All-vs-все схожі на схеми голосування. Якщо ви використовуєте набір двійкових класифікаторів, вам потрібно щось зробити, щоб перетворити їх на багатокласовий класифікатор. Крім того, ви можете використовувати модифікований SVM, описаний carlosdc нижче ...
Matt Krause

що це щось?
озеро

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.