【问题标题】:Matlab libsvm - how to find the w coefficientsMatlab libsvm - 如何找到 w 系数
【发布时间】:2012-04-25 06:14:31
【问题描述】:

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

【问题讨论】:

  • 请给出解决方案,如何在JAVA中找到向量w?

标签: matlab svm libsvm


【解决方案1】:

这就是我的做法here。如果我没记错的话,这是基于 SVM 优化的dual form 的结果。

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

而且偏见是(我真的不记得为什么它是负面的):

bias = -model.rho;

然后进行分类(对于线性 SVM),对于具有 N 个实例和 M 个特征的 N×M 数据集“特征”,

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

如果内核不是线性的,那么这不会给你正确的答案。

有关更多信息,请参阅 libsvm 手册中的How could I generate the primal variable w of linear SVM?

【讨论】:

  • 我究竟如何使用这些来进行手动分类?我说的是 2 类案例。
  • 我已经编辑了我的问题来解释,虽然这样做没有任何意义......它将返回与[guess, acc, probs] = svmpredict(...);中的probs完全相同的结果。
  • 不,它并没有真正返回相同的结果,它只返回 -1s。我知道这没有任何意义,但我想确保它是正确的,然后我将简单地使用单独应用程序中的权重来“手动”进行分类,而无需明确执行任何 SVM 内容。非常感谢,这确实是我项目中的瓶颈。请您仔细检查一下,看看错误在哪里?
  • 它对我有用。你的模型训练正确吗?在对它们进行分类之前,wbias 看起来是否合理?您将哪些选项传递给svmtrain
  • 呼,明白了。有点复杂! 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) 是伽马参数。
猜你喜欢
  • 2014-05-09
  • 2014-05-12
  • 2012-12-17
  • 1970-01-01
  • 2012-12-06
  • 2013-03-11
  • 2012-01-23
  • 2015-05-28
  • 2013-04-19
相关资源
最近更新 更多