原文地址 https://lotabout.me/2018/kernel-density-estimation/
寫得非常棒!
有一些數據,想“看看”它長什麼樣,我們一般會畫直方圖(Histogram)。現在你也可以用核密度估計。
什麼是“核”
如果不瞭解背景,看到“核密度估計”這個概念基本上就是一臉懵逼。我們先說說這個核 (kernel) 是什麼。
首先,“核”在不同的語境下的含義是不同的,例如在模式識別裏,它的含義就和這裏不同。在“非參數估計”的語境下,“核”是一個函數,用來提供權重。例如高斯函數 (Gaussian) 就是一個常用的核函數。
讓我們舉個例子,假設我們現在想買房,錢不夠要找親戚朋友借,我們用一個數組來表示 5 個親戚的財產狀況:。
我們是中間這個數 5
。“核”可以類比 成朋友圈,但不同的親戚朋友親疏有別,在借錢的時候,關係好的朋友出力多,關係不好的朋友出力少,於是我們可以用權重來表示。總共能到手的錢是:
那麼“核”的作用就是用來決定權重,例如高斯函數(即正態分佈):
如果還套用上面的例子的話,可以認爲在 3 代血親之外的親戚就基本不會借錢給你了。
最後呢,一般要求核函數有下面兩個性質:
- 歸一化:
- 對稱性:對所有要求
最後的最後: 一些常用的核(維基百科)
核密度估計
理解了“核”,核密度估計就容易理解了。
如果我們畫直方圖,其實目的是畫出“概率密度函數”,而直方圖本質上是認爲頻率等於概率。但這種假設不是必然的。核密度函數就是一種“平滑(smooth)”的手段。相當於是“我說我很牛逼你可能不信,但你可以聽聽我的朋友們是怎麼評價我的,加權平均下就能更好地瞭解我了”。於是乎:
設 是獨立同分布的 個樣本點,它的概率密度函數是 ,於是我們的估計:
上面式子中 是人爲指定的,代表“朋友圈”的大小,正式的叫法是“帶寬”(bandwidth) 。而 就是自己與朋友的親疏程度,當然最後要正歸化到 之間。下圖是直方圖和核密度估計的一個對比:
選擇合適的帶寬
選擇不同的帶寬,核密度估計的結果也大不相同,因此人們研究了一些算法來選擇帶寬。這方面對理解 KDE 本身沒有什麼太重要的意義,並且常見的算法在 scipy 裏也已經都實現了,這裏就不細說了,有興趣的看看 wiki 吧。