You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

直方图拟合PDF缩放问题:Gamma分布拟合曲线幅值远低于直方图

问题分析与解决方案

你遇到的核心问题是直方图和拟合PDF的归一化逻辑不匹配,导致两者的幅值差距很大。咱们来拆解一下问题出在哪,以及怎么修正:

为什么会出现幅值差异?

  1. 你的直方图用了weights = np.ones_like(data)/len(data)且未设置density=True,这会让直方图的每个bin高度代表该区间的样本占比(所有bin高度之和为1,属于概率质量的展示)。
  2. 而你对拟合的PDF做了pdf_fit/sum(pdf_fit)的操作——这完全搞错了连续概率分布PDF的归一化逻辑:连续PDF的本质是积分和为1,不是离散点的求和为1。直接除以sum(pdf_fit)会把PDF的幅值大幅压缩,自然远低于直方图。

修正后的代码

只需要把直方图切换到概率密度模式,同时去掉PDF的错误归一化操作即可:

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

# 你的时间序列数据
data = contents[0][1:]

# 绘制概率密度直方图(density=True 表示高度为概率密度,积分和为1)
plt.hist(data, bins=20, color='w', edgecolor='black', alpha=0.5, density=True)

# 拟合Gamma分布并绘制正确归一化的PDF
dist = stats.gamma
param = dist.fit(data)
x = np.linspace(min(data), max(data), 100)
# scipy的pdf方法已经返回归一化到积分1的概率密度值,无需额外处理
pdf_fit = dist.pdf(x, *param[:-2], loc=param[-2], scale=param[-1])
plt.plot(x, pdf_fit, label='Gamma')

plt.legend(loc='upper right')
plt.show()

额外说明

如果你非要用概率质量的方式展示(不推荐,因为连续分布用概率密度更符合统计意义),那需要计算每个直方图bin内PDF的积分值,再用柱状图展示,但这样步骤更繁琐。上面的修正方案是最简洁且符合统计规范的做法。

内容的提问来源于stack exchange,提问作者Yujian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:37:36