在GPS数据中查找核密度估计的模式

时间:2019-04-24 07:19:34

标签: python scikit-learn gis kernel-density

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

如何在python中计算KDE的模式?

非常具体地,以https://scikit-learn.org/stable/auto_examples/neighbors/plot_species_kde.html中的示例为例,您将如何找到最有可能发现“三角嘴蝠”物种的位置?

1 个答案:

答案 0 :(得分:1)

让我们考虑一个获得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()

enter image description here

现在,我们可以获得坐标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)]

对于cited example,您可以尝试使用相同的方法来获得所需的结果。可能您需要调整阈值,例如选择75%而不是90%的值。