正态分布拟合 Python

在统计学和概率论中,正态分布(亦称高斯分布)是一种常见的概率分布。它的特点是钟形曲线,对称分布在均值周围,并且由标准差决定其宽度。正态分布在自然界和社会科学中经常出现,并且在数据分析和建模中有着广泛的应用。

正态分布的特点

正态分布的概率密度函数(Probability Density Function, PDF)可以用以下公式表示:

$$ f(x) = \frac{1}{{\sqrt{2\pi}\sigma}}e^{-\frac{(x-\mu)^2}{2\sigma^2}} $$

其中,$x$ 是随机变量的取值,$\mu$ 是均值,$\sigma$ 是标准差。正态分布的均值决定了曲线的中心位置,标准差决定了曲线的宽度。

正态分布的累积分布函数(Cumulative Distribution Function, CDF)可以用以下公式表示:

$$ F(x) = \frac{1}{2}\left[1 + \mathrm{erf}\left(\frac{x-\mu}{\sqrt{2}\sigma}\right)\right] $$

其中,$\mathrm{erf}(x)$ 是误差函数。

正态分布具有以下重要性质:

  • 对称性:正态分布是关于均值对称的,即在均值处取得最大值。
  • 峰度(Kurtosis):正态分布的峰度为3,表示其峰值相对于标准正态分布峰值的尖锐程度。峰度大于3表示峰值更尖锐,峰度小于3表示峰值更平缓。
  • 偏度(Skewness):正态分布的偏度为0,表示其对称性。偏度大于0表示数据分布右偏(正偏),偏度小于0表示数据分布左偏(负偏)。

正态分布的拟合

在实际应用中,我们经常需要拟合数据到正态分布。拟合是指找到一组正态分布的参数(均值和标准差),使得该正态分布最佳地描述给定的数据。

Python中的scipy库提供了用于拟合正态分布的功能。下面是一段代码示例,展示如何使用scipy库来拟合正态分布:

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
from scipy.optimize import curve_fit

# 生成服从正态分布的随机数据
np.random.seed(0)
data = np.random.randn(1000)

# 绘制直方图
plt.hist(data, bins=30, density=True, alpha=0.5)

# 拟合数据到正态分布
mean, std = norm.fit(data)
x = np.linspace(-4, 4, 100)
y = norm.pdf(x, mean, std)

# 绘制拟合曲线
plt.plot(x, y, 'r-', linewidth=2)

# 显示图形
plt.show()

运行以上代码,将生成一组服从正态分布的随机数据,并将其拟合到正态分布曲线。数据的直方图和拟合曲线将一起显示在图形中。

序列图

为了更好地理解正态分布拟合的过程,我们可以绘制一个序列图,展示代码中各个函数的调用关系。下面是使用mermaid语法绘制的序列图:

sequenceDiagram
    participant 数据生成
    participant 直方图
    participant 拟合曲线

    数据生成->直方图: 生成随机数据
    直方图->直方图: 绘制直方图
    直方图->拟合曲线: 调用拟合函数
    拟合曲线->拟合曲线: 拟合数据
    拟合曲线->拟合曲线: 生成拟合曲线数据
    拟合曲