如何在进行回归时在R中重现predict.svm()?

时间:2014-06-04 09:46:01

标签: r regression svm predict

我使用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]

有人可以解释这出错的地方和/或推荐有关该主题的文献吗?

谢谢,
玛塔

1 个答案:

答案 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]