Разкомпозирайте LinSVM модела в двоични класификатори

Имам многокласов .model, обучен с LibSVM. Има ли начин да разложа този модел на различни двоични .model? Например, ако имам .model, обучен за n класа, бих искал да има (n-1)/2 двоични класификатори разделени, защото доколкото знам LibSVM обучава един срещу един, за да получи многокласов класификатор.


person Jorge Nuricumbo    schedule 30.01.2014    source източник
comment
можете да тренирате n пъти двоични модели, за да постигнете еквивалентен класификатор едно срещу всички. След обучението вие просто прогнозирате класа с най-голяма вероятност   -  person lennon310    schedule 31.01.2014


Отговори (1)


Накратко:давъзможно е

libsvm моделният файл е (повече или по-малко) конкатенация от n^2 подмодела:

Във файла на модела, след параметри и друга информация като етикети, всеки ред представлява опорен вектор. Поддържащите вектори са изброени в реда на "етикетите", показани по-рано. (т.е. тези от първия клас в списъка с етикети са групирани първи и т.н.) Ако k е общият брой класове, пред опорен вектор в клас j има k-1 коефициенти y* алфа, където алфа са двойно решение на следните два проблема от класа: 1 срещу j, 2 срещу j, ..., j-1 срещу j, j срещу j+1, j срещу j+2, ..., j срещу k и y=1 в първите j-1 коефициенти, y=-1 в останалите k-j коефициенти. Например, ако има 4 класа, файлът изглежда така:

+-+-+--------------------+
|1|1|                    |
|v|v|  SVs from class 1  |
|2|3|                    |
+-+-+--------------------+
|1|2|                    |
|v|v|  SVs from class 2  |
|2|3|                    |
+-+-+--------------------+
|1|2|                    |
|v|v|  SVs from class 3  |
|3|3|                    |
+-+-+--------------------+

Така че можете да го конвертирате (на ръка!) в отделни модели и да използвате всеки самостоятелно (или да свържете обратно, за да имате модел с подмножество от класове).

person lejlot    schedule 31.01.2014