0

我正在使用 libsvm 进行文档分类。我在我的项目中使用 svm.cc 和 svm.h。然后我调用 svm_train。我使用 svm_save_model 将模型保存在一个文件中。

我有类别。svm 模型文件为:

svm_type c_svc
kernel_type rbf
gamma 0.001002
nr_class 3
total_sv 9
rho -0.000766337 0.00314423 0.00387654
label 0 1 2
nr_sv 3 3 3
SV
1 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 是什么?

4

1 回答 1

2

从 libsvm 常见问题解答:

问:您能详细解释一下模型文件吗?

在模型文件中,在参数和标签等其他信息之后,每一行代表一个支持向量。支持向量按前面显示的“标签”顺序列出。(即“labels”列表中的第一个类首先分组,以此类推。)如果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 在剩余的 kj 个系数中。例如,如果有 4 个类,则文件如下所示:

 +-+-+-+--------------------+ 
 |1|1|1|                    | 
 |v|v|v|  SVs from class 1  | 
 |2|3|4|                    |
 +-+-+-+--------------------+ 
 |1|2|2|                    | 
 |v|v|v|  SVs from class 2  | 
 |2|3|4|                    |
 +-+-+-+--------------------+ 
 |1|2|3|                    | 
 |v|v|v|  SVs from class 3  | 
 |3|3|4|                    |
 +-+-+-+--------------------+ 
 |1|2|3|                    | 
 |v|v|v|  SVs from class 4  | 
 |4|4|4|                    |
 +-+-+-+--------------------+                            

http://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html#f402

于 2013-08-14T05:33:20.183 回答