2

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-结果

使用这个玩具示例,如果我明确通过,我可以获得合理的结果newdata=df,但是使用我的真实数据,我发现没有这样的解决方法。有什么见解吗?

4

1 回答 1

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数据框时,变量名称应该与您用于创建模型的名称相匹配,而不必是“x”。

于 2011-12-13T17:52:02.930 回答