Tôi có vĩ độ và kinh độ, vì vậy tôi cần phải xác định lại hạt nhân RBF thành điểm kinh nghiệm (-1/2 || sophere distrance ||^2), có nghĩa là tôi cần tự viết lại hàm hạt nhân. Tôi viết hạt nhân của mình như sau:Làm thế nào để tùy chỉnh chức năng hạt nhân trong ksvm của gói kernlab?
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"
Tôi đã thử nghiệm hàm, hạt nhân phải chính xác. Nhưng với sự chỉ huy đào tạo sau tôi nhận được lỗi:
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.
Điều trickly hơn là, tôi đã cố gắng mã mẫu trong tài liệu ksvm:
k <- function(x,y) {(sum(x*y) +1)*exp(-0.001*sum((x-y)^2))}
class(k) <- "kernel"
Nhưng tôi nhận được các lỗi tương tự.
Bất kỳ ai biết cách xác định chính xác hàm hạt nhân?
Điều này thực sự hữu ích. Bạn có thể giải thích cách bạn bắt đầu hàm hạt nhân không? Tôi không thấy kết nối giữa điểm kinh nghiệm (-1/2 || khoảng cách hình cầu ||^2) và cách bạn hoàn thành 'res'. – momeara
@momeara, tôi nghĩ rằng nó cơ bản dựa trên các hàm tam giác, vì vậy có thể có nhiều cách để làm điều đó bằng cách sử dụng arctan, arcsin, hoặc ở đây như atan2. Kiểm tra liên kết này: http://www.movable-type.co.uk/scripts/latlong.html –
Ví dụ này phù hợp với tôi. –