2014-01-30 27 views
0

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

+0

您可以训练n次二进制模型来实现等效的一对一分类器。训练之后,您只需以最高的概率预测课程 – lennon310

回答

0

简而言之:,能够

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对于第一个j-1个系数中的y和y = 1,y = -1中的其余kj个系数。例如,如果有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|     | 
+-+-+--------------------+ 

所以,你可以将它转换(用手!)成独立的模型,并单独使用每张(或连接回有一个模型类的子集)。