得到线性SVM回归线方程

Posted

技术标签:

【中文标题】得到线性SVM回归线方程【英文标题】:get equation of linear SVM regression line 【发布时间】:2017-05-20 17:50:32 【问题描述】:

我正在努力寻找一种方法来获得回归案例中线性 SVM 模型的方程,因为大多数问题都涉及分类......我已经用 caret 包来拟合它。

1- 单变量情况

set.seed(1)
fit=train(mpg~hp, data=mtcars, method="svmLinear")
plot(x=mtcars$hp, y=predict(fit, mtcars), pch=15)
points(x=mtcars$hp, y=mtcars$mpg, col="red")
abline(lm(mpg~hp, mtcars), col="blue")

其中红色=实际,黑色=拟合,蓝线的情节是经典回归。在这种情况下,我知道我可以从 2 个点手动计算 SVM 预测线,但是有没有办法直接从模型结构中获取方程?我实际上需要像这样的等式 y=a+bx (此处为 mpg=?+?*hp )具有原始比例的值。

2-多元

同样的问题,但有 2 个因变量 (mpg~hp+wt) 谢谢,

【问题讨论】:

【参考方案1】:

是的,我相信有。看一下this answer,类似,但不使用插入符号库。如果您在示例中添加svp = fit$finalModel,您应该几乎可以完全按照它进行操作。我在下面的数据中应用了类似的技术。因为库在运行时缩放数据,所以我缩放数据以很好地适应向量图。

require(caret)

set.seed(1)
x = model.matrix(data=mtcars, mpg ~ scale(hp)) #set up data
y = mtcars$mpg

fit=train(x, y, method="svmLinear") #train

svp = fit$finalModel #extract s4 model object

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

还有你的第二个问题:

x = model.matrix(data=mtcars, mpg ~ scale(hp) + scale(wt) - 1) #set up data
fit=train(x, y, method="svmLinear") #train

svp = fit$finalModel #extract s4 model object

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

编辑

上述答案涉及绘制边界,而不是线性 SVM 回归线。要回答这个问题,获得直线的一种简单方法是提取预测值并绘制回归图。你实际上只需要几个点就可以得到这条线,但为了简单起见,我使用了以下代码。

abline(lm(predict(fit, newdata=mtcars) ~ mtcars$hp), col='green')

abline(lm(predict(fit) ~ mtcars$hp), col='green')

【讨论】:

好的@danielson 感谢您的输入虽然我还不满意,但我真正想要的是 y=a+bx (或 y=a +b.x1+c.x2 在第二种情况下)支持向量机回归线的方程,原始比例的 coef ......我可以呈现给客户的东西......(在你的回答中我没有了解我的第一个 2D 图如何变成没有 y.. 的 1-D 图?):-) 对不起。我想我误解了这个问题,因为我正在绘制决策边界。模型系数未存储在对象中,因此获得它的最快/最简单/最干净的方法是 summary(lm(predict(fit) ~ mtcars$hp)) 。您是否正在寻找一种直接从向量生成系数的方法? 好的,预测向量上的lm 是一个不错的技巧。没想到这个,谢谢这是我需要的。如果您愿意,可以将此添加到您的答案中,我接受它

以上是关于得到线性SVM回归线方程的主要内容,如果未能解决你的问题,请参考以下文章

机器学习之线性回归以及Logistic回归

线性回归方程是如何求得的?

一元线性回归方程的计算步骤

Coursera机器学习week7 笔记

CS231N-线性回归+svm多分类+softmax多分类

[ch05-01] 正规方程法解决多变量线性回归问题