有没有一种方法可以将核密度估计应用于每个2-D数据点都有相关值的数据



我正试图将KDE应用于我的数据,其结构如下:

|x轴值|:1、2、3。。。

|y轴值|:5、8、10。。。

|坐标点值|:98,35,15。。。

我能够将KDE应用于X-Y坐标对,并估计点的分布,但这不包括Coord点值。

所以问题是:是否有一种方法可以估计X-Y数据点的KDE,并在坐标点值上获得类似的分布

理想情况下,创建的输出将是两个通道:

通道1:X-Y坐标对的二维分布

通道2:同一分布上的二维估计坐标点值

更新:

在下面的代码中,我试图解决我的问题,但结果的输出分布"gg"太大,因为每个点都获得了一些大的分布。

目前我不确定浓缩这一点的最佳方法,简单地获得最大值就足够了吗?

def kde3D(x, y, z, bandwidth, xbins=60j, ybins=60j, zbins=180j, ** kwargs):
"""Build 3D kernel density estimate (KDE)."""
# create grid of sample locations (default: 100x100)
xx, yy, zz = np.mgrid[0:60:xbins,
0:60:ybins,
-180:180:zbins]
xy_sample = np.vstack([yy.ravel(), xx.ravel(),zz.ravel()]).T
xy_train = np.vstack([y, x, z]).T
kde_skl = KernelDensity(bandwidth=bandwidth, **kwargs)
kde_skl.fit(xy_train)
# score_samples() returns the log-likelihood of the samples
gamma = np.exp(kde_skl.score_samples(xy_sample))  # Compute the log-likelihood of each sample under the model.
gg = np.reshape(gamma, xx.shape)

return xx, yy, zz ,gg 

更新2:

我能够通过使用3D KDE的输出来解决问题通过使用argmax和max函数,您可以将每个像素的输出函数提取为其最大值,这对于当前的问题来说已经足够好了。np.argmax表示坐标对值,np.max表示该点的概率分布值。因此,您不再有NxNxM输出,而是一个NxN。

不确定我是否正确理解了你的问题,但也许你可以尝试以下两个KDE:

  • 通道1:仅适合X-Y坐标对
  • 通道2:拟合X-Y坐标对,并使用z值作为采样权重

最新更新