我有一个使用LibSVM训练的多类.model。有没有办法将这个模型分解成不同的二进制.model ?,例如,如果我有一个针对n个类训练的.model,我想将(n-1)/ 2个二元分类器分开,因为据我所知LibSVM训练一对一,以获得多类分类器。
答案 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| | +-+-+--------------------+
所以你可以把它(手工!)转换成单独的模型并单独使用它们(或连接回来让模型包含类的子集)。