【轉載】核密度估計 kernel density estimation

原文地址  https://lotabout.me/2018/kernel-density-estimation/

寫得非常棒!

 

有一些數據,想“看看”它長什麼樣,我們一般會畫直方圖(Histogram)。現在你也可以用核密度估計。

什麼是“核”

如果不瞭解背景,看到“核密度估計”這個概念基本上就是一臉懵逼。我們先說說這個核 (kernel) 是什麼。

首先,“核”在不同的語境下的含義是不同的,例如在模式識別裏,它的含義就和這裏不同。在“非參數估計”的語境下,“核”是一個函數,用來提供權重。例如高斯函數 (Gaussian) 就是一個常用的核函數。

讓我們舉個例子,假設我們現在想買房,錢不夠要找親戚朋友借,我們用一個數組來表示 5 個親戚的財產狀況:[8,2,5,6,4]

我們是中間這個數 5。“核”可以類比 成朋友圈,但不同的親戚朋友親疏有別,在借錢的時候,關係好的朋友出力多,關係不好的朋友出力少,於是我們可以用權重來表示。總共能到手的錢是:8\times 0.1+2\times 0.4+ 5+6 \times 0.3 + 4\times0.2=9.2 

那麼“核”的作用就是用來決定權重,例如高斯函數(即正態分佈):

 

如果還套用上面的例子的話,可以認爲在 3 代血親之外的親戚就基本不會借錢給你了。

最後呢,一般要求核函數有下面兩個性質:

  • 歸一化:  \int_{-\infty }^{+\infty}K(u)du = 1
  • 對稱性:對所有u要求K(-u) = K(u)

最後的最後: 一些常用的核(維基百科)

 

核密度估計

理解了“核”,核密度估計就容易理解了。

如果我們畫直方圖,其實目的是畫出“概率密度函數”,而直方圖本質上是認爲頻率等於概率。但這種假設不是必然的。核密度函數就是一種“平滑(smooth)”的手段。相當於是“我說我很牛逼你可能不信,但你可以聽聽我的朋友們是怎麼評價我的,加權平均下就能更好地瞭解我了”。於是乎:

(x_{1},x_{2},\cdots ,x_{n}) 是獨立同分布的 n個樣本點,它的概率密度函數是 f,於是我們的估計:

\hat{f_{h}}(x)=\tfrac{1}{n}\sum_{i=1}^{n}K_{h}(x-x_{i}) = \tfrac{1}{nh}\sum_{i=1}^{n}K(\tfrac{x-x_{i}}{h})

上面式子中 h是人爲指定的,代表“朋友圈”的大小,正式的叫法是“帶寬”(bandwidth) 。而x-x_{i} 就是自己與朋友的親疏程度,當然最後要正歸化到 [-1,1] 之間。下圖是直方圖和核密度估計的一個對比:

Comparison_of_1D_histogram_and_KDE

選擇合適的帶寬

選擇不同的帶寬,核密度估計的結果也大不相同,因此人們研究了一些算法來選擇帶寬。這方面對理解 KDE 本身沒有什麼太重要的意義,並且常見的算法在 scipy 裏也已經都實現了,這裏就不細說了,有興趣的看看 wiki 吧。

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章