高斯核密度估计(Kernel Density Estimation, KDE)的原理与计算过程
题目描述
高斯核密度估计是一种非参数的概率密度估计方法。给定一组未知分布的样本数据点,KDE的目标是估计出这些数据所服从的连续概率密度函数,而无需对数据分布的形状做任何先验假设(例如假设它是正态分布)。它通过在每个数据点位置放置一个核函数(如高斯核),然后将所有核函数叠加并归一化,来平滑地估计出整体的概率密度。
解题过程
-
核心思想与直觉
- 直方图的局限性:最直观的密度估计是画直方图。但直方图的结果严重依赖于“箱子”的起点和宽度,且是不连续的阶梯状函数。
- KDE的平滑思想:KDE的核心思想是“平滑”。想象每个数据点都是一块有质量的“沙子”。我们不把沙子堆在固定的箱子里,而是在每个数据点的位置放上一小块平滑的、中心高四周低的“沙堆”(即核函数)。最终的密度估计就是所有这些“沙堆”叠加在一起形成的平滑曲面。数据点越密集的区域,叠加的沙堆就越多,曲面就越高,表示概率密度越大。
-
数学定义
给定一组独立同分布的样本数据 \(\{x_1, x_2, ..., x_n\}\),在任意点 \(x\) 处的核密度估计量定义为:
\[ \hat{f}_h(x) = \frac{1}{n} \sum_{i=1}^{n} K_h(x - x_i) = \frac{1}{n h} \sum_{i=1}^{n} K\left(\frac{x - x_i}{h}\right) \]
* $ K(\cdot) $ 是**核函数**,是一个对称的非负函数,且积分为1(即本身是一个概率密度函数)。例如,标准正态分布的概率密度函数就是一个常用的核函数(高斯核)。
* $ h $ 是一个大于0的参数,称为**带宽**。它是KDE中最重要的参数。
* $ K_h(u) = \frac{1}{h} K(\frac{u}{h}) $ 是缩放后的核函数。
- 高斯核函数
我们使用最常用的高斯核(正态核)来具体化这个过程。标准高斯核函数 \(K(u)\) 为:
\[ K(u) = \frac{1}{\sqrt{2\pi}} e^{-\frac{1}{2}u^2} \]
将其代入上面的公式,得到高斯核密度估计的表达式:
\[ \hat{f}_h(x) = \frac{1}{n h} \sum_{i=1}^{n} \frac{1}{\sqrt{2\pi}} e^{-\frac{1}{2} \left( \frac{x - x_i}{h} \right)^2} \]
这个公式可以理解为:在待估计点 $ x $ 处,其密度值是所有样本点 $ x_i $ 处的高斯分布(均值为 $ x_i $,标准差为 $ h $)在 $ x $ 点的概率密度值的平均值。
- 带宽 \(h\) 的选择:偏差-方差权衡
带宽 \(h\) 控制着平滑程度,是KDE成败的关键。- 带宽过小(\( h \to 0 \)):
- 现象:密度估计曲线会变得极其崎岖不平,出现大量的尖峰,几乎每一个数据点都对应一个尖峰。
- 本质:对数据过拟合。估计的方差很大(对样本集微小变化非常敏感),但偏差很小(在数据点处能给出很高的估计值)。
- 带宽过大(\( h \to \infty \)):
- 现象:密度估计曲线会变得非常平坦和光滑,像一座宽矮的山丘,丢失了数据分布的所有细节。
- 本质:对数据欠拟合。估计的方差很小(曲线很稳定),但偏差很大(与真实密度函数差距大)。
- 最优带宽:需要在偏差和方差之间做一个权衡,选择一个能使估计误差(如均方积分误差MISE)最小的 \(h\)。
- 经验法则(Rule of Thumb):对于高斯核和接近正态分布的数据,一个常用的带宽选择是斯科特(Scott)规则或Silverman规则:
- 带宽过小(\( h \to 0 \)):
\[ h_{scott} \approx 1.06 \hat{\sigma} n^{-1/5} \]
其中 $ \hat{\sigma} $ 是样本标准差。更稳健的Silverman规则是:
\[ h_{silverman} \approx 0.9 \min(\hat{\sigma}, \frac{IQR}{1.34}) n^{-1/5} \]
其中 $ IQR $ 是样本的四分位距。这些规则为选择提供了一个很好的起点。
-
计算步骤
现在,我们一步步计算一个未知数据点 \(x\) 的密度值。
输入:样本数据 \(\{x_1, x_2, ..., x_n\}\),待估计点 \(x\),带宽 \(h\)。
输出:\(x\) 点的概率密度估计值 \(\hat{f}_h(x)\)。步骤 1:确定带宽 \( h \)
可以使用上述的经验法则,或者通过更复杂的方法如交叉验证来确定。假设我们已经选定了一个 \(h\)。步骤 2:对每个样本点计算核函数值
遍历每一个样本点 \(x_i\),计算缩放后的高斯核函数在 \((x - x_i)\) 处的值:
\[ k_i = K_h(x - x_i) = \frac{1}{h} K\left(\frac{x - x_i}{h}\right) = \frac{1}{h\sqrt{2\pi}} e^{-\frac{1}{2} \left( \frac{x - x_i}{h} \right)^2} \]
这个值表示了样本点 $ x_i $ 对 $ x $ 点密度估计的“贡献”大小。距离 $ x $ 越近的 $ x_i $,其贡献 $ k_i $ 越大。
**步骤 3:求和并平均**
将所有样本点的贡献值 $ k_i $ 求和,然后除以样本总数 $ n $,得到最终的密度估计:
\[ \hat{f}_h(x) = \frac{1}{n} \sum_{i=1}^{n} k_i = \frac{1}{n} \sum_{i=1}^{n} \left[ \frac{1}{h\sqrt{2\pi}} e^{-\frac{1}{2} \left( \frac{x - x_i}{h} \right)^2} \right] \]
这个结果保证了 $ \hat{f}_h(x) $ 在整个定义域上的积分(近似)为1,满足概率密度函数的性质。
**步骤 4:可视化(可选但重要)**
如果要得到整个数据分布的概率密度函数曲线,我们需要在定义域内取一系列密集的点 $ \{x^{(1)}, x^{(2)}, ..., x^{(m)}\} $,对每一个点都重复步骤2和3,计算出其密度值 $ \hat{f}_h(x^{(1)}), \hat{f}_h(x^{(2)}), ..., \hat{f}_h(x^{(m)}) $,然后将这些点连接成一条平滑的曲线。这条曲线就是我们对原始数据概率分布的非参数估计。
总结
高斯核密度估计通过“用数据点本身作为分布中心来构建平滑曲线”的巧妙方式,避免了参数模型的假设,提供了一种灵活强大的数据分布探索工具。其核心在于理解带宽 \(h\) 对平滑度的控制作用,以及掌握从数学公式到具体计算的转换过程。