自适应带宽核密度估计

Posted

技术标签:

【中文标题】自适应带宽核密度估计【英文标题】:Adaptive Bandwidth Kernel Density Estimation 【发布时间】:2015-10-07 15:14:55 【问题描述】:

似乎有大量信息和工具可用于实施标准的多变量或单变量核密度估计。然而,我目前使用的离散地理数据特别稀疏,并且往往聚集在人口密度高的区域周围。

也就是说,我在地图上有许多点(经度和纬度),我想估计给定点的概率密度,但我需要以某种方式对人口密度进行归一化。环顾四周,似乎解决此类问题的正确方法是为内核估计实现某种最近邻自适应带宽。然而,似乎 stats.gaussian_kde 不支持自适应带宽。有谁知道我自己可以如何实现这一点,或者是否有任何可用于自适应带宽 KDE 的软件包?

【问题讨论】:

R 解决方案怎么样?它必须在 Python 中吗? google.com/… 我没有使用 R 的经验。但是,我会考虑暂时使用它并将其移植到 Python 中。尽管如此,我更希望看到基于 Python 的解决方案。 【参考方案1】:

我在 Python 中搜索变量/自适应内核密度估计包时遇到了这个问题。我意识到 OP 可能已经很久了,但无论如何我发现了以下内容:

AdaptiveKDE(用于自适应核密度估计的 Python 模块

这个包实现了一维的自适应核密度估计算法 由 Hideaki Shimazaki 开发的信号。这使得平滑直方图的生成能够在多个尺度上保留重要的密度特征,而不是可能超过或低于平滑密度估计的简单单带宽核密度方法。

awkde(具有高斯内核的自适应宽度 KDE

内核带宽是在本地选择的,以考虑数据密度的变化。密度大的区域获得较小的内核,反之亦然。这可以平滑尾部并在高统计区域获得高分辨率。

这使用了很棒的 pybind11 包,这使得创建 C++ 绑定非常方便。只有求值是用小 C++ sn-p 写的以加快速度,其余的都是纯 python 实现。

最后一个没有自适应方法,但包含一个非常适合多模式分布的algorithm。

KDEpy(Python 中的内核密度估计

这个 Python 3.5+ 包实现了各种内核密度估计器 (KDE)。三种算法通过相同的 API 实现:NaiveKDE、TreeKDE 和 FFTKDE。 FFTKDE 类的性能优于其他流行的实现,请参阅comparison page。

【讨论】:

你在python中有没有实现的例子?

以上是关于自适应带宽核密度估计的主要内容,如果未能解决你的问题,请参考以下文章

核密度估计:带宽宽度选择——原理阐述

核密度估计:带宽宽度选择——原理阐述

核密度估计:带宽宽度选择——原理阐述

scipy.stats :高斯核密度估计器中的带宽因子

核密度估计:带宽宽度选择——ROT 原则

核密度估计:带宽宽度选择——ROT 原则