关于 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_i
或alpha_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_i
,model.SVs
都是支持向量x_i
。权重可以写成
w = model.SVs' * model.sv_coef;
b = -model.rho;
您可能不需要太关心 (1,2)、(1,3) 的标记...m.nSV
将为您提供每个类的支持向量的数量。由于您只有两个类,因此答案应该是一个2*1
向量,每一行代表相应类的支持向量编号。查看此document 了解更多详情。
【讨论】:
以上是关于关于 model.SVs 的 LIBSVM 输出的主要内容,如果未能解决你的问题,请参考以下文章