Matlab libsvm - 如何找到 w 系数

17

如何找到向量w,即垂直于分离平面的向量?


请给出解决方案,如何在JAVA中找到向量w? - Somnath Kadam
1个回答

20

这就是我做的方式这里。如果我没记错的话,这是基于SVM优化的对偶形式的工作原理。

model = svmtrain(...);
w = (model.sv_coef' * full(model.SVs));

而且偏差是负的(我不太记得为什么它是负的):

bias = -model.rho;

对于一个包含N个实例和M个特征的N-M数据集'features',要进行线性SVM分类:

predictions = sign(features * w' + bias);

如果核函数不是线性的,那么这个方法将无法给出正确的答案。

更多信息请参见如何生成线性支持向量机的原始变量w?,来自libsvm的手册。


不,它并没有真正返回相同的结果,它只返回-1。我知道这没有意义,但我想确保它是正确的,然后我将在一个单独的应用程序中使用权重来“手动”进行分类,而不需要显式执行任何SVM操作。非常感谢,这真的是我的项目瓶颈。你能否请再次检查一下并查看错误在哪里? - Trup
它对我而言有效。你的模型是否被正确地训练了?在使用它们进行分类之前,wbias看起来像合理的值吗?你正在向svmtrain传递哪些选项? - Richante
2
哎呀,终于搞定了。这有点复杂!arrayfun(@(i)a.svm.sv_coef' * exp(-a.svm.Parameters(4) .* sum((repmat(features(i, :), size(a.svm.SVs, 1), 1) - a.svm.SVs).^2, 2)) - a.svm.rho, 1:numel(labels))' 思路是对每个特征和支持向量运行核函数,然后乘以SV系数,最后加上偏差。Parameters(4)是gamma参数。 - Richante
如何在JAVA中找到向量w? - Somnath Kadam
应该删除 w 后面的 ' 吗?因为 w 应该是一个列向量,而特征是行向量。顺便说一下,你能否更新一下 MATLAB R2016a 的演示?谢谢。 - Royi
显示剩余11条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接