регрессия Кернлаба - PullRequest
       17

регрессия Кернлаба

2 голосов
/ 13 декабря 2011

Кто-нибудь сталкивался с этой трудностью при 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

С этим игрушечным примером я могу получить разумные результаты, если я явноpass newdata=df, но с моими реальными данными я не нашел такого обходного пути.Любое понимание?

1 Ответ

1 голос
/ 13 декабря 2011

Передача аргумента 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.Таким образом, вам не нужно беспокоиться об этом типе вещей, которые могут возникать в разное время.

EDIT : я также должен добавить это, когда вы создаете кадр данных newdataимена переменных должны соответствовать тому, что вы использовали для создания модели, и не обязательно должны быть "x".

...