news 2026/5/8 17:03:33

别再死记硬背了!用Python(NumPy/Pandas)实战演练期望、方差、协方差的所有性质

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别再死记硬背了!用Python(NumPy/Pandas)实战演练期望、方差、协方差的所有性质

用Python实战演练期望、方差、协方差的核心性质

概率统计中的期望、方差和协方差是数据分析的基石概念,但很多学习者停留在死记硬背公式的阶段。本文将带你用NumPy和Pandas,通过代码生成模拟数据并验证这些统计量的核心性质,让抽象理论变得直观可操作。

1. 环境准备与基础概念

在开始前,确保已安装Python 3.7+及以下库:

pip install numpy pandas matplotlib

我们首先生成两组随机变量作为实验数据:

import numpy as np import pandas as pd # 设置随机种子保证结果可复现 np.random.seed(42) # 生成正态分布随机变量 X = np.random.normal(loc=5, scale=2, size=10000) Y = 0.5 * X + np.random.normal(loc=0, scale=1, size=10000) # 生成独立随机变量 Z = np.random.exponential(scale=3, size=10000)

期望(均值)反映随机变量的集中趋势,方差衡量离散程度,协方差表示线性相关性。NumPy中分别用mean(),var()cov()计算:

print(f"X的期望: {np.mean(X):.4f}") print(f"X的方差: {np.var(X):.4f}") print(f"X与Y的协方差:\n{np.cov(X, Y)}")

2. 期望性质的代码验证

2.1 线性性质验证

期望的线性性质指出:E(aX + b) = aE(X) + b。我们用代码验证:

a, b = 3, -2 linear_combo = a * X + b theory = a * np.mean(X) + b practice = np.mean(linear_combo) print(f"理论值: {theory:.4f}, 实际值: {practice:.4f}")

运行结果应显示两者几乎相等(误差来自有限样本)。

2.2 可加性验证

对于任意两个随机变量,E(X + Y) = E(X) + E(Y):

sum_XY = X + Y theory = np.mean(X) + np.mean(Y) practice = np.mean(sum_XY) print(f"理论值: {theory:.4f}, 实际值: {practice:.4f}")

2.3 独立变量的可乘性

当X和Z独立时,E(XZ) = E(X)E(Z):

product_XZ = X * Z theory = np.mean(X) * np.mean(Z) practice = np.mean(product_XZ) print(f"独立变量乘积期望 - 理论: {theory:.4f}, 实际: {practice:.4f}") # 对比非独立变量X和Y product_XY = X * Y print(f"非独立变量乘积期望: {np.mean(product_XY):.4f} vs {np.mean(X)*np.mean(Y):.4f}")

3. 方差性质的实战检验

3.1 方差与期望的关系

D(X) = E(X²) - [E(X)]²:

theory = np.mean(X**2) - np.mean(X)**2 practice = np.var(X) print(f"方差公式验证 - 理论: {theory:.4f}, NumPy计算: {practice:.4f}")

3.2 线性变换的影响

D(aX + b) = a²D(X):

a, b = 1.5, 10 transformed = a * X + b theory = a**2 * np.var(X) practice = np.var(transformed) print(f"线性变换方差 - 理论: {theory:.4f}, 实际: {practice:.4f}")

3.3 独立变量方差可加性

当X和Z独立时,D(X + Z) = D(X) + D(Z):

sum_XZ = X + Z theory = np.var(X) + np.var(Z) practice = np.var(sum_XZ) print(f"独立变量和方差 - 理论: {theory:.4f}, 实际: {practice:.4f}") # 对比非独立变量X和Y print(f"非独立变量和方差: {np.var(X + Y):.4f} vs {np.var(X)+np.var(Y):.4f}")

4. 协方差性质的实验验证

4.1 协方差计算公式

Cov(X,Y) = E(XY) - E(X)E(Y):

cov_matrix = np.cov(X, Y) sample_cov = cov_matrix[0, 1] theory = np.mean(X * Y) - np.mean(X) * np.mean(Y) print(f"协方差公式验证 - 理论: {theory:.4f}, NumPy计算: {sample_cov:.4f}")

4.2 协方差与方差的关系

Cov(X,X) = D(X):

print(f"Cov(X,X): {np.cov(X,X)[0,1]:.4f}, Var(X): {np.var(X):.4f}")

4.3 线性变换性质

Cov(aX, bY) = abCov(X,Y):

a, b = 2, -0.5 transformed_X = a * X transformed_Y = b * Y theory = a * b * np.cov(X, Y)[0, 1] practice = np.cov(transformed_X, transformed_Y)[0, 1] print(f"线性变换协方差 - 理论: {theory:.4f}, 实际: {practice:.4f}")

5. 综合应用:投资组合风险分析

假设有两种资产,收益率分别为X和Z,构建投资组合验证方差公式:

w1, w2 = 0.6, 0.4 # 投资权重 portfolio = w1 * X + w2 * Z # 理论方差计算 var_theory = (w1**2 * np.var(X) + w2**2 * np.var(Z) + 2 * w1 * w2 * np.cov(X, Z)[0,1]) print(f"投资组合方差 - 理论: {var_theory:.4f}, 实际: {np.var(portfolio):.4f}")

可视化不同权重下的风险收益特征:

import matplotlib.pyplot as plt weights = np.linspace(0, 1, 50) portfolio_vars = [] portfolio_returns = [] for w in weights: p = w * X + (1-w) * Z portfolio_vars.append(np.var(p)) portfolio_returns.append(np.mean(p)) plt.figure(figsize=(10, 6)) plt.plot(portfolio_vars, portfolio_returns) plt.xlabel('方差(风险)') plt.ylabel('期望收益') plt.title('投资组合有效前沿') plt.grid(True)

6. 常见问题与调试技巧

当验证结果出现较大偏差时,检查:

  1. 样本量不足:增大size参数(至少10,000)
  2. 随机变量相关性:确保独立变量真正独立
  3. 浮点精度问题:使用np.isclose()比较而非==
  4. 有偏/无偏估计:注意np.var()默认使用N的除数,设置ddof=1得到样本方差
# 比较有偏与无偏方差估计 print(f"总体方差: {np.var(X):.4f}") print(f"样本方差: {np.var(X, ddof=1):.4f}")

7. 性能优化与大数据处理

对于超大规模数据(>1M样本),建议:

  1. 使用np.randomout参数避免临时数组
  2. 分块计算后合并统计量
  3. 考虑Dask或PySpark分布式计算
# 内存高效的大数据生成 large_X = np.empty(10**7) np.random.normal(loc=5, scale=2, size=10**7, out=large_X) # 分块计算均值 chunk_size = 10**6 partial_means = [np.mean(large_X[i:i+chunk_size]) for i in range(0, len(large_X), chunk_size)] final_mean = np.mean(partial_means)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 17:03:15

90.YOLOv5核心原理(CSPDarknet/CIoU)+纯代码实战,零基础友好型教程

摘要 YOLO(You Only Look Once)系列算法是目标检测领域最经典的实时检测框架。本文从零基础出发,系统讲解YOLO的核心原理、网络结构、损失函数,并基于YOLOv5提供一套完整可运行的代码案例。 文章包含数据准备、模型训练、推理预测、性能评估全流程,所有代码均经过验证可直…

作者头像 李华
网站建设 2026/5/8 17:02:58

抖音批量下载器完整指南:5分钟掌握高效内容采集技巧

抖音批量下载器完整指南:5分钟掌握高效内容采集技巧 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support…

作者头像 李华
网站建设 2026/5/8 17:02:55

3步开启AI文献助手:Zotero GPT插件快速上手指南

3步开启AI文献助手:Zotero GPT插件快速上手指南 【免费下载链接】zotero-gpt GPT Meet Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-gpt 你是否曾为海量文献阅读而头疼?每天面对堆积如山的学术论文,摘要阅读、内容理…

作者头像 李华
网站建设 2026/5/8 17:01:52

如何通过智能脚本引擎革新炉石传说自动化体验

如何通过智能脚本引擎革新炉石传说自动化体验 【免费下载链接】Hearthstone-Script Hearthstone script(炉石传说脚本) 项目地址: https://gitcode.com/gh_mirrors/he/Hearthstone-Script 在数字卡牌游戏的黄金时代,炉石传说作为全球最…

作者头像 李华