2011-12-13 56 views
2

任何人都遇到这个难题kernlab回归?它似乎正在失去一些缩放因子或某种东西,但也许我把它称为错误的。kernlab回归

library(kernlab) 
df <- data.frame(x=seq(0,10,length.out=1000)) 
df$y <- 3*df$x + runif(1000) - 3 
plot(df) 
res <- ksvm(y ~ x, data=df, kernel='vanilladot') 
lines(df$x, predict(res), col='blue', lwd=2) 

svm-results

有了这个玩具的例子我能得到合理的结果,如果我明确地传递newdata=df,但我真实的数据,我发现没有这样的解决方法。任何见解?

回答

1

传递newdata参数是正确的做法(否则它将使用内部缩放数据,就像您看到的那样)。典型的方式是一样的东西:

newx = seq(min(df$x), max(df$x), len=100) 
lines(newx, predict(res, newdata=data.frame(x=newx)), col='blue', lwd=2) 

如果这仍然没有在你的真实数据的工作,请详细说明...

对于它的价值,我通常喜欢先手动缩放我的数据,然后设置scaled=F。这样你就不必担心这种会在不同时间出现的东西。

编辑:我还要补充一点,当你的newdata数据帧,变量名称应与你用什么来创建模型,而不一定是“×”。

+0

这似乎是一个错误,对吧?缩放比例不应取决于“newdata”是隐式的还是显式的。 –

+0

在我真正的任务中,我正在进行交叉验证,所以我通过'newdata ='来获得'predict()'结果。 –

+0

不确定。这绝对有可能,但我想有人可能会认为默认情况下绘制模型中实际内容的好理由。 –