【问题标题】:Inconsistency between gaussian_kde and density integral sumgaussian_kde和密度积分和不一致
【发布时间】:2015-09-08 02:33:45
【问题描述】:

在估计核密度之后,谁能解释一下原因

d = gaussian_kde(g[:,1])

并计算它的积分和:

x = np.linspace(0, g[:,1].max(), 1500)
integral = np.trapz(d(x), x)

我得到的积分和与 1 完全不同:

print integral
Out: 0.55618

【问题讨论】:

  • 假设 g[:,1] 是非负数
  • 由于高斯分布有无限的支持,估计的高斯内核也将超过g[:,1].max()。尝试将x 的两个边界扩展为g[:,1] 中的数据范围。
  • 用 x = np.linspace(g[:,1].min(), g[:,1].max(), 1500) 结果变化不大:0.55642
  • 试试:rang=g[:,1].max() - g[:,1].min(), x = np.linspace(g[:,1].min() - rang, g[:,1].max() + rang, 1500)
  • 这很有帮助。密度估计后,支持范围发生大于初始数据范围。

标签: python numpy kernel-density


【解决方案1】:

正如我在评论中所说,这是内核密度支持的问题。高斯核有无限的支持。即使适合具有特定范围的数据,高斯核的范围也会从负无穷大到正无穷大。话虽如此,大部分密度将位于拟合数据范围的合理范围内。

如果您想要一个适合原始数据范围内的高斯内核,您可以通过截断内核并将截断的部分重新归一化以积分为 1 来拟合截断的高斯内核,但我不确定这是否是你想要什么。您还可以截断为具有类似逻辑的非负高斯核。

【讨论】:

    猜你喜欢
    • 2021-09-24
    • 2014-02-27
    • 2019-07-10
    • 2015-07-14
    • 2015-05-04
    • 2014-02-20
    • 2014-02-02
    • 2015-01-23
    相关资源
    最近更新 更多