無參密度估計:KDE和KNN
最大似然估計和貝葉斯估計應用於數據的密度函數形式已知但參數未知的情況,然而並非所有的情況下數據的密度函數的形式是已知的。針對於這種情況,我們可以選擇一些無參密度估計方法。
直觀上 ,我們對於概率密度的理解就是單位區域數據出現的概率,公式表示如下:
p ( x ) ≅ k N V
p(x) \cong \frac{k}{{NV}}
p ( x ) ≅ N V k
其中,k是面積是V的區域內數據的個數,N是數據的總個數。對於這個直觀,我們可以進行以下證明:
假設一個觀測變量x來自於一個概率密度爲p(x)的分佈,那麼它落入一個區域R的概率爲:
P = ∫ R p ( x ) d x
P = \int_R p \left( x \right)dx
P = ∫ R p ( x ) d x
假設R非常小,小到R內的p(x)沒有變化,那麼P就可以根據p(x)和R的面積計算:
P = p ( x ) V ⇒ p ( x ) = P V ( 1 )
P = p\left( x \right)V \Rightarrow p(x) = \frac{P}{V} (1)
P = p ( x ) V ⇒ p ( x ) = V P ( 1 )
假設現有N個變量來自於概率密度爲p(x)的分佈,那麼其中的k個變量落入區域R的概率可以用一個二項分佈描述:
P ( k ) = ( N k ) P k ( 1 − P ) N − k
P(k)=\left(\begin{array}{l}
{N} \\
{k}
\end{array}\right) P^{k}(1-P)^{N-k}
P ( k ) = ( N k ) P k ( 1 − P ) N − k
由於二項分佈的期望E(k)=NP,可以得到k/N的期望爲P:
E ( k N ) = P ⇒ P ≅ k N ( 2 )
E\left( {\frac{k}{N}} \right) = P \Rightarrow P \cong \frac{k}{N}(2)
E ( N k ) = P ⇒ P ≅ N k ( 2 )
綜合(1)(2)可以得:
p ( x ) ≅ k N V ( 3 )
p(x) \cong \frac{k}{{NV}}(3)
p ( x ) ≅ N V k ( 3 )
核密度估計Kernel Density Estimation (KDE)
我們都很熟悉直方圖,在計算密度直方圖時首先將樣本空間分成若干個採樣區域(英文所謂bin),然後通過統計每個區域內落入的樣本的個數來近似估計每個區域的中心密度。公式表示爲:
P H ( X ) = 1 N 區 域 ( b i n ) 中 樣 本 x k 的 個 數 區 域 ( b i n ) 的 採 樣 寬 度
{P_H}(X) = \frac{1}{N}\frac{{區域(bin)中樣本{x^k}的個數}}{{區域(bin)的採樣寬度}}
P H ( X ) = N 1 區 域 ( b i n ) 的 採 樣 寬 度 區 域 ( b i n ) 中 樣 本 x k 的 個 數
計算密度直方圖有兩個重要控制參數:bin的寬度和第一個bin的開始位置。
密度直方圖是一種簡單並且直觀的模型,但是它不是一個連續的模型。這樣的不連續性使得直方圖很難表現分佈的細節結構,直方圖能夠展現bin中心位置的概率分佈,而在中心之外的位置,特別是bin邊緣位置的概率密度就無法展現。爲了解決這一問題,我們使用下面的方案計算概率密度:
首先定義一個核函數:
K ( u ) = { 1 ∣ u j ∣ < 1 / 2 ∀ j = 1 , … , D 0 otherwise
\mathrm{K}(\mathrm{u})=\left\{\begin{array}{lll}
1 & \left|\mathrm{u}_{\mathrm{j}}\right|<1 / 2 & \forall \mathrm{j}=1, \ldots, \mathrm{D} \\
0 & \text { otherwise }
\end{array}\right.
K ( u ) = { 1 0 ∣ u j ∣ < 1 / 2 otherwise ∀ j = 1 , … , D
即,向量半徑在1/2以內記爲1,否則爲0。
在(3)式中,將計數k利用上面的核函數做如下表示:
KaTeX parse error: Undefined control sequence: \
at position 103: …m{h}}}} \right)\̲
̲
結合核函數的定義,上面的式子可以理解爲與x距離在1/2以內的數據點的個數,如下圖所示:
假設某一位置x處有三個點x1-x4,其中x1-x3距離x的距離小於1/2,x4距離x的位置大於1/2。此時x點的概率密度爲3/V。
進一步的,將V定義爲邊長爲h正多維塊的“體積”,概率密度函數可以用下式表示:
p K D E ( x ) = 1 N h D ∑ n = 1 N K ( x − x n h )
{{\rm{p}}_{{\rm{KDE}}}}({\rm{x}}) = \frac{1}{{{\rm{N}}{{\rm{h}}^{\rm{D}}}}}\sum\limits_{{\rm{n}} = 1}^{\rm{N}} {\rm{K}} \left( {\frac{{x - {x^n}}}{{\rm{h}}}} \right)
p K D E ( x ) = N h D 1 n = 1 ∑ N K ( h x − x n )
這個公式下,任何一點的概率密度都可以計算出來,這個概率密度就變成一個連續的模型了。
進一步理解核函數
這個核函數,有的文獻也叫它Parzen窗 ,那麼爲什麼又叫它核函數呢?上面概率密度函數的期望:
E [ p K D E ( x ) ] = 1 N h D ∑ n = 1 N E [ K ( x − x D h ) ] = 1 h D E [ K ( x − x D ) h ) ] = 1 h D ∫ K ( x − x ′ h ) p ( x ′ ) d x ′
\begin{array}{l}
{\rm{E}}\left[ {{{\rm{p}}_{{\rm{KDE}}}}({\rm{x}})} \right] = \frac{1}{{{\rm{N}}{{\rm{h}}^{\rm{D}}}}}\sum\limits_{{\rm{n}} = 1}^{\rm{N}} {\rm{E}} \left[ {{\rm{K}}\left( {\frac{{x - {x^D}}}{{\rm{h}}}} \right)} \right]\\
= \frac{1}{{{{\rm{h}}^{\rm{D}}}}}{\rm{E}}\left[ {{\rm{K}}\left( {\frac{{\left. {x - {x^D}} \right)}}{{\rm{h}}}} \right)} \right] = \frac{1}{{{{\rm{h}}^D}}}\int {\rm{K}} \left( {\frac{{{\rm{x}} - {{\rm{x}}^\prime }}}{{\rm{h}}}} \right){\rm{p}}\left( {{{\rm{x}}^\prime }} \right){\rm{d}}{{\rm{x}}^\prime }
\end{array}
E [ p K D E ( x ) ] = N h D 1 n = 1 ∑ N E [ K ( h x − x D ) ] = h D 1 E [ K ( h x − x D ) ) ] = h D 1 ∫ K ( h x − x ′ ) p ( x ′ ) d x ′
最終可以化爲數據點的真實分佈p(x’)和核函數K(x)的卷積。爲了方便比較,這裏列出卷積公式:
∫ − ∞ ∞ f ( τ ) g ( x − τ ) d τ
\int_{-\infty}^{\infty} f(\tau) g(x-\tau) d \tau
∫ − ∞ ∞ f ( τ ) g ( x − τ ) d τ
核函數的選取有很多種,除了Parzen窗外,也可以用高斯核:
K ( x ) = 1 ( 2 π ) D / 2 exp ( − 1 2 u ⊤ u )
K(x)=\frac{1}{(2 \pi)^{D / 2}} \exp \left(-\frac{1}{2} u^{\top} u\right)
K ( x ) = ( 2 π ) D / 2 1 exp ( − 2 1 u ⊤ u )
參數h的選擇
參數h控制着卷積核的大小,h越大,估計出來的密度函數越光滑。
h趨於0時,核函數就成了δ函數,而δ函數與函數f(x)卷積後的結果仍是f(x),所以理論上當h趨於0時,概率密度函數估計值就是其真實值。然而這只是理論上,實際中我們樣本的密度是有限的,h太小時,每個點附近的密度估計就不精確,所以h不可能無限小。
參數h的選擇有下面兩種思路:
1.偏差和方差的權衡
如果用均方誤差MSE表示密度估計是誤差,MSE計算如下:
M S E x ( p K D E ) = E [ ( p K D E ( x ) − p ( x ) ) 2 ] = E [ ( p K D E ( x ) − E ( p K D E ( x ) ) + E ( p K D E ( x ) ) − p ( x ) ) 2 ] = E [ ( p K D E ( x ) − E ( p K D E ( x ) ) ) 2 ] + E [ ( E ( p K D E ( x ) ) − p ( x ) ) 2 ] + E [ 2 ( p K D E ( x ) − E ( p K D E ( x ) ) ) ( E ( p K D E ( x ) ) − p ( x ) ) ] = E [ ( E ( p K D E ( x ) ) − p ( x ) ) 2 ] ⏟ b i a s + E [ ( p K D E ( x ) − E ( p K D E ( x ) ) ) 2 ] ⏟ v a r i a n c e
\begin{array}{l}
{{\mathop{\rm MSE}\nolimits} _x}\left( {{{\rm{p}}_{{\rm{KDE}}}}} \right) = {\rm{E}}\left[ {{{\left( {{{\rm{p}}_{{\rm{KDE}}}}({\rm{x}}) - {\rm{p}}({\rm{x}})} \right)}^2}} \right]\\
{\rm{ = E}}\left[ {{{\left( {{{\rm{p}}_{{\rm{KDE}}}}({\rm{x}}){\rm{ - E(}}{{\rm{p}}_{{\rm{KDE}}}}({\rm{x}}){\rm{) + E(}}{{\rm{p}}_{{\rm{KDE}}}}({\rm{x}}){\rm{)}} - {\rm{p}}({\rm{x}})} \right)}^2}} \right]\\
= {\rm{E}}\left[ {{{\left( {{{\rm{p}}_{{\rm{KDE}}}}({\rm{x}}){\rm{ - E(}}{{\rm{p}}_{{\rm{KDE}}}}({\rm{x}}){\rm{)}}} \right)}^2}} \right] + {\rm{E}}\left[ {{{\left( {{\rm{E(}}{{\rm{p}}_{{\rm{KDE}}}}({\rm{x}}){\rm{)}} - {\rm{p}}({\rm{x}})} \right)}^2}} \right] + \color{red}{\rm{E}}\left[ {2\left( {{{\rm{p}}_{{\rm{KDE}}}}({\rm{x}}){\rm{ - E(}}{{\rm{p}}_{{\rm{KDE}}}}({\rm{x}}){\rm{)}}} \right)\left( {{\rm{E(}}{{\rm{p}}_{{\rm{KDE}}}}({\rm{x}}){\rm{)}} - {\rm{p}}({\rm{x}})} \right)} \right]\\
= \underbrace {{\rm{E}}\left[ {{{\left( {{\rm{E(}}{{\rm{p}}_{{\rm{KDE}}}}({\rm{x}}){\rm{)}} - {\rm{p}}({\rm{x}})} \right)}^2}} \right]}_{{\rm{bias}}} + \underbrace {{\rm{E}}\left[ {{{\left( {{{\rm{p}}_{{\rm{KDE}}}}({\rm{x}}){\rm{ - E(}}{{\rm{p}}_{{\rm{KDE}}}}({\rm{x}}){\rm{)}}} \right)}^2}} \right]}_{{\rm{variance }}}
\end{array}
M S E x ( p K D E ) = E [ ( p K D E ( x ) − p ( x ) ) 2 ] = E [ ( p K D E ( x ) − E ( p K D E ( x ) ) + E ( p K D E ( x ) ) − p ( x ) ) 2 ] = E [ ( p K D E ( x ) − E ( p K D E ( x ) ) ) 2 ] + E [ ( E ( p K D E ( x ) ) − p ( x ) ) 2 ] + E [ 2 ( p K D E ( x ) − E ( p K D E ( x ) ) ) ( E ( p K D E ( x ) ) − p ( x ) ) ] = b i a s E [ ( E ( p K D E ( x ) ) − p ( x ) ) 2 ] + v a r i a n c e E [ ( p K D E ( x ) − E ( p K D E ( x ) ) ) 2 ]
MSE可以分解爲偏差 和方差 。公式紅色部分爲0,這是因爲:
E [ 2 ( p K D E − E ( p K D E ) ) ( E ( p K D E ) − p ) ] = 2 E [ p K D E ⋅ E ( p K D E ) − p K D E ⋅ p − E ( p K D E ) 2 + p ⋅ E ( p K D E ) ] = 2 { E [ p K D E ⋅ E ( p K D E ) ] − E [ p K D E ⋅ p ] − E [ E ( p K D E ) 2 ] + E [ p ⋅ E ( p K D E ) ] } = 2 { E ( p K D E ) 2 − E [ p K D E ⋅ p ] − E ( p K D E ) 2 + E [ p ⋅ E ( p K D E ) ] } = E [ p ⋅ E ( p K D E ) − p ⋅ p K D E ] = 0
\begin{array}{l}{\rm{E}}\left[ {2\left( {{{\rm{p}}_{{\rm{KDE}}}}{\rm{ - E(}}{{\rm{p}}_{{\rm{KDE}}}}{\rm{)}}} \right)\left( {{\rm{E(}}{{\rm{p}}_{{\rm{KDE}}}}{\rm{)}} - {\rm{p}}} \right)} \right]\\ = 2{\rm{E}}\left[ {{{\rm{p}}_{{\rm{KDE}}}} \cdot {\rm{E(}}{{\rm{p}}_{{\rm{KDE}}}}{\rm{)}} - {{\rm{p}}_{{\rm{KDE}}}} \cdot {\rm{p}} - {\rm{E(}}{{\rm{p}}_{{\rm{KDE}}}}{{\rm{)}}^2}{\rm{ + p}} \cdot {\rm{E(}}{{\rm{p}}_{{\rm{KDE}}}}{\rm{)}}} \right]\\ = 2{\rm{\{ E[}}{{\rm{p}}_{{\rm{KDE}}}} \cdot {\rm{E(}}{{\rm{p}}_{{\rm{KDE}}}}{\rm{)] - E[}}{{\rm{p}}_{{\rm{KDE}}}} \cdot {\rm{p] - E[E(}}{{\rm{p}}_{{\rm{KDE}}}}{{\rm{)}}^2}{\rm{] + E[p}} \cdot {\rm{E(}}{{\rm{p}}_{{\rm{KDE}}}}{\rm{)]\} }}\\{\rm{ = }}2{\rm{\{ E(}}{{\rm{p}}_{{\rm{KDE}}}}{{\rm{)}}^2}{\rm{ - E[}}{{\rm{p}}_{{\rm{KDE}}}} \cdot {\rm{p] - E(}}{{\rm{p}}_{{\rm{KDE}}}}{{\rm{)}}^2}{\rm{ + E[p}} \cdot {\rm{E(}}{{\rm{p}}_{{\rm{KDE}}}}{\rm{)]\} }}\\{\rm{ = E[p}} \cdot {\rm{E(}}{{\rm{p}}_{{\rm{KDE}}}}{\rm{) - p}} \cdot {{\rm{p}}_{{\rm{KDE}}}}{\rm{]}}\\{\rm{ = 0}}\end{array}
E [ 2 ( p K D E − E ( p K D E ) ) ( E ( p K D E ) − p ) ] = 2 E [ p K D E ⋅ E ( p K D E ) − p K D E ⋅ p − E ( p K D E ) 2 + p ⋅ E ( p K D E ) ] = 2 { E [ p K D E ⋅ E ( p K D E ) ] − E [ p K D E ⋅ p ] − E [ E ( p K D E ) 2 ] + E [ p ⋅ E ( p K D E ) ] } = 2 { E ( p K D E ) 2 − E [ p K D E ⋅ p ] − E ( p K D E ) 2 + E [ p ⋅ E ( p K D E ) ] } = E [ p ⋅ E ( p K D E ) − p ⋅ p K D E ] = 0
其中,偏差代表的是估計的系統誤差;而方差代表由於樣本採樣導致的隨機誤差。往往減小偏差會增大方差,反之也是如此。當卷積核h比較大時,採樣的數據點比較多,因此隨機誤差(方差)會比較小,但是會導致偏差的增大,反之亦然。較好的h是偏差和方差權衡的結果,如果我們假設樣本分佈是高斯分佈,並利用高斯核估計密度函數,最優的h=1.06σN^(-0.2),其中σ是樣本方差,N是訓練樣本個數。
2.最大似然交叉驗證
可以借鑑最大似然的方法利用留一交叉驗證尋找最優的h。此時,目標函數爲:
h = argmax h { 1 N ∑ n = 1 N log p − n ( x ( n ) ) } where p − n ( x ( n ) ) = 1 ( N − 1 ) h ∑ m = 1 , n = m N K ( x ( n − x ( m ) h )
\begin{aligned}h &=\underset{h}{\operatorname{argmax}}\left\{\frac{1}{N} \sum_{n=1}^{N} \log p_{-n}\left(x^{(n)}\right)\right\} \\& \text { where } p_{-n}\left(x^{(n)}\right)=\frac{1}{(N-1) h} \sum_{m=1, n=m}^{N} K\left(\frac{\left.x^{(n}-x^{(m}\right)}{h}\right)\end{aligned}
h = h a r g m a x { N 1 n = 1 ∑ N log p − n ( x ( n ) ) } where p − n ( x ( n ) ) = ( N − 1 ) h 1 m = 1 , n = m ∑ N K ( h x ( n − x ( m ) )
K臨近K Nearest Neighbor (KNN)
KDE和KNN本質上都是遵循公式(3)的算法,不同的是:KDE是固定體積V而去想辦法計算k;KNN是固定k而想辦法計算V。KNN的公式如下:
P ( x ) ≅ k N V = k N ⋅ c D ⋅ R k D ( x )
P(x) \cong \frac{k}{N V}=\frac{k}{N \cdot c_{D} \cdot R_{k}^{D}(x)}
P ( x ) ≅ N V k = N ⋅ c D ⋅ R k D ( x ) k
其中,R爲估計點x到其第k臨近的樣本的距離,c是單位範圍的體積。這個公式看起來很複雜,這是因爲它擴展到D維的情況。其實kNN的思想很簡單:計算x點附近恰好包含k個臨近樣本點的球的體積,k/N/體積就是點x的概率密度。KNN很簡單,但是也有很多不足,比如容易受到噪聲干擾、分佈重尾、有不連續點等。