通过 StompChicken 的更正(我错误地计算了一个点积,呃!),答案似乎是肯定的。此后,我使用预先计算的内核测试了相同的问题,并得到了相同的正确结果。如果您清楚地使用 libsvm StompChickens,那么有组织的计算是一个非常好的检查。
原始问题: 我即将开始在 libSVM 中使用预计算内核。我注意到 Vlad 对问题的回答,我认为确认 libsvm 给出了正确的答案是明智的。我从非预计算内核开始,只是一个简单的线性内核,在 3 维空间中有 2 个类和三个数据点。我用了数据
1 1:3 2:1 3:0
2 1:3 2:3 3:1
1 1:7 3:9
调用生成的模型文件svm-train -s 0 - t 0
包含
svm_type c_svc
kernel_type linear
nr_class 2
total_sv 3
rho -1.53951
label 1 2
nr_sv 2 1
SV
0.4126650675419768 1:3 2:1 3:0
0.03174528241667363 1:7 3:9
-0.4444103499586504 1:3 2:3 3:1
但是,当我手动计算解决方案时,这不是我得到的。有谁知道 libsvm 是否存在错误,或者任何人都可以比较笔记,看看他们是否得到了与 libsvm 相同的东西?
libsvm 返回的系数a1
, a2
,a3
应该是使
a1 + a2 + a3 - 5*a1*a1 + 12*a1*a2 - 21*a1*a3 - 19*a2*a2/2 + 21*a2*a3 - 65*a3*a3
尽可能大,
a1 + a3 = a2
并且每个a1
, a2
,a3
都必须位于 0 和 1 之间(C 的默认值)。
上面的模型文件说答案是
a1 = .412665...
a2 = .444410...
a3 = .031745...
但是只需代a2 = a1 + a3
入上面的大公式并确认两个偏导数都为零,以查看该解是否正确(因为a1
, a2
,都不a3
是 0 或 1)但它们不为零。
我做错了什么,还是 libsvm 给出了不好的结果?(我希望我做错了什么。)