위도와 경도가 있으므로 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 –
예제가 저에게 적합합니다. –