Kernel-Smoothing

多維核密度估計的有效評估

  • April 24, 2014

在計算內核密度估計時,我已經看到了大量關於如何選擇內核和帶寬的文獻,但我目前對如何縮短在任意數量的點上評估生成的 KDE 所花費的時間感興趣。

就我而言,我使用的是具有對角協方差的多維(2D 或 3D)高斯核(即每個維度都是獨立的)。每個維度的帶寬可能不同,並使用最近的鄰居進行選擇。但是,我的問題可能延伸到不同的內核和帶寬選擇方法。

假設我有數據點,並希望在網格點。一個簡單的實現涉及評估多元正態 pdf次。為了我的目的,和兩者都在數千個數量級,並且評估已成為我代碼中的瓶頸。

我不知道這種基本方法是否有任何普遍接受的改進。我找到了這篇論文,它聲稱可以降低複雜性到. 但是,該方法尚未在我所知道的任何“標準”R 或 Python 庫中實現——這表明它尚未被廣泛採用?

感謝您提供的任何指示。

我將在這裡提供一個(不完整的)答案,以防它幫助其他人。

  1. 最近有幾種數學方法可以更有效地計算 KDE。一個是快速高斯變換,發表在包括這一項在內的幾項研究中。另一種是使用基於樹的方法(KD 樹或球樹)來計算出哪些源對給定的網格點有貢獻。不清楚這是否已經發布,但它是在 Scikit-learn 中實現的,並且基於Jake Vanderplas開發的方法。
  2. 如果這些方法有點繁瑣,則可以編寫一些更基本的東西來完成類似的任務。我嘗試在每個網格點周圍構建一個長方體,邊長與每個維度的帶寬相關。這不允許對錯誤進行很好的控制,儘管它確實可以加快速度。
  3. 最後,計算 KDE 非常容易並行化,無論是在多個 CPU 內核上還是在 GPU 上。我正在考慮在 CUDA 中實現 KDE,但還沒有這樣做。

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

comments powered by Disqus

相關問答