将LibSVM模型分解为二进制分类器

时间:2014-01-30 18:45:44

标签: classification svm libsvm

我有一个使用LibSVM训练的多类.model。有没有办法将这个模型分解成不同的二进制.model ?,例如,如果我有一个针对n个类训练的.model,我想将(n-1)/ 2个二元分类器分开,因为据我所知LibSVM训练一对一,以获得多类分类器。

1 个答案:

答案 0 :(得分:0)

简而言之:,有可能

libsvm model file is(或多或少)连接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 in   剩余的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|                    |
+-+-+--------------------+

所以你可以把它(手工!)转换成单独的模型并单独使用它们(或连接回来让模型包含类的子集)。