У меня есть многоклассовая модель .model, обученная с помощью LibSVM. Есть ли способ разложить эту модель на разные двоичные .model? Например, если у меня есть .model, обученный для n классов, я хотел бы разделить (n-1)/2 двоичных классификатора, потому что, насколько я знаю LibSVM обучает один на один, чтобы получить мультиклассовый классификатор.
Разложить модель LinSVM на бинарные классификаторы
Ответы (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| | +-+-+--------------------+
Таким образом, вы можете преобразовать его (вручную!) в отдельные модели и использовать каждую из них независимо (или объединить обратно, чтобы получить модель с подмножеством классов).