Phân kỳ Kullback-Leibler được định nghĩa là
để tính toán (ước tính) điều này từ dữ liệu thực nghiệm chúng ta sẽ cần, có thể, một số ước tính của các hàm mật độ . Vì vậy, một điểm khởi đầu tự nhiên có thể thông qua ước tính mật độ (và sau đó, chỉ là tích hợp số). Làm thế nào tốt hay ổn định một phương pháp như vậy tôi sẽ không biết.
KL(P||Q)=∫∞−∞p(x)logp(x)q(x)dx
p(x),q(x)
Nhưng trước tiên là câu hỏi thứ hai của bạn, sau đó tôi sẽ trở lại câu hỏi đầu tiên. Hãy nói rằng và có mật độ đồng đều trên và . Sau đó, trong khi khó xác định hơn, nhưng giá trị hợp lý duy nhất để cung cấp cho nó là , theo như tôi có thể thấy, vì nó liên quan tích hợp mà chúng ta có thể chọn để diễn giải là . Kết quả này là hợp lý từ cách giải thích mà tôi đưa ra trong Trực giác về sự khác biệt của Kullback-Leibler (KL)pq[0,1][0,10]KL(p||q)=log10KL(q||p)∞log(1/0)log∞
Trở lại câu hỏi chính. Nó được hỏi theo một cách rất không tham số, và không có giả định nào được nêu về mật độ. Có lẽ một số giả định là cần thiết. Nhưng giả sử hai mật độ được đề xuất là mô hình cạnh tranh cho cùng một hiện tượng, có lẽ chúng ta có thể giả sử chúng có cùng một biện pháp thống trị: phân kỳ KL giữa phân phối xác suất liên tục và rời rạc sẽ luôn là vô hạn. Một bài viết giải quyết câu hỏi này như sau: https://pdfs.semanticscholar.org/1fbd/31b690e078ce938f73f14462fceadc2748bf.pdf Họ đề xuất một phương pháp không cần ước tính mật độ sơ bộ và phân tích các thuộc tính của nó.
(Có nhiều giấy tờ khác). Tôi sẽ trở lại và đăng một số chi tiết từ bài báo đó, những ý tưởng.
EDIT
Một số ý tưởng từ bài báo đó, đó là về ước tính phân kỳ KL với các mẫu iid từ các phân phối hoàn toàn liên tục. Tôi cho thấy đề xuất của họ cho các phân phối một chiều, nhưng họ cũng đưa ra một giải pháp cho các vectơ (sử dụng ước tính mật độ lân cận gần nhất). Đối với bằng chứng đọc giấy!
Họ đề xuất sử dụng một phiên bản của hàm phân phối theo kinh nghiệm, nhưng được nội suy tuyến tính giữa các điểm mẫu để có được một phiên bản liên tục. Họ định nghĩa
trong đó là hàm bước Heavyside, nhưng được xác định sao cho . Sau đó, hàm đó được nội suy tuyến tính (và mở rộng theo chiều ngang ngoài phạm vi) là ( cho liên tục). Sau đó, họ đề xuất ước tính phân kỳ Kullback-Leibler theo
trong đó và
Pe(x)=1n∑i=1nU(x−xi)
UU(0)=0.5PccD^(P∥Q)=1n∑i=1nlog(δPc(xi)δQc(xi))
δPc=Pc(xi)−Pc(xi−ϵ)ϵ là một số nhỏ hơn khoảng cách nhỏ nhất của các mẫu.
Mã R cho phiên bản của hàm phân phối theo kinh nghiệm mà chúng ta cần là
my.ecdf <- function(x) {
x <- sort(x)
x.u <- unique(x)
n <- length(x)
x.rle <- rle(x)$lengths
y <- (cumsum(x.rle)-0.5) / n
FUN <- approxfun(x.u, y, method="linear", yleft=0, yright=1,
rule=2)
FUN
}
lưu ý rằng rle
được sử dụng để chăm sóc các trường hợp với các bản sao trong x
.
Sau đó, ước tính của phân kỳ KL được đưa ra bởi
KL_est <- function(x, y) {
dx <- diff(sort(unique(x)))
dy <- diff(sort(unique(y)))
ex <- min(dx) ; ey <- min(dy)
e <- min(ex, ey)/2
n <- length(x)
P <- my.ecdf(x) ; Q <- my.ecdf(y)
KL <- sum( log( (P(x)-P(x-e))/(Q(x)-Q(x-e)))) / n
KL
}
Sau đó, tôi hiển thị một mô phỏng nhỏ:
KL <- replicate(1000, {x <- rnorm(100)
y <- rt(100, df=5)
KL_est(x, y)})
hist(KL, prob=TRUE)
đưa ra biểu đồ sau, hiển thị (ước tính) phân phối lấy mẫu của công cụ ước tính này:
Để so sánh, chúng tôi tính toán phân kỳ KL trong ví dụ này bằng tích hợp số:
LR <- function(x) dnorm(x,log=TRUE)-dt(x,5,log=TRUE)
100*integrate(function(x) dnorm(x)*LR(x),lower=-Inf,upper=Inf)$value
[1] 3.337668
hmm ... sự khác biệt đủ lớn để có nhiều điều ở đây để điều tra!