私は緯度と経度を持っているので、RBFカーネルをexp(-1/2 || sophere distrance ||^2)に再定義する必要があります。これは自分自身でカーネル関数を書き直す必要があることを意味します。 次のように私は私のカーネルを書く:私は機能をテストしkernlabパッケージのksvmでカーネル機能をカスタマイズするには?
round.kernel <- function(x,y){
sigma <- 1
#R <- 6371
R <- 1
a <- (sin((x[1]-y[1])/2))^2+cos(x[1])*cos(y[1])*(sin((x[2]-y[2])/2))^2
c <- 2*atan2(sqrt(a),sqrt(1-a))
d <- R*c
res <- exp(-d^2/(2*sigma))
return (res)
}
class(round.kernel) <- "kernel"
、カーネルは正しいはずです。しかし、次のトレーニングのコマンドを使用して、私はエラーを取得しています:
fit <- ksvm(y=train[,2],x=train[,3:4],kernel=round.kernel,type='eps-svr')
Error in .local(x, ...) :
List interface supports only the stringdot kernel.
よりtrickly事があり、私はksvmドキュメント内のサンプル・コードを試みた:
k <- function(x,y) {(sum(x*y) +1)*exp(-0.001*sum((x-y)^2))}
class(k) <- "kernel"
をしかし、私は同じエラーを取得しています。
カーネル関数を正しく定義する方法は誰でも知っていますか?
これは本当に役に立ちます。カーネル関数の導出方法を説明できますか?私はexp(-1/2 || sphere distnace ||^2)と 'res 'をどのように完成させるかの関係は見ません。 – momeara
@momeara、私はそれが基本的に三角関数に基づいていると思うので、arctan、arcsin、またはatan2のようなものを使ってそれを行うには複数の方法があります。このリンクをチェックしてください:http://www.movable-type.co.uk/scripts/latlong.html –
この例は私のために働いています。 –