关于 model.SVs 的 LIBSVM 输出

Posted

技术标签:

【中文标题】关于 model.SVs 的 LIBSVM 输出【英文标题】:LIBSVM output regarding model.SVs 【发布时间】:2014-01-14 19:20:51 【问题描述】:

我是 libsvm 的新手。我无法理解 libsvm 的输出。我只想知道如何找到所有支持向量的 alpha_i?参数model.sv_coef 是否提供alpha_ialpha_i*y_i?我想问的另一个主要问题是model.SVs 给出了什么?我在 matlab 中使用 libsvm,当我查找 model.SVs 时得到的输出是:

我的训练集是:

-1 1:0.747253 2:0.894737     
+1 1:0.692308 2:-0.824561     
-1 1:0.362637 2:0.789474     
+1 1:0.769231 2:-0.321637

我的测试集:

-1 1:-0.351648 2:-0.602339

+1 1:-0.21978 2:-0.263158



var1=model.sv_indices

>>var1 =

     2
     4
     3



model.SVs

>>ans =



(1,1)       2.0000    
(2,1)       4.0000    
(3,1)       3.0000   
(1,2)      -0.2204    
(2,2)       0.2870    
(3,2)       0.9774   
(1,3)       1.1592   
(2,3)       0.7978    
(3,3)      -0.3999   
(1,4)      -0.3999    
(2,4)       0.0250   
(3,4)       0.7548   
(1,5)       0.7978    
(2,5)       0.6952    
(3,5)       0.0250

这些 (1,1),(2,1),(3,1)... 是什么?我的意思是我只有 4 个训练集,那么第二个索引怎么会变成 5,只有两个测试集,那么第一个索引怎么会变成 3。

【问题讨论】:

【参考方案1】:

model.sv_coef包含所有alpha_i * y_imodel.SVs都是支持向量x_i。权重可以写成

w = model.SVs' * model.sv_coef;
b = -model.rho;

您可能不需要太关心 (1,2)、(1,3) 的标记...m.nSV 将为您提供每个类的支持向量的数量。由于您只有两个类,因此答案应该是一个2*1 向量,每一行代表相应类的支持向量编号。查看此document 了解更多详情。

【讨论】:

以上是关于关于 model.SVs 的 LIBSVM 输出的主要内容,如果未能解决你的问题,请参考以下文章

基于Libsvm的图像分类

使用 python 的 libsvm 支持具有高维输出的向量回归

基于Libsvm的图像分类

基于Libsvm的图像分类

libsvm 中的输出错误

抑制 libsvm (python) 中的输出