计算线性 SVM 模型的决策边界

机器算法验证 机器学习 支持向量机
2022-02-05 02:10:51

给定线性 SVM 的支持向量,我如何计算决策边界方程?

2个回答

Hastie 等人的《统计学习要素》有一章完整介绍了支持向量分类器和 SVM(在您的情况下,从第 2 版的第 418 页开始另一个很好的教程是R 中的支持向量机,作者 David Meyer。

除非我误解了您的问题,否则决策边界(或超平面)由xTβ+β0=0(和β=1, 和β0截距项),或者正如@ebony 所说的支持向量的线性组合。边距是2/β,继 Hastie 等人之后。符号。

来自kernlabksvm() R 包中的在线帮助,但另请参阅kernlab – An S4 Package for Kernel Methods in R,这是一个玩具示例:

set.seed(101)
x <- rbind(matrix(rnorm(120),,2),matrix(rnorm(120,mean=3),,2))
y <- matrix(c(rep(1,60),rep(-1,60)))
svp <- ksvm(x,y,type="C-svc")
plot(svp,data=x)

请注意,为了清楚起见,我们不考虑训练和测试样本。结果如下所示,其中颜色阴影有助于可视化拟合的决策值;0 附近的值在决策边界上。

替代文字

调用attributes(svp)为您提供可以访问的属性,例如

alpha(svp)  # support vectors whose indices may be 
            # found with alphaindex(svp)
b(svp)      # (negative) intercept 

因此,为了显示决策边界及其相应的边距,让我们尝试以下(在重新缩放的空间中),这在很大程度上受到了Jean-Philippe Vert不久前关于 SVM 的教程的启发:

plot(scale(x), col=y+2, pch=y+2, xlab="", ylab="")
w <- colSums(coef(svp)[[1]] * x[unlist(alphaindex(svp)),])
b <- b(svp)
abline(b/w[1],-w[2]/w[1])
abline((b+1)/w[1],-w[2]/w[1],lty=2)
abline((b-1)/w[1],-w[2]/w[1],lty=2)

这里是:

替代文字

它是支持向量的线性组合,其中系数由对应于这些支持向量的拉格朗日乘数给出。