我在使用libsvm进行文档分类。我在项目中使用了svm.cc和svm.h文件。然后我调用了svm_train。我使用svm_save_model将模型保存到文件中。
我有三个类别。svm模型文件如下:
svm_type c_svckernel_type rbfgamma 0.001002nr_class 3total_sv 9rho -0.000766337 0.00314423 0.00387654label 0 1 2nr_sv 3 3 3SV1 1 1:0.001 2:0.001 3:0.012521912 5:0.001 15:0.012521912 17:0.012521912 23:0.001 1 1 1:0.001 2:0.014176543 4:0.093235799 6:0.001 7:0.0058630699 9:0.040529628 10:0.001 1 1 11:0.38863495 33:0.08295242 46:0.041749886 58:0.08295242 89:0.08295242 127:0.15338862 -1 1 5:0.001 8:0.0565 10:0.001 13:0.001 18:0.0565 21:0.021483399 34:0.12453384 36:0.001 -1 1 13:0.034959612 34:0.090130132 36:0.034959612 45:0.034959612 47:0.12019824 -1 1 5:0.001 8:0.048037273 13:0.001 18:0.048037273 29:0.14715472 30:0.018360058 36:0.001 -1 -1 9:0.0049328688 12:0.090902344 18:0.1156038 27:0.0049328688 31:0.015144206
在以index:value形式的向量值之前的1和-1是什么意思?
回答:
来自libsvm常见问题解答:
问:你能详细解释一下模型文件吗?
在模型文件中,参数和其他信息如标签之后,每一行代表一个支持向量。支持向量按照之前显示的“标签”顺序排列。(即,属于“标签”列表中第一个类别的支持向量首先被分组,依此类推。)如果k是类别的总数,在类别j的一个支持向量前,有k-1个系数y*alpha,其中alpha是以下两个类别问题(1对j,2对j,…,j-1对j,j对j+1,j对j+2,…,j对k)的对偶解,并且在前j-1个系数中y=1,在剩余的k-j个系数中y=-1。例如,如果有4个类别,文件看起来像这样:
+-+-+-+--------------------+ |1|1|1| | |v|v|v| 来自类别1的SVs | |2|3|4| | +-+-+-+--------------------+ |1|2|2| | |v|v|v| 来自类别2的SVs | |2|3|4| | +-+-+-+--------------------+ |1|2|3| | |v|v|v| 来自类别3的SVs | |3|3|4| | +-+-+-+--------------------+ |1|2|3| | |v|v|v| 来自类别4的SVs | |4|4|4| | +-+-+-+--------------------+