【问题标题】:How to reproduce predict.svm() in R when doing regression?进行回归时如何在 R 中重现 predict.svm()?
【发布时间】:2014-07-24 21:45:23
【问题描述】:

我在 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{\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]

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

谢谢,
玛塔

【问题讨论】:

    标签: r regression svm predict


    【解决方案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]
    

    【讨论】:

    • 您好,您知道如何对多变量数据执行此操作吗?我用具有多个特征的数据尝试了这种方法,结果不同。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    • 2016-01-17
    • 2017-02-12
    • 2021-12-26
    • 1970-01-01
    相关资源
    最近更新 更多