python画正态分布样本的概型拟合
时间: 2025-01-10 18:31:07 浏览: 111
### 使用 Python 绘制正态分布样本的概率密度函数拟合图
为了实现这一目标,可以按照如下方法操作:
定义所需的库并导入这些库。这包括 `numpy` 用于数值计算,`scipy.stats` 提供统计功能,以及 `matplotlib.pyplot` 来创建图表。
```python
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
```
准备数据集。这里假设有一个服从正态分布的随机样本数组 `data_samples`。可以通过调用 `np.random.normal()` 函数来生成这样的样本集合[^1]。
```python
# 假设均值为4,标准差为0.8,生成1000个样本点
mean_value = 4
std_deviation = 0.8
number_of_samples = 1000
data_samples = np.random.normal(loc=mean_value, scale=std_deviation, size=number_of_samples)
```
接着,基于给定的数据样本来估计最佳匹配该组数据的正态分布参数——即均值 (`loc`) 和方差 (`scale`) 的最大似然估计值。Scipy 中提供了方便的方法来进行此估算。
```python
estimated_mean, estimated_std = stats.norm.fit(data_samples)
print(f"Estimated Mean: {estimated_mean}, Estimated Std Deviation: {estimated_std}")
```
现在有了理论上的 PDF 参数之后,就可以构建一系列 x 轴上均匀分布的数据点,并通过 `stats.norm.pdf()` 方法获取对应位置处的真实概率密度值 y。
```python
x_values_for_pdf = np.linspace(min(data_samples), max(data_samples), 1000)
pdf_y_values = stats.norm.pdf(x=x_values_for_pdf, loc=estimated_mean, scale=estimated_std)
```
最后一步是利用 Matplotlib 库中的绘图工具将上述得到的结果可视化出来。除了显示原始直方图外,还可以在同一张图中叠加绘制出所拟合出来的连续型概率密度曲线以便对比查看效果。
```python
plt.figure(figsize=(10,6))
plt.hist(data_samples, bins=50, density=True, color="skyblue", edgecolor='black', alpha=0.7)
# 添加标签说明
label_text=f'μ={estimated_mean:.2f}\nσ={estimated_std:.2f}'
plt.plot([0], marker='None',
linestyle='-', label=label_text,
color='red')
plt.plot(x_values_for_pdf, pdf_y_values, 'r-', lw=2, label='Fitted Normal Distribution')
plt.title('Histogram and Fitted Probability Density Function of Data Samples')
plt.xlabel('Value')
plt.ylabel('Density')
plt.legend()
plt.grid(True)
plt.show()
```
这段代码将会展示一个带有红色线条表示的最佳拟合正态分布曲线的历史图,其中还包含了关于平均数 μ 和标准偏差 σ 的文字标注信息[^2]。
阅读全文
相关推荐


















