2.8. 密度估计#
密度估计介于无监督学习、特征工程和数据建模之间。 一些最流行和最有用的密度估计技术是混合模型,如高斯混合 (GaussianMixture
),以及基于邻域的方法,如核密度估计 (KernelDensity
).高斯混合将在以下上下文中更全面地讨论 clustering ,因为该技术作为无监督集群方案也很有用。
密度估计是一个非常简单的概念,大多数人已经熟悉一种常见的密度估计技术:直方图。
2.8.1. 密度估计:柱状图#
矩形图是数据的简单可视化,其中定义了箱,并统计了每个箱内的数据点数量。 下图的左上方面板中可以看到一个图表的示例:
然而,矩形图的一个主要问题是,分类的选择可能会对最终的可视化产生不成比例的影响。 考虑上图的右上方面板。 它显示了相同数据的矩形图,其中箱向右移动。 两种可视化的结果看起来完全不同,并且可能会导致对数据的不同解释。
直观上,我们也可以将直方图看作是一堆块,每个点一个块。 通过在适当的网格空间中堆叠块,我们恢复直方图。 但是,如果我们不把这些块堆叠在一个规则的网格上,而是把每个块放在它所代表的点的中心,然后把每个位置的总高度相加,会怎么样呢? 这个想法导致了左下角的可视化。 它可能不像图表那么干净,但数据驱动块位置这一事实意味着它可以更好地表示基础数据。
此可视化是 kernel density estimation ,在这种情况下,使用顶帽内核(即每个点上的方形块)。 我们可以通过使用更平滑的内核来恢复更平滑的分布。 右下角的图显示了高斯核密度估计,其中每个点对总数贡献了高斯曲线。 结果是从数据中得出的平滑密度估计,并充当点分布的强大非参数模型。
2.8.2. 核密度估计#
scikit-learn中的核密度估计在 KernelDensity
估计器,它使用Ball Tree或KD Tree进行高效查询(请参阅 最近邻居 以讨论这些)。 尽管为了简单起见,上面的例子使用了1D数据集,但核密度估计可以在任何数量的维度中执行,尽管实际上维度诅咒会导致其性能在高维度中下降。
在下图中,从双峰分布中绘制了100个点,并显示了三种内核选择的内核密度估计:
很明显,核形状如何影响所得分布的平滑度。 scikit-learn核密度估计器可以如下使用:
>>> from sklearn.neighbors import KernelDensity
>>> import numpy as np
>>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
>>> kde = KernelDensity(kernel='gaussian', bandwidth=0.2).fit(X)
>>> kde.score_samples(X)
array([-0.41075698, -0.41075698, -0.41076071, -0.41075698, -0.41075698,
-0.41076071])
这里我们使用 kernel='gaussian'
,如上图所示。从数学上讲,核是一个正函数 \(K(x;h)\) 由带宽参数控制 \(h\) .给定这种核形式,某个点的密度估计 \(y\) 在一组点内 \(x_i; i=1\cdots N\) 给出者:
这里的带宽充当平滑参数,控制结果中偏差和方差之间的权衡。 大带宽导致非常平滑(即高偏置)的密度分布。 小带宽会导致密度分布不平滑(即高方差)。
参数 bandwidth
控制这种平滑。可以手动设置此参数,也可以使用Scott和Silverman的估计方法。
KernelDensity
实现了几种常见的内核形式,如下图所示:
核内尔的数学公式#
这些内核的形式如下:
高斯核 (
kernel = 'gaussian'
)\(K(x; h) \propto \exp(- \frac{x^2}{2h^2} )\)
托法特核 (
kernel = 'tophat'
)\(K(x; h) \propto 1\) 如果 \(x < h\)
埃帕内奇尼科夫核 (
kernel = 'epanechnikov'
)\(K(x; h) \propto 1 - \frac{x^2}{h^2}\)
指数核 (
kernel = 'exponential'
)\(K(x; h) \propto \exp(-x/h)\)
线性核 (
kernel = 'linear'
)\(K(x; h) \propto 1 - x/h\) 如果 \(x < h\)
Cosine核 (
kernel = 'cosine'
)\(K(x; h) \propto \cos(\frac{\pi x}{2h})\) if \(x < h\)
核密度估计器可以与任何有效距离指标一起使用(请参阅 DistanceMetric
对于可用指标列表),尽管结果仅针对欧几里得指标进行了适当的规格化。 一个特别有用的指标是 Haversine distance 它测量球体上点之间的角距离。 以下是使用核密度估计进行地理空间数据可视化的示例,在本例中是南美洲大陆上两个不同物种的观察分布:
核密度估计的另一个有用应用是学习数据集的非参数生成模型,以便有效地从该生成模型中提取新样本。以下是使用此过程创建一组新手写数字的示例,使用在数据的PCA投影上学习的高斯核:
“新”数据由输入数据的线性组合组成,权重是根据TEK模型概率绘制的。
示例
简单的1D核密度估计 :计算一维中的简单核密度估计。
核密度估计 :使用核密度估计来学习手写数字数据的生成模型,并从该模型中提取新样本的示例。
物种分布的核密度估计 :使用哈弗线距离指标可视化地理空间数据的核密度估计示例