Python 高斯kde图下的面积不等于1

Python 高斯kde图下的面积不等于1,python,scipy,probability-density,Python,Scipy,Probability Density,我用高斯分布来画一个概率分布图。然而,我得到的分数并不是我所期望的。我原以为该分布将集成到1。我附上了一个最小的例子 创建一些数据,对选项1权重较大: import numpy as np from scipy import stats option_1 = (0,0) option_2 = (1,2) option_3 = (-2,-2.5) points = [] for i in range(100): points.append(option_1) for i in rang

我用高斯分布来画一个概率分布图。然而,我得到的分数并不是我所期望的。我原以为该分布将集成到1。我附上了一个最小的例子

创建一些数据,对选项1权重较大:

import numpy as np
from scipy import stats

option_1 = (0,0)
option_2 = (1,2)
option_3 = (-2,-2.5)

points = []
for i in range(100):
    points.append(option_1)
for i in range(10):
    points.append(option_2)
    points.append(option_3)

m1, m2 = zip(*points)
创建我的KDE,Z:

yy = np.arange(-3, 3, 0.5)
xx = np.arange(-3, 3, 0.5)
X, Y = np.meshgrid(xx, yy)

positions = np.vstack([X.ravel(), Y.ravel()])
values = np.vstack([m1, m2])
kernel = stats.gaussian_kde(values)
Z = np.reshape(kernel(positions).T, X.shape)
如果需要,可以绘制它:

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
im=ax.imshow(np.rot90(Z), cmap=plt.cm.gist_earth_r,
          extent=[-3, 3, -3, 3])
ax.plot(m2,m1, 'k.', markersize=2)
fig.colorbar(im)

ax.set_xlim([-3, 3])
ax.set_ylim([-3, 3])
plt.show()
然后尝试查找所有框下的区域:

sum_of_boxes = 0
for x in Z:
    for y in x:
        sum_of_boxes += y * 0.5 * 0.5
这将导致
框的总和=1.738937123
。我预计这至少在1左右。然而,我明显地偏离了方向。在其他示例中,对于更大的数字和更重的权重集,我的
area=1


我是否误解了高斯KDE的功能?我希望这些盒子的颜色是由在其中一个盒子中看到结果的概率决定的。如果方框小得多(因此峰值更尖锐),那么我认为绘图比例上显示的数字是有意义的。如何修复此问题,使所有框下的区域变为
~1

这是因为在源域上仅放置36个框,并使用一个角点的值而不是该框的平均高度。维数越高,误差累积越大。使用更多的长方体,并计算长方体中心的高度而不是拐角处的高度,将改进近似值。当kde延伸到无穷大时,总和应该比1小得多。请注意,您计算的是体积,而不是面积。