如何找到向量w,即垂直于分离平面的向量?
这就是我做的方式这里。如果我没记错的话,这是基于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的手册。
w
和bias
看起来像合理的值吗?你正在向svmtrain
传递哪些选项? - Richantearrayfun(@(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参数。 - Richantew
后面的 '
吗?因为 w
应该是一个列向量,而特征是行向量。顺便说一下,你能否更新一下 MATLAB R2016a 的演示?谢谢。 - Royi