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ます。そうすれば、さまざまな時期に発生する可能性があるこの種のことを心配する必要はありません.

EDITnewdataデータフレームを作成するとき、変数名はモデルの作成に使用したものと一致する必要があり、必ずしも「x」である必要はありません。

于 2011-12-13T17:52:02.930 に答える