Python GPS数据核密度估计的求取模式

Python GPS数据核密度估计的求取模式,python,scikit-learn,gis,kernel-density,Python,Scikit Learn,Gis,Kernel Density,我在分析GPS定位数据,权重表示“重要性”。这可以很容易地绘制为热图,例如在谷歌地图中。 我想使用python数据堆栈对此进行分析,特别是想找到内核密度估计的模式 如何在python中计算KDE的模式 非常具体地,举例来说,您将如何找到找到“短尾瓢虫”物种的概率最高的位置?让我们考虑一个简单的KDE估计的例子: import numpy as np from scipy.stats import gaussian_kde from pylab import plt np.random.seed

我在分析GPS定位数据,权重表示“重要性”。这可以很容易地绘制为热图,例如在谷歌地图中。 我想使用python数据堆栈对此进行分析,特别是想找到内核密度估计的模式

如何在python中计算KDE的模式


非常具体地,举例来说,您将如何找到找到“短尾瓢虫”物种的概率最高的位置?

让我们考虑一个简单的KDE估计的例子:

import numpy as np
from scipy.stats import gaussian_kde
from pylab import plt

np.random.seed(10)

x = np.random.rand(100)
y = np.random.rand(100)
kde = gaussian_kde(np.vstack([x, y]))
X, Y = np.meshgrid(np.linspace(0, 1, 100), np.linspace(0, 1, 100))
Z = kde(np.vstack([X.ravel(), Y.ravel()])).reshape(X.shape)

plt.contourf(X, Y, Z)
plt.show()

现在,我们可以得到坐标X和Y,其中Z取其最大值:

X.ravel()[np.argmax(Z.ravel())]

0.3535353535353536

Y.ravel()[np.argmax(Z.ravel())]

0.5555555555555556
在实践中,在估计发生概率最高的位置时 物种,你不仅需要一个位置,还需要它周围的一些区域。 在这种情况下,您可以选择,例如,概率 大于所有可能概率值的90%,例如

Y.ravel()[Z.ravel() > np.percentile(Z, 90)]
X.ravel()[Z.ravel() > np.percentile(Z, 90)]

在这种情况下,您可以尝试相同的方法来获得所需的结果。您可能需要调整阈值,例如,选择75%而不是90%的值。

此解决方案在网格上对KDE进行采样,并选择最高值-正常,但效率不高。我想一定有一些梯度爬升法,它收敛得很好,不局限于网格。这可以在KDE的生成点的不同位置进行播种。你知道怎么做吗?获取最大值应该很快,
np.argmax,[Z.ravel()>…]
是用C实现的;我怀疑kde的计算是一个瓶颈;可能基于
cKDTree
的Scikit学习核密度估计器足够有效。