【发布时间】:2018-09-02 06:12:41
【问题描述】:
我想确定人们会松散地称为自制 KDE 的东西 - 我想。我正在尝试评估一组相当大的数据点的密度。特别是,对于散点图有很多数据点,我想使用颜色渐变来表示密度(请参见下面的链接)。
为了举例,我在下面提供了一对随机的 (x,y) 数据。真实数据会分布在不同的尺度上,因此 X 和 Y 网格点间距存在差异。
import numpy as np
from matplotlib import pyplot as plt
def homemadeKDE(x, xgrid, y, ygrid, sigmaX = 1, sigmaY = 1):
a = np.exp( -((xgrid[:,None]-x)/(2*sigmaX))**2 )
b = np.exp( -((ygrid[:,None]-y)/(2*sigmaY))**2 )
xweights = np.dot(a, x.T)/np.sum(a)
yweights = np.dot(b, y.T)/np.sum(b)
return xweights, yweights
x = np.random.rand(10000)
x.sort()
y = np.random.rand(10000)
xGrid = np.linspace(0, 500, 501)
yGrid = np.linspace(0, 10, 11)
newX, newY = homemadeKDE(x, xGrid, y, yGrid)
我坚持的是,如何将这些值投影回原始 x 和 y 向量,以便我可以使用它来绘制 2D 散点图 (x,y),其中 az 值为给定颜色着色的密度像这样的地图:
plt.scatter(x, y, c = z, cmap = "jet")
绘图和 KDE 方法实际上是受到这个伟大的 answer 的启发
编辑 1 为了消除一些混乱,这个想法是做一个高斯 KDE,它会在一个更粗糙的网格上。 SigmaX 和 sigmaY 分别反映内核在 x 和 y 方向的带宽。
【问题讨论】:
-
我在理解代码时遇到了一些问题。函数中的参数是否与调用函数的方式相反?什么是大写
X?最后但并非最不重要的一点是,这个函数的目的是什么? -
修正了语法。很抱歉。
-
不过,这些权重是多少?为什么两个权重都计算为具有相同
x的产品? -
权重只是对遵循此定义的点的基于网格的权重:mccormickml.com/2014/02/26/kernel-regression
-
也许这会有所帮助,看看如何生成多变量 KDE:sebastianraschka.com/Articles/…
标签: python numpy matplotlib gaussian kde