Python GPS数据核密度估计的求取模式
我在分析GPS定位数据,权重表示“重要性”。这可以很容易地绘制为热图,例如在谷歌地图中。 我想使用python数据堆栈对此进行分析,特别是想找到内核密度估计的模式 如何在python中计算KDE的模式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
非常具体地,举例来说,您将如何找到找到“短尾瓢虫”物种的概率最高的位置?
让我们考虑一个简单的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学习核密度估计器足够有效。