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

问题描述 投票:0回答:2

我在 R 中使用 eps 回归和 e1017 包中的径向内核训练了一个 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{ lpha}_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]

有人可以解释这是哪里出了问题和/或推荐有关该主题的文献吗?

谢谢,
玛尔塔

r regression svm predict
2个回答
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]

-2
投票

很好的例子,当我们不需要缩放输入时。当 y(x) 是指数函数 >1(例如 y(x)= x^2)时,SVM 回归需要对 x 数据进行缩放(居中和缩放)以获得更好的结果。当scale 参数设置为 TRUE?一直在尝试负面结果..

© www.soinside.com 2019 - 2024. All rights reserved.