使用MATLAB和libsvm绘制SVM边界

我正在使用svmlib对二维不可分数据进行线性分类。我能够使用svmlib训练SVM并获得w和b。利用这些信息,我可以绘制决策边界以及支持向量,但我不确定如何使用svmlib提供的信息来绘制边界。

以下是我的代码:

model = svmtrain(Y,X, '-s 0 -t 0 -c 100');w = model.SVs' * model.sv_coef;b = -model.rho;if (model.Label(1) == -1)    w = -w; b = -b;endy_hat = sign(w'*X' + b);sv = full(model.SVs);% plot support vectorsplot(sv(:,1),sv(:,2),'ko', 'MarkerSize', 10);% plot decision boundaryplot_x = linspace(min(X(:,1)), max(X(:,1)), 30);plot_y = (-1/w(2))*(w(1)*plot_x + b);plot(plot_x, plot_y, 'k-', 'LineWidth', 1)

回答:

这取决于你所说的“边界”是指什么。也取决于你讨论的是哪种SVM版本(可分还是不可分),但由于你提到了libsvm,我假设你指的是更一般的,不可分版本。

“边界”一词可以指从分离超平面到由wx+b=1(或wx+b=-1)定义的超平面的欧几里得距离。这个距离由1/norm(w)给出。

“边界”也可以指特定样本x的边界,即x与分离超平面的欧几里得距离。它由

(wx+b)/norm(w)

给出,注意这是一个带符号的距离,即根据点x位于超平面的哪一侧,它可能是负值或正值。你可以将其绘制为从点到超平面的垂直线。

另一个有趣的值是松弛变量xi,它是支持向量从由wx+b=+1(或-1)定义的“硬”边界的“代数”距离(不是欧几里得距离)。它仅对支持向量为正值,如果一个点不是支持向量,其xi等于0。更紧凑地表示为:

xi = max(0, 1 – y*(w’*x+b))

其中y是标签。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注