我使用eps-regression和e1017包中的径向内核在R中训练了一个svm模型。我可以在使用函数predict()时对新的观察结果做出预测,但我有兴趣在R环境之外再现它。为此,我需要知道R如何预测新的观察结果。
有一个例子说明如何在使用svm进行分类(here)时这样做,但由于预测函数具有不同的公式,它在进行回归时不起作用: 在分类的情况下,预测函数由
给出$\hat{f}(x)= \sum^N_{i=1} \hat{\alpha}_i y_i K(x,x_i)+\hat{\beta}_0 $,
其中$ y_i $已包含在m $ coefs
中而在回归的情况下,预测函数由
给出$\hat{f}(x)= \sum^N_{i=1} \hat{\alpha}_i K(x,x_i) $
根据Hastie,Tibshirani,Friedman(2001)的两个公式。
我还读过here \ hat {\ alpha} _i是支持向量,所以我尝试在预测函数中使用它们,而不是分类案例中使用的系数。
作为一个例子,可以使用:
library(e1071)
x <- seq(0.1, 5, by = 0.05)
y <- log(x) + rnorm(x, sd = 0.2)
m <- svm(y~x)
new <- predict(m, x)
k<-function(x,x1,gamma){
return(exp(-gamma*sum((x-x1)^2))) }
f<-function(x,m){
return(t(m$SV) %*% as.matrix(apply(m$SV,1,k,x,m$gamma))) }
my.predict<-function(m,x){
apply(x,1,f,m)}
x<-as.matrix(x)
my.predict(m,x)[1:10]
new[1:10]
有人可以解释这出错的地方和/或推荐有关该主题的文献吗?
谢谢,
玛塔
答案 0 :(得分:1)
以下是解决方案:
library(e1071)
x <- seq(0.1, 5, by = 0.05)
y <- log(x) + rnorm(x, sd = 0.2)
m <- svm(y~x,scale=F,kernel="radial")
k<-function(x,x1,gamma){
return(exp(-gamma*(x-x1)^2))
}
f<-function(x,m,xi){
return(apply(xi,1,function(z) t(m$coefs) %*% (k(m$SV,z,m$gamma))))
}
my.predict<-function(m,x,xi){
xi<-as.matrix(xi)
return(f(x,m,xi)-m$rho)
}
my.predict(m,x,x)[1:10]
new <- predict(m, x)
new[1:10]