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