Разложить модель 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* alpha, где alpha — двойственное решение следующих задач двух классов: 1 vs j, 2 vs j, ..., j-1 vs j, j vs j+1, j vs j+2, ..., j vs 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