使用NumPy验证正态分布特性:realpython/materials项目解析
正态分布概述
正态分布(Normal Distribution),又称高斯分布(Gaussian Distribution),是统计学中最重要、应用最广泛的概率分布之一。它的概率密度函数呈现典型的钟形曲线特征,在自然界和社会科学中十分常见。
正态分布有几个关键特性:
- 对称性:曲线关于均值对称
- 均值、中位数和众数重合
- 68.2%的数据落在均值±1个标准差范围内
- 95.45%的数据落在均值±2个标准差范围内
- 99.73%的数据落在均值±3个标准差范围内
实验验证正态分布特性
我们将使用NumPy的随机数生成器来验证正态分布的这些特性,特别是验证约95%的数据落在±2个标准差范围内的性质。
1. 生成正态分布随机数
首先,我们需要生成一组符合标准正态分布(均值为0,标准差为1)的随机数:
from numpy.random import default_rng
rng = default_rng()
values = rng.standard_normal(10_000)
这里使用了NumPy的default_rng()
创建随机数生成器,然后调用standard_normal()
方法生成10,000个标准正态分布的随机数。
2. 计算实际标准差
虽然理论上标准正态分布的标准差为1,但由于我们使用的是有限样本,实际计算的标准差会略有差异:
std = values.std() # 计算样本标准差
3. 筛选±2个标准差范围内的数据
接下来,我们筛选出落在均值±2个标准差范围内的数据点:
filtered = values[(values > -2 * std) & (values < 2 * std)]
这个布尔索引操作会返回所有满足-2σ < x < 2σ条件的数据点。
4. 计算比例
最后,我们计算落在该范围内的数据点占总数据的比例:
filtered.size / values.size
在实际运行中,这个比例通常会非常接近理论值95.45%,验证了正态分布的特性。
深入理解
为什么使用10,000个样本点?
样本量越大,实验结果越接近理论值。10,000是一个足够大的数字,可以确保结果的稳定性,同时不会造成计算负担。
标准差的计算
values.std()
计算的是样本标准差,使用n-1作为分母(无偏估计)。这与理论标准差(总体标准差)略有不同,但在大样本情况下差异可以忽略。
随机数生成器
default_rng()
是NumPy推荐的新随机数生成器接口,替代了旧的RandomState
。它使用了更现代的算法,性能更好,随机性质量更高。
实际应用
理解正态分布的特性在实际中有广泛的应用:
- 质量控制:制造业中常用±3σ作为控制限
- 假设检验:许多统计检验基于正态分布假设
- 异常检测:远离均值±2σ或±3σ的数据可能被视为异常值
- 金融建模:资产价格变动常假设服从正态分布
扩展思考
- 尝试修改样本量(如100、1,000,000),观察比例变化
- 验证其他范围(如±1σ、±3σ)的比例是否符合理论预期
- 可视化数据分布,绘制直方图叠加理论正态曲线
通过这个简单的实验,我们不仅验证了正态分布的理论特性,也掌握了使用NumPy进行统计分析和随机数生成的基本方法。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考