Skip to content

核密度估计

最近用 ArcGIS 做作业用到了一个 核密度分析 工具,它在 ArcGIS 中的主要作用是计算单位面积的人口强度。

这让我联想到平时用 Python 绘制频率直方图时,为让数据呈现得更平滑美观,通常会叠加绘制一条核密度估计(KDE)曲线。

然而,我发现自己从未深入探究过其背后的原理和具体实现方式。于是出于好奇,我查阅了一些相关资料。

直观理解

首先直观理解核密度函数,想象每个数据点都是一盏灯:

  • 每盏灯会发出对称的光晕
  • 光晕的明暗由距离决定,越近越亮
  • 把所有灯的光晕叠加起来,就得到整个数据分布的“亮度图”

核密度函数的公式

给定一个包含 n 个独立同分布样本的数据集 ,其核密度估计 在任意点 的值为:

  • : 样本点
  • :核函数
  • :带宽参数

核函数 是满足以下条件的概率密度函数:

  • 非负性:对所有
  • 对称性:通常 ,以保证估计的无偏性。
  • 积分为1,确保最终估计 也是一个合法的概率密度(即总面积也为1)

关于 总面积为1 我们可以进行如下数学推导:

积分:

,则

其中 是一个标准的概率密度函数,满足:

所以:

因此,不管样本数据如何、带宽如何取,只要核函数是概率密度函数, 的积分就恒为 1。


带宽参数 控制核函数的缩放程度和平滑水平

  • h 越大,叠加后的曲线越平滑。但可能会过度平滑,掩盖分布的细节(高偏差,低方差)
  • h 越小,叠加后的曲线越崎岖。但可能跟随采样噪声,产生许多虚假的波动(低偏差,高方差)

一般采用 Silverman经验法则

ArcGIS 中的核密度分析

再回来看 ArcGIS 中的核密度分析就比较好理解了,它和传统 KDE 略有不同。它计算的是单位面积的人口强度,而不是概率密度。

ArcGIS Population KDE公式

其中:

  • :位置 处的人口密度(单位:人/平方千米)
  • :POI 样本点 的人口数(Population字段)
  • :POI 样本点 到位置 的距离
  • :核函数
  • :带宽(搜索半径)