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

如何在scipy.stats中正确绘制Beta分布PDF并验证数据拟合效果

如何正确绘制拟合后的Beta分布PDF?

你当前绘制的Beta分布PDF图像异常,核心原因是直接使用无序的原始数据点计算并绘制PDF,导致折线在无序的x值间随机跳转,无法呈现分布的连续形态。以下是修正方案:

问题代码分析

原代码存在两个关键问题:

  • 未导入numpy却使用了np.array
  • 用原始无序数据点x绘制PDF,而非覆盖分布区间的有序序列

修正后的完整代码

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

# 原始数据
x = np.array([0.9999999 , 0.9602287 , 0.8823198 , 0.83825594, 0.92847216,
       0.9632976 , 0.90275735, 0.8383094 , 0.9826664 , 0.9141795 ,
       0.88799196, 0.9272752 , 0.94456017, 0.90466917, 0.8905505 ,
       0.95424247, 0.781545  , 0.9489085 , 0.9578988 , 0.8644015 ])

# 拟合Beta分布参数
beta_params = stats.beta.fit(x)
alpha, beta, loc, scale = beta_params
print(f"拟合参数:alpha={alpha:.3f}, beta={beta:.3f}, loc={loc:.3f}, scale={scale:.3f}")

# 生成覆盖分布区间的有序x轴序列
x_pdf = np.linspace(min(x), max(x), 1000)
# 计算对应x序列的PDF值
beta_pdf = stats.beta.pdf(x_pdf, alpha, beta, loc, scale)

# 绘制图像:直方图(原始数据分布)+ PDF曲线(拟合结果)
plt.figure(figsize=(10,6))
plt.hist(x, bins=10, density=True, alpha=0.5, label='原始数据直方图')
plt.plot(x_pdf, beta_pdf, 'r-', linewidth=2, label='拟合的Beta分布PDF')
plt.xlabel('数值')
plt.ylabel('概率密度')
plt.title('Beta分布拟合结果')
plt.legend()
plt.grid(alpha=0.3)
plt.show()

关键修正点说明

  • 补充numpy导入:修复原代码中缺失的import numpy as np
  • 生成有序x序列:用np.linspace生成1000个从数据最小值到最大值的均匀点,确保PDF曲线连续平滑
  • 结合直方图对比:添加原始数据的密度直方图,能更直观地观察拟合效果
  • 优化图像展示:添加标签、图例、网格,提升图像可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:06:25