繁体   English   中英

得到线性SVM回归线的方程

[英]get equation of linear SVM regression line

在回归的情况下,我很难找到一种方法来获得线性SVM模型的方程,因为大多数问题都涉及分类......我已经适应了插入包。

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 + b x(这里mpg =?+?* hp ),其值为原始比例。

在此输入图像描述

2-多元

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

是的,我相信有。 看一下这个类似的答案 ,但不使用插入符号库。 如果将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')

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM