2011-12-13 5 views
2

회귀율이 kernlab 인 사람 누구나 발생 했습니까? 그것은 어떤 스케일링 요인이나 무언가를 잃어 버리는 것처럼 보이지만, 아마도 나는 그것을 잘못하고 있다고 생각합니다. 내가 명시 적으로 newdata=df를 전달하면 내가 합리적인 결과를 얻을 수있는이 장난감 예와 kernlab 회귀

svm-results

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) 

,하지만 내 실제 데이터와 나는 그런 해결 방법을 발견했습니다. 어떤 통찰력?

답변

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"안 것을 추가해야합니다.

+0

버그 같은 것 같습니다. 스케일링은'newdata'가 암시 적인지 또는 명시 적인지에 의존해서는 안됩니다. –

+0

제 실제적으로 교차 검증을하고 있습니다. 그래서'newdata ='를 전달하여'predict()'결과를 얻습니다. –

+0

확실하지 않습니다. 확실히 가능하지만, 누군가가 기본적으로 실제로 모델에 무엇이 있는지에 대한 좋은 이유를 주장 할 수 있다고 상상해보십시오. –