我正试图将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值作为采样权重