我很难找到一种方法来获得回归情况下线性SVM模型的方程式,因为大多数问题都涉及分类...我已经将它与插入符号包相符。
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个因变量(mpg~hp+wt
)
谢谢,
答案 0 :(得分: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')