如何为带关联值的二维数据点生成KDE分布与对应值分布?
问题:带关联值的X-Y坐标KDE估计
问题背景
现有数据结构如下:
- x轴数值:1, 2, 3, ...
- y轴数值:5, 8, 10, ...
- 坐标点关联值:98, 35, 15, ...
目前仅能对X-Y坐标对应用KDE估计点的分布,但无法将坐标点关联值纳入计算。需求是同时得到两个输出通道:
- 通道1:X-Y坐标对的二维分布
- 通道2:同一X-Y网格上的关联值估计分布
尝试的3D KDE实现
为了纳入关联值,尝试实现了3D KDE函数,但输出的gg为N×N×M的3D数组,每个X-Y点对应一个关联值维度的分布,维度过大需要压缩:
def kde3D(x, y, z, bandwidth, xbins=60j, ybins=60j, zbins=180j, ** kwargs): """构建3D核密度估计(KDE)""" # 创建采样点网格(默认60x60x180) 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()返回样本的对数似然,取指数得到概率密度 gamma = np.exp(kde_skl.score_samples(xy_sample)) gg = np.reshape(gamma, xx.shape) return xx, yy, zz ,gg
最终解决方法
通过np.argmax和np.max对3D输出gg进行压缩,得到符合需求的N×N二维双通道结果:
- 通道1(X-Y分布):使用
np.max(gg, axis=2),获取每个X-Y点对应的最大概率密度值 - 通道2(关联值估计):使用
np.argmax(gg, axis=2),获取对应最大概率的关联值位置,映射为实际关联值
内容的提问来源于stack exchange,提问作者user2852630
相关产品推荐
相关产品推荐

