一句话定义:核密度估计(Kernel Density Estimation,简称 KDE)是一种非参数方法——它不预设数据服从正态分布之类的固定形状,而是直接用现有的数据点"叠加"出一条平滑的概率密度曲线。
原理:像在每颗豆子上盖一座小山包
想象你把 100 颗豆子随手撒在桌面上,想知道豆子在哪里最密集。最直觉的做法是画直方图:把桌面切成若干格子,数每格里有多少颗。但直方图很烦人——格子宽度换一下,图形就从"双峰"变成"单峰",而且永远是锯齿状的。
KDE 换了个思路:不给豆子归格子,而是给每颗豆子头上盖一座小小的"山包"(核函数,kernel,最常见的是高斯核,也就是一条钟形曲线)。100 颗豆子就有 100 座小山包,把它们全部叠起来,得到一条光滑的曲线:豆子扎堆的地方山包互相堆高,孤零零的豆子只留下一道小土丘。
用公式说就是,对每个位置 x,把每个数据点 xᵢ 处的核函数值加总再平均:
p̂(x) = 1/(n·h) · Σ K((x − xᵢ)/h)
其中 h 叫带宽(bandwidth),是 KDE 唯一的关键旋钮。它是山包的"胖瘦":h 太小,曲线变成一排尖刺,每个数据点自成一峰(过拟合);h 太大,山包糊成一片,本来两个峰也被揉成一个(欠拟合)。所以带宽的选择往往比核函数形状更重要,常用交叉验证或经验法则来定。具体实现里的默认值,以官方文档为准。
和相邻概念的区别
| 方法 | 是否假设分布形状 | 输出形态 | 关键旋钮 |
|---|---|---|---|
| 参数化估计(如拟合正态) | 是,假定属于某个分布族 | 几个参数的解析式 | 分布族选择 |
| 直方图 | 否 | 阶梯状柱形 | 箱宽与起点 |
| KDE | 否 | 平滑曲线 | 带宽 h |
| K 近邻密度估计(kNN) | 否 | 局部密度值 | 邻居数 k |
一句话:直方图的坑是"分箱不连续",KDE 的坑是"带宽很敏感",两者都是不假设分布的非参数做法。
对从业者意味着什么
- 探索性分析:拿到一列连续特征(用户停留时长、订单金额),先用 KDE 看形状是单峰、双峰还是长尾,比只看均值方差信息量大得多。
- 异常检测:KDE 给出的是密度,密度极低的位置就是"罕见样本",天然可作为异常分数。
- 生成与分类:KDE 本质上是一个非参数生成模型,能从估计出的密度里采样;朴素贝叶斯的 KDE 变体也是用同样思路处理连续特征。
- 注意维度灾难:维度一高,需要的样本量会爆炸式增长。实践中 KDE 多见于一维、二维可视化或低维特征,别指望它直接啃几百维的原始数据。
