Estimation

兩個樣本的 Kullback-Leibler 散度

  • May 6, 2016

我試圖對兩個樣本的 Kullback-Leibler 散度進行數值估計。要調試實現,請從兩個正態分佈中抽取樣本和.

對於一個簡單的估計,我生成了兩個直方圖並嘗試在數值上逼近積分。我一直在處理直方圖的那些部分,其中一個直方圖的 bin 為零,這樣我要么最終除以零,要么對數為零。我該如何處理這個問題?

我想到了一個相關的問題:如何準確計算兩個不同均勻分佈之間的 KL-Divergence?我是否必須將積分限制為兩個發行版支持的聯合?

Kullback-Leibler 散度定義為

所以為了從經驗數據中計算(估計)這個,我們可能需要對密度函數的一些估計. 所以一個自然的起點可以是通過密度估計(然後,只是數值積分)。我不知道這種方法有多好或多穩定。 但首先是你的第二個問題,然後我會回到第一個問題。讓我們說和是均勻的密度和分別。然後儘管更難定義,但給出它的唯一合理值是,據我所知,因為它涉及整合我們可以選擇將其解釋為. 從我在 Kullback-Leibler (KL) Divergence的直覺中給出的解釋來看,這個結果是合理的

回到主要問題。它以非常非參數的方式提出,並且沒有對密度進行任何假設。可能需要一些假設。但是假設這兩種密度被提議作為同一現象的競爭模型,我們可能會假設它們具有相同的主導度量:例如,連續和離散概率分佈之間的 KL 散度總是無窮大。一篇解決這個問題的論文如下: https ://pdfs.semanticscholar.org/1fbd/31b690e078ce938f73f14462fceadc2748bf.pdf 他們提出了一種不需要初步密度估計的方法,並分析了它的特性。

(還有很多其他論文)。我會回來發布那篇論文的一些細節,這些想法。

EDIT               

該論文的一些想法是關於使用來自絕對連續分佈的 iid 樣本估計 KL 散度。我展示了他們對一維分佈的建議,但他們也給出了向量的解決方案(使用最近鄰密度估計)。如需校樣,請閱讀論文!

他們建議使用經驗分佈函數的版本,但在樣本點之間進行線性插值以獲得連續版本。他們定義

在哪裡是 Heavyside 階躍函數,但定義為. 然後該函數線性插值(並水平擴展超出範圍)是(為連續)。然後他們建議通過以下方式估計 Kullback-Leibler 散度

在哪裡和是一個小於樣本最小間距的數字。 我們需要的經驗分佈函數版本的 R 代碼是

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
}          

請注意,rle它用於處理x.

然後KL散度的估計由下式給出

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              
}

然後我展示了一個小模擬:

KL  <-  replicate(1000, {x  <-  rnorm(100)
                        y <- rt(100, df=5)
                        KL_est(x, y)})
hist(KL, prob=TRUE)

它給出了以下直方圖,顯示了該估計器的採樣分佈的(估計):

KL 估計量的抽樣分佈

為了比較,我們在這個例子中通過數值積分來計算 KL 散度:

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

嗯…差異足夠大,以至於這裡有很多需要調查的地方!

引用自:https://stats.stackexchange.com/questions/211175

comments powered by Disqus