学习过程中遇到难点可以随时让TRAE帮你解析,甚至根据需要生成可视化图像!
众所周知,宋浩老师的课程非常适合同学们学习,但是有些内容需要在你的小脑袋瓜中生成图像才便于理解,冷冰冰的文字容易让你“从入门到放弃”,于是,聪明的你让TRAE帮你分析并完成可视化。
二维独立正态分布分析
我已经创建并运行了 bivariate_normal.py 文件,生成了二维独立正态分布的可视化图形。以下是详细分析:
- 基本概念
二维独立正态分布 是指两个随机变量 X 和 Y 分别服从正态分布,且相互独立时的联合分布。
1.1 标准情况
当 X ~ N(0,1) 和 Y ~ N(0,1) 独立时,联合密度函数为:
f(x,y) = 1/(2π) e^(-(x²+y²)/2), (x,y) ∈ R²
1.2 一般情况
当 X ~ N(μ₁, σ₁²) 和 Y ~ N(μ₂, σ₂²) 独立时,联合密度函数为:
f(x,y) = 1/(2π σ₁ σ₂) e^(-1/2 [(x-μ₁)/σ₁]² + [(y-μ₂)/σ₂]²)
- 关键性质
2.1 独立性条件
对于二维正态分布 (X,Y) ~ N(μ₁, μ₂; σ₁², σ₂²; ρ),有:
X 和 Y 相互独立 ⟺ ρ = 0
其中 ρ 是相关系数。
2.2 密度函数的几何意义
标准情况 :密度函数是一个以原点为中心的钟形曲面,等高线为同心圆
一般情况 :密度函数是一个以 (μ₁, μ₂) 为中心的钟形曲面,等高线为椭圆
2.3 重要性质
边缘分布 :X ~ N(μ₁, σ₁²),Y ~ N(μ₂, σ₂²)
线性组合 :aX + bY ~ N(aμ₁ + bμ₂, a²σ₁² + b²σ₂²)
条件分布 :Y|X=x ~ N(μ₂, σ₂²)
- 可视化分析
3.1 标准二维正态分布(左上角图形)
钟形曲面,中心在原点
最高点在 (0,0),高度为 1/(2π)
曲面关于 x 轴和 y 轴对称
3.2 一般二维正态分布(右上角图形)
钟形曲面,中心在 (1,-1)
由于 σ₁=2 大于 σ₂=1.5,在 x 方向更"平坦"
曲面关于直线 x=1 和 y=-1 对称
3.3 等高线图(左下角图形)
标准二维正态分布的等高线是同心圆
越靠近中心,密度值越大
这直观展示了二维正态分布的对称性
- 与均匀分布的对比
分布类型密度函数几何形状独立性表现
二维独立正态分布
钟形曲面
等高线为椭圆/圆
相关系数 ρ=0
二维均匀分布
常数
长方体
天然独立
- 数学推导
5.1 联合密度的推导
由于 X 和 Y 独立,根据独立性定义:
f(x,y) = f_X(x) * f_Y(y)
其中:
f_X(x) = 1/(√(2π)σ₁) e^(-(x-μ₁)²/(2σ₁²)), f_Y(y) = 1/(√(2π)σ₂) e^(-(y-μ₂)²/(2σ₂²))
相乘后得到联合密度函数。
5.2 体积验证
二维正态分布的密度函数在整个平面上的积分应为1:
∫∫ f(x,y) dxdy = 1 (积分范围:-∞到∞)
这验证了密度函数的归一化性质。
- 代码实现分析
6.1 密度函数计算
def bivariate_normal(x, y, mu1=0, mu2=0, sigma1=1, sigma2=1, rho=0):
if rho == 0: # 独立情况
fx = (1/(sigma1*np.sqrt(2*np.pi))) * np.exp(-0.5*((x-mu1)/sigma1)**2)
fy = (1/(sigma2*np.sqrt(2*np.pi))) * np.exp(-0.5*((y-mu2)/sigma2)**2)
return fx * fy
else: # 一般情况
# 带相关系数的计算
...
6.2 可视化技术
使用 numpy.meshgrid 创建网格点
使用 matplotlib 的 plot_surface 绘制三维曲面
使用 contour 绘制等高线
- 应用场景
二维正态分布在以下领域有广泛应用:
金融风险管理 :建模资产收益率的联合分布
信号处理 :噪声分析和滤波
机器学习 :高斯混合模型、生成对抗网络
统计学 :多元假设检验、置信区域
- 结论
二维独立正态分布是一种重要的多元概率分布,具有以下特点:
数学简洁性 :密度函数形式优美,便于分析
几何直观性 :钟形曲面和椭圆等高线
性质良好 :边缘分布、线性组合、条件分布仍为正态
应用广泛 :在科学和工程领域有重要应用
通过可视化分析,我们可以更直观地理解二维独立正态分布的结构和性质,这有助于深入掌握概率论和数理统计的相关知识。
————————————————————————————————————
代码内容如下:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 定义二维正态分布的密度函数
def bivariate_normal(x, y, mu1=0, mu2=0, sigma1=1, sigma2=1, rho=0):
"""
计算二维正态分布的概率密度函数值
参数:
x, y: 坐标点
mu1, mu2: 均值
sigma1, sigma2: 标准差
rho: 相关系数
返回:
概率密度值
"""
# 当rho=0时(独立),联合密度是边缘密度的乘积
if rho == 0:
fx = (1/(sigma1*np.sqrt(2*np.pi))) * np.exp(-0.5*((x-mu1)/sigma1)**2)
fy = (1/(sigma2*np.sqrt(2*np.pi))) * np.exp(-0.5*((y-mu2)/sigma2)**2)
return fx * fy
else:
# 一般情况(不独立)
term1 = 1/(2*np.pi*sigma1*sigma2*np.sqrt(1-rho**2))
term2 = -1/(2*(1-rho**2))
term3 = ((x-mu1)/sigma1)**2 - 2*rho*((x-mu1)/sigma1)*((y-mu2)/sigma2) + ((y-mu2)/sigma2)**2
return term1 * np.exp(term2 * term3)
# 创建图形
fig = plt.figure(figsize=(18, 12))
# ========== 子图1:标准二维正态分布的三维图 ==========
ax1 = plt.subplot(2, 2, 1, projection='3d')
x = np.linspace(-3, 3, 100)
y = np.linspace(-3, 3, 100)
X, Y = np.meshgrid(x, y)
Z = bivariate_normal(X, Y, 0, 0, 1, 1, 0)
ax1.plot_surface(X, Y, Z, cmap='viridis', alpha=0.8)
ax1.set_title('标准二维独立正态分布 N(0,0;1,1;0)', fontsize=14, fontweight='bold')
ax1.set_xlabel('X', fontsize=11)
ax1.set_ylabel('Y', fontsize=11)
ax1.set_zlabel('f(x,y)', fontsize=11)
ax1.text2D(0.05, 0.95, r'$f(x,y) = \frac{1}{2\pi} e^{-\frac{x^2+y^2}{2}}$', transform=ax1.transAxes, fontsize=10)
# ========== 子图2:一般二维独立正态分布的三维图 ==========
ax2 = plt.subplot(2, 2, 2, projection='3d')
Z2 = bivariate_normal(X, Y, 1, -1, 2, 1.5, 0)
ax2.plot_surface(X, Y, Z2, cmap='plasma', alpha=0.8)
ax2.set_title('一般二维独立正态分布 N(1,-1;2,1.5;0)', fontsize=14, fontweight='bold')
ax2.set_xlabel('X', fontsize=11)
ax2.set_ylabel('Y', fontsize=11)
ax2.set_zlabel('f(x,y)', fontsize=11)
ax2.text2D(0.05, 0.95, r'$f(x,y) = \frac{1}{2\pi\sigma_1\sigma_2} e^{-\frac{1}{2}\left[\left(\frac{x-\mu_1}{\sigma_1}\right)^2 + \left(\frac{y-\mu_2}{\sigma_2}\right)^2\right]}$', transform=ax2.transAxes, fontsize=8)
# ========== 子图3:标准二维正态分布的等高线图 ==========
ax3 = plt.subplot(2, 2, 3)
contour = ax3.contour(X, Y, Z, 10, cmap='viridis')
ax3.clabel(contour, inline=True, fontsize=8)
ax3.set_title('标准二维独立正态分布的等高线(同心圆)', fontsize=14, fontweight='bold')
ax3.set_xlabel('X', fontsize=11)
ax3.set_ylabel('Y', fontsize=11)
ax3.grid(True, linestyle='--', alpha=0.6)
# ========== 子图4:边缘分布与联合分布的关系 ==========
ax4 = plt.subplot(2, 2, 4)
ax4.axis('off')
ax4.text(0.5, 0.95, '二维独立正态分布的性质', fontsize=16, ha='center', fontweight='bold')
ax4.text(0.5, 0.80, r'1. 边缘分布:$X \sim N(\mu_1, \sigma_1^2)$,$Y \sim N(\mu_2, \sigma_2^2)$', fontsize=11, ha='center')
ax4.text(0.5, 0.70, r'2. 联合分布:$(X,Y) \sim N(\mu_1, \mu_2; \sigma_1^2, \sigma_2^2; 0)$', fontsize=11, ha='center')
ax4.text(0.5, 0.60, r'3. 独立性条件:相关系数 $\rho = 0$', fontsize=11, ha='center', color='red')
ax4.text(0.5, 0.50, r'4. 密度函数:$f(x,y) = f_X(x) \cdot f_Y(y)$', fontsize=11, ha='center')
ax4.text(0.5, 0.40, r'5. 线性组合:$aX + bY \sim N(a\mu_1 + b\mu_2, a^2\sigma_1^2 + b^2\sigma_2^2)$', fontsize=11, ha='center')
ax4.text(0.5, 0.30, r'6. 条件分布:$Y|X=x \sim N(\mu_2, \sigma_2^2)$', fontsize=11, ha='center')
plt.tight_layout()
plt.show()
