假设,我们的观测来自于D维欧式空间中的未知概率密度p(x),希望估计出p(x)。根据之前对于局部性的讨论,让我们考虑包含x的小区域R。这个区域的概率质量是由
P=∫Rp(x)dx
给出的。假设已经收集了服从分布p(x)的N次观测。由于每个数据点都有落在区域R中的概率P,所以位于区域R内部的数据点的总数K将服从二项分布
Bin(K|N,P)=N!K!(N−K)!PK(1−P)N−K
使用式(2.11),得到落在区域内部的数据点的平均比例为E[K/N]=P,同时引用式(2.12)得到这个均值的方差为var[K/N]=P(1−P)/N。对于大的N值,这个分布将会在均值附近产生尖峰,且
K≃NP
但是,如果同时假定区域R足够小,使得在这个区域内的概率密度p(x)大致为常数,那么就有
P≃p(x)V
其中V是R的体积。结合式(2.244)和(2.245)得到密度估计的形式:
p(x)=KNV
注意,式(2.246)的成立依赖于两个相互矛盾的假设,即区域R要足够小,使得这个区域内的概率密度近似为常数,但是也要足够大(关于密度的值),使得落在这个区域内的数据点的数量K足够让二项分布达到尖峰。
有两种方法来利用式(2.246)的结果。可以固定K然后通过数据中确定V的值,这就是马上就要讨论的K临近算法。也可以固定V然后通过数据中确定K的值,这就是核方法。可以证明,在极限N→∞下,如果V 随着N而合适地收缩,且K随着N增大,那么K近邻密度估计和核密度估计都会收敛到真实的概率密度(Duda and Hart, 1973)。
先详细讨论核方法。首先,我们把区域R取成以想确定概率密度的点x为中心的小超立方体。为了统计落在这个区域内的数据点的数量K,定义函数
k(u)={1,|ui|≤1/2,i=1,...,D,0,otherwise
会比较方便。这表示一个以原点为中心的单位立方体。函数k(u)是核函数的一个例子。在这个问题中也被称为Parzen window。从式(2.247),如果数据点xn位于以x为中心的边长为h的立方体中,那么量k((x−xn)/h)等于1,否则它的值为0。位于这个立方体内的数据点的总数为:
K=N∑n=1k(x−xnh)
把这个表达式代入式(2.246),可以得到点x处的概率密度估计
p(x)=1NN∑n=11hDk(x−xnh)
其中使用了D维边长为h的立方体的体积公式V=hD。使用函数k(u)的对称性,可以重新解读这个等式为以N个数据点xn为中心的N个立方体的和,而不是解读为以x为中心的一个立方体。
核密度估计(2.249)和之前的直方图方法一样会碰到人为带来的非连续性的问题。这个是由密度估计中立方体的边界带来的。如果我们选择一个平滑的核函数,那么就可以得到一个更加光滑的模型。一个常用的选择是高斯核函数,它给出
p(x)=1NN∑n=11(2πh2)1/2exp{−∥x−xn∥22h2}
核概率密度模型。其中h表示高斯分布的标准差。这个密度模型是通过使每个数据点服从高斯,然后把它们的贡献加起来得到的,之后除以N,使得概率密度被正确的标准化。图2.25中展示了把模型(2.250)应用于之前用来说明直方图方法的数据集上的图像。
图 2.25 核密度模型的例子
看到,和我们期望的一样,参数h担当平滑参数的角色,且需要在,小的h会造成模型对噪声过于敏感,而大的h会造成过度平滑间做一个权衡。同样的,对h的优化是一个模型复杂度的问题,类似于直方图密度估计中对于箱子宽度的选择,也类似于曲线拟合问题中的多项式阶数。
要满足条件:
k(u)≥0,∫k(u)du=1
可以任意选择公式(2.249)中的核函数。这确保了最终求得的概率分布在处处都是非负的,且积分等于1。式(2.249)给出的这类密度模型被称为核密度估计,或Parzen估计。它的一个很大的优点是:因为“训练”阶段只需要存储训练集即可,所以它不需要进行“训练”阶段的计算。然而,这也是一个巨大的缺点,因为评估密度的计算代价随着数据集的规模线性增长。