当前位置: 首页 > article >正文

期望、方差与协方差:概率论核心概念与NumPy实践

1. 概率论三剑客期望、方差与协方差的核心概念第一次接触期望值这个概念是在大学概率论课上教授用赌场的轮盘游戏举例长期来看每个数字出现的概率相等庄家通过设置赔率让期望值对自己有利。这个例子让我意识到期望值不是某种虚无缥缈的理论而是能直接影响我们决策的实用工具。后来在量化金融实习时我真正体会到这三个概念如何构成现代数据分析的基石——投资组合优化本质上就是在玩转协方差矩阵。期望值Expected Value是概率分布的中心位置度量可以理解为在大量重复实验中随机变量的平均表现。比如掷骰子的期望值是3.5这意味着如果我们无限次掷骰子结果的平均值将无限接近3.5。在NumPy中这个计算简化为np.mean()一个函数调用但其背后是强大的大数定律在支撑。方差Variance则衡量数据的离散程度计算的是各数据点与期望值距离平方的平均值。还记得我第一次用方差分析A/B测试结果时发现两组均值差异很小但方差差异显著——这直接影响了我们的决策选择方差更小的方案虽然平均提升不大但稳定性更好。NumPy中用np.var()计算时要注意ddof参数的选择通常设为1用于样本方差。协方差Covariance揭示两个变量的联动关系正值表示同向变化负值表示反向变化。在金融领域协方差矩阵是投资组合理论的核心通过计算资产间的协方差来分散风险。NumPy的np.cov()函数返回的协方差矩阵对角线元素其实就是各个变量的方差。关键理解这三个概念构成线性代数和统计学的连接桥梁——期望值是向量的均值中心化方差是向量的自内积协方差则是向量间的内积。这种几何视角在PCA等降维技术中尤为重要。2. NumPy实现从理论到代码的桥梁在NumPy中实现这些统计量看似简单的一行代码背后有许多工程优化。比如np.mean()在底层使用快速求和算法避免精度损失对于大数组还会自动启用多线程计算。以下是典型的使用示例import numpy as np data np.random.normal(0, 1, 1000) # 生成正态分布样本 expected_value np.mean(data) # 期望值 variance np.var(data, ddof1) # 样本方差计算协方差矩阵时NumPy的np.cov()函数有几点需要注意输入矩阵每行代表一个变量每列代表一个观测值返回矩阵的对角线是各变量的方差bias参数控制分母用N还是N-1与ddof参数相反x np.random.rand(100) y 2*x np.random.normal(0, 0.1, 100) cov_matrix np.cov([x, y]) # 2x2协方差矩阵实际项目中我常使用二维数组的转置技巧来处理不同形式的数据输入。比如从CSV读取的金融时间序列通常需要先转置才能正确计算协方差stock_returns np.loadtxt(returns.csv, delimiter,) cov_stocks np.cov(stock_returns.T) # 注意转置操作3. 数学原理与NumPy实现的深度解析理解NumPy这些函数背后的数学原理能帮助我们在特殊情况下正确使用它们。期望值的计算本质上是概率加权平均E[X] Σ (x_i * p_i) 对于离散变量 E[X] ∫ x f(x) dx 对于连续变量而NumPy的mean()实现等价于假设所有样本点等概率1/N。当处理非均匀采样数据时需要手动加权weights np.array([0.1, 0.3, 0.6]) values np.array([5, 10, 15]) weighted_mean np.sum(values * weights) # 手动加权平均方差的计算公式揭示了一个重要特性——它可以分解为平方的期望减去期望的平方:Var(X) E[X^2] - E[X]^2这在某些优化算法中很有用比如可以分别维护两个累加器来计算流数据的方差。NumPy的var()函数默认使用两遍扫描算法保证数值稳定性但对于超大数组我们可以使用单遍在线算法def online_variance(data): n 0 mean 0.0 M2 0.0 for x in data: n 1 delta x - mean mean delta / n delta2 x - mean M2 delta * delta2 return M2 / (n - 1) if n 1 else 0.0协方差的计算公式展示了变量间的线性关系Cov(X,Y) E[(X-E[X])(Y-E[Y])] E[XY] - E[X]E[Y]在NumPy中手动计算协方差可以帮助理解广播机制def manual_cov(x, y): n len(x) return np.sum((x - np.mean(x)) * (y - np.mean(y))) / (n - 1)4. 实际应用案例投资组合优化在金融领域这三个概念直接应用于马科维茨的投资组合理论。假设我们有三种资产的历史收益率数据returns np.array([ [0.02, 0.03, 0.01], # 资产A [0.01, 0.02, 0.015], # 资产B [0.03, 0.01, 0.02] # 资产C ])首先计算期望收益率各资产的平均收益expected_returns np.mean(returns, axis1)然后计算协方差矩阵衡量风险cov_matrix np.cov(returns)通过优化可以找到给定预期收益下风险最小的组合权重。这个优化问题的目标函数就是组合方差权重^T * 协方差矩阵 * 权重。weights np.array([0.3, 0.4, 0.3]) portfolio_variance weights.T cov_matrix weights实战经验协方差矩阵在实际中常常是病态的需要正则化或使用收缩估计。我常用Ledoit-Wolf收缩方法改进协方差估计from sklearn.covariance import LedoitWolf lw LedoitWolf().fit(returns.T) improved_cov lw.covariance_5. 性能优化与大规模计算技巧处理大规模数据时原生NumPy函数可能遇到内存或性能问题。以下是几个实用技巧内存优化对于超大型数组可以使用np.memmap内存映射文件避免内存爆炸data np.memmap(large_array.npy, dtypefloat32, moder, shape(1000000, 100)) batch_mean np.mean(data[:10000]) # 分批计算并行计算使用np.nanmean()等函数时对于超大数组可以手动分块并行from multiprocessing import Pool def chunk_mean(arr, chunks4): with Pool(chunks) as p: return np.mean(p.map(np.mean, np.array_split(arr, chunks)))GPU加速对于超大规模矩阵运算可以考虑CuPy库import cupy as cp x_gpu cp.asarray(large_array) cov_gpu cp.cov(x_gpu)稀疏矩阵优化当协方差矩阵稀疏时使用scipy.sparse可以大幅节省内存from scipy.sparse import csr_matrix sparse_cov csr_matrix(cov_matrix)6. 常见陷阱与调试技巧在实际项目中我踩过不少坑这里分享几个典型问题及解决方案问题1协方差矩阵不是半正定的现象Cholesky分解失败优化算法报错原因数值误差或样本不足导致矩阵性质破坏解决def make_psd(matrix): min_eig np.min(np.real(np.linalg.eigvals(matrix))) if min_eig 0: matrix - 10*min_eig * np.eye(*matrix.shape) return matrix问题2NaN值处理不当现象计算结果出现意外NaN或inf解决使用专门的NaN安全函数nanmean np.nanmean(data_with_nan) nanvar np.nanvar(data_with_nan, ddof1)问题3维度误解导致错误现象协方差矩阵形状不符合预期检查清单确认输入数组是变量在行还是列检查np.cov()是否需要转置输入验证ddof参数设置是否正确问题4数值稳定性问题现象大数吃小数导致精度损失解决对数据进行标准化后再计算standardized (data - np.mean(data, axis0)) / np.std(data, axis0) cov_standardized np.cov(standardized.T)7. 高阶应用随机过程与时间序列分析在时间序列分析中这些概念有更丰富的表现形式。以自协方差函数为例它衡量时间序列与其滞后版本的相关性def autocovariance(x, lag): n len(x) x_mean np.mean(x) return np.sum((x[:n-lag] - x_mean) * (x[lag:] - x_mean)) / (n - 1)对于随机游走过程方差会随时间增长np.random.seed(42) steps np.random.choice([-1, 1], size1000) random_walk np.cumsum(steps) plt.plot(random_walk) plt.title(f方差随时间增长: {np.var(random_walk):.1f})在金融时间序列中我们常常使用滚动窗口计算动态期望和方差def rolling_stats(series, window30): rolling_mean np.zeros(len(series) - window 1) rolling_var np.zeros_like(rolling_mean) for i in range(len(rolling_mean)): segment series[i:iwindow] rolling_mean[i] np.mean(segment) rolling_var[i] np.var(segment, ddof1) return rolling_mean, rolling_var对于多元时间序列滚动协方差矩阵可以捕捉时变的相关性结构def rolling_cov(series, window60): n_assets series.shape[1] n_windows series.shape[0] - window 1 covs np.zeros((n_windows, n_assets, n_assets)) for i in range(n_windows): covs[i] np.cov(series[i:iwindow].T) return covs8. 机器学习中的应用特征工程与模型解释在机器学习项目中这些统计量是特征工程的基础工具。例如特征缩放基于期望和方差的标准化def z_score_normalize(X): means np.mean(X, axis0) stds np.std(X, axis0) return (X - means) / stds特征选择利用方差阈值过滤低方差特征from sklearn.feature_selection import VarianceThreshold selector VarianceThreshold(threshold0.1) X_selected selector.fit_transform(X)PCA降维基于协方差矩阵的特征分解cov_matrix np.cov(X.T) eigenvalues, eigenvectors np.linalg.eig(cov_matrix) sorted_idx np.argsort(eigenvalues)[::-1] principal_components eigenvectors[:, sorted_idx[:2]]线性回归分析参数协方差矩阵反映估计精度X_with_intercept np.c_[np.ones(len(X)), X] beta np.linalg.inv(X_with_intercept.T X_with_intercept) X_with_intercept.T y residuals y - X_with_intercept beta sigma_squared np.var(residuals, ddofX_with_intercept.shape[1]) cov_beta sigma_squared * np.linalg.inv(X_with_intercept.T X_with_intercept)在模型解释中协方差矩阵可以帮助识别共线性问题。我曾经在一个预测项目中发现两个特征的协方差绝对值接近1导致模型不稳定。通过检查协方差矩阵我们决定移除其中一个高度相关的特征cov_feat np.cov(X.T) high_corr np.where(np.abs(cov_feat) 0.9) print(高相关性特征对:, list(zip(high_corr[0], high_corr[1])))

相关文章:

期望、方差与协方差:概率论核心概念与NumPy实践

1. 概率论三剑客:期望、方差与协方差的核心概念第一次接触期望值这个概念是在大学概率论课上,教授用赌场的轮盘游戏举例:长期来看每个数字出现的概率相等,庄家通过设置赔率让期望值对自己有利。这个例子让我意识到,期望…...

7个Foundation Sites移动端优化技巧:打造流畅触摸体验与极速加载性能

7个Foundation Sites移动端优化技巧:打造流畅触摸体验与极速加载性能 【免费下载链接】foundation-sites The most advanced responsive front-end framework in the world. Quickly create prototypes and production code for sites that work on any kind of dev…...

基于MCP协议构建技术术语翻译服务器:架构、集成与实战

1. 项目概述:一个为技术术语翻译而生的MCP服务器 如果你是一名开发者,尤其是在非英语母语环境下工作,或者你的项目需要面向多语言市场,那么你一定遇到过这样的场景:在阅读英文技术文档、编写代码注释,或者与…...

TSF多路调用(Multicall)高级应用:同时处理多个网络请求的性能优化方案

TSF多路调用(Multicall)高级应用:同时处理多个网络请求的性能优化方案 【免费下载链接】tsf coroutine and Swoole based php server framework in tencent 项目地址: https://gitcode.com/gh_mirrors/ts/tsf TSF(Tencent Swoole Framework&#…...

OpenAPI Directory MCP Server:为AI编码助手构建渐进式API发现与集成平台

1. 项目概述:一个为AI编码助手打造的OpenAPI“超级目录” 如果你和我一样,日常重度依赖Claude Code、Cursor或者Windsurf这类AI编码助手,那你肯定遇到过这个痛点:想让它帮你调用某个外部API,比如发个邮件、查个天气&am…...

lichobile代码架构设计:mithril.js + TypeScript最佳实践

lichobile代码架构设计:mithril.js TypeScript最佳实践 【免费下载链接】lichobile lichess.org former mobile application / new one -> github.com/lichess-org/mobile 项目地址: https://gitcode.com/gh_mirrors/li/lichobile lichobile是lichess.or…...

AI Agent集成安全审计:实时扫描代码秘密与漏洞

1. 项目概述:一个为AI Agent设计的智能安全审计工具如果你是一名开发者,尤其是经常使用像Cursor、Claude Code这类AI编程助手的开发者,你肯定遇到过这样的场景:你正在专注地写代码,AI助手在你旁边热情地帮你生成代码片…...

py每日spider案例之某上hai大学登录接口(RSA算法)

逆向接口: 加密位置: const crypto = require(crypto);// 已有的 PEM 格式密钥 const publicKeyPem = `-----BEGIN P...

Arm A-profile架构内存管理与原子操作优化解析

1. Arm A-profile架构内存管理机制解析作为现代处理器架构的核心子系统,内存管理单元(MMU)的设计直接影响着系统的安全性、隔离性和性能表现。Arm A-profile架构通过多级页表转换和细粒度访问控制,为从嵌入式系统到云计算平台的各种应用场景提供了灵活的…...

py每日spider案例之长jiang大学登录接口(AES)

CryptoJS=require("crypto-js");var $aes_chars = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678", aes_chars_len = $aes_chars.length; function randomString...

神经网络机器翻译(NMT)原理与PyTorch实战指南

1. 神经网络机器翻译入门指南第一次接触机器翻译的朋友们可能会被各种术语吓到——编码器、解码器、注意力机制、BLEU分数......但别担心,我们今天要聊的神经网络机器翻译(NMT)其实就像教一个孩子学外语。想象你带着小朋友看双语绘本:先带他理解原文(编码…...

突破3KB限制:clipboard.js如何用原生API实现10倍性能优化的终极指南

突破3KB限制:clipboard.js如何用原生API实现10倍性能优化的终极指南 【免费下载链接】clipboard.js :scissors: Modern copy to clipboard. No Flash. Just 3kb gzipped :clipboard: 项目地址: https://gitcode.com/gh_mirrors/cl/clipboard.js clipboard.js…...

BettaFish开源仪表盘框架:从架构解析到实战部署

1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目,叫“BettaFish”。这名字一听就挺有画面感,斗鱼嘛,色彩斑斓,姿态优雅。这个项目也确实如其名,是一个专注于构建现代化、高性能、可定制仪表盘(Dash…...

HTTPie CLI与Fish Shell:现代Shell的完美支持终极指南

HTTPie CLI与Fish Shell:现代Shell的完美支持终极指南 【免费下载链接】cli 🥧 HTTPie CLI — modern, user-friendly command-line HTTP client for the API era. JSON support, colors, sessions, downloads, plugins & more. 项目地址: https:/…...

Dart OpenAI客户端库实战指南:从集成到Flutter应用开发

1. 项目概述:Dart OpenAI 客户端库深度解析如果你是一名 Dart 或 Flutter 开发者,并且正在寻找一种优雅、高效的方式来集成 OpenAI 的各种 AI 能力,那么anasfik/openai这个开源库绝对值得你花时间深入了解。这不是 OpenAI 的官方 SDK&#xf…...

Rswag DSL深度解析:如何用简洁语法描述复杂API操作和响应

Rswag DSL深度解析:如何用简洁语法描述复杂API操作和响应 【免费下载链接】rswag Seamlessly adds a Swagger to Rails-based APIs 项目地址: https://gitcode.com/gh_mirrors/rs/rswag Rswag是一个为Rails API无缝添加Swagger支持的强大工具,其核…...

交通系统安全审计:90%的漏洞源于日志记录失误,你中招了吗?

🔥关注墨瑾轩,带你探索编程的奥秘!🚀 🔥超萌技术攻略,轻松晋级编程高手🚀 🔥技术宝库已备好,就等你来挖掘🚀 🔥订阅墨瑾轩,智趣学习不…...

SSCom串口调试助手:Linux和macOS下的高效串口通信终极指南

SSCom串口调试助手:Linux和macOS下的高效串口通信终极指南 【免费下载链接】sscom Linux/Mac版本 串口调试助手 项目地址: https://gitcode.com/gh_mirrors/ss/sscom SSCom是一款专为Linux和macOS系统设计的免费串口调试工具,它为嵌入式开发者、物…...

交通数据存证:Java区块链3大“不可篡改”密码,篡改成本高到哭!

🔥关注墨瑾轩,带你探索编程的奥秘!🚀 🔥超萌技术攻略,轻松晋级编程高手🚀 🔥技术宝库已备好,就等你来挖掘🚀 🔥订阅墨瑾轩,智趣学习不…...

医疗电子精密信号调理与电流测量技术解析

1. 医疗电子中的精密信号调理技术解析在医疗电子设备开发领域,信号调理电路的设计直接决定了整个系统的测量精度和可靠性。医疗级信号处理面临三大核心挑战:微伏级生物电信号的提取、强环境噪声的抑制以及长期监测的稳定性要求。以常见的脉搏血氧仪为例&…...

sofa-pbrpc多服务器负载均衡:实现高可用分布式系统的黄金法则

sofa-pbrpc多服务器负载均衡:实现高可用分布式系统的黄金法则 【免费下载链接】sofa-pbrpc A light-weight RPC implement of google protobuf RPC framework. 项目地址: https://gitcode.com/gh_mirrors/so/sofa-pbrpc 在分布式系统架构中,如何确…...

05.YOLO的预测机制:从图像到边界框

在环境搭建完成后,你可能会好奇:当我们把一张图片输入YOLO模型,它究竟是如何识别出物体并输出位置的呢?这个过程的核心就是YOLO的预测机制。理解它,是掌握YOLO工作原理的第一步。 首先,YOLO不采用滑动窗口或区域提议这类传统方法,而是将物体检测看作一个单一的回归问题…...

C++并查集常用操作

并查集 是一种树型的数据结构,用于处理一些不相加集合的合并和查询问题。在使用中常常以森林来表示。 并查集也是用来维护集合的,和前面学习的set不同之处在于,并查集能很方便地同时维护很多集合。如果用set来维护会非常的麻烦。并查集的核心思想是记录每个结点的父亲结点是哪个…...

C++并查集算法简单详解

1、并查集的初始化并查集是用一个数组实现的。首先先定义一个数组:1int father[N];father[i]表示元素i的父亲结点。接下来进行初始化。一开始,每个元素都分别是独立的一个集合,父亲结点就是它自己,所以初始化时将所有father[i]等于…...

MCP 2026权限动态分配实战指南:3步完成细粒度策略编排,规避92%的越权访问风险

更多请点击: https://intelliparadigm.com 第一章:MCP 2026权限动态分配的核心演进与架构定位 MCP(Multi-Context Permission)2026 是新一代零信任权限模型的关键演进,其核心突破在于将静态 RBAC(基于角色…...

C++超详细讲解强制类型转换

1 C 强制类型转换C 方式的强制类型转换的用法如下代码所示:(Type)(Expression)Type:需要转换成的类型Expression:对其进行转换e.g.123int v 0x12345;// 将 int 类型的变量转换成 char 类型char c char(v);C 方式的强制类型转换存在如下问题…...

机器学习中的统计显著性检验:方法与实战指南

1. 统计显著性检验在机器学习结果解读中的核心价值当我们在Kaggle上拿到一个不错的分数,或者在业务场景中看到模型指标提升了2%,最常被问到的问题是:这个结果真的可靠吗?还是只是随机波动?三年前我在电商推荐系统优化时…...

algorithm-stone未来发展规划:AI辅助学习与智能推荐系统

algorithm-stone未来发展规划:AI辅助学习与智能推荐系统 【免费下载链接】algorithm-stone ACM/LeetCode算法竞赛路线图,最全的算法学习地图! 项目地址: https://gitcode.com/gh_mirrors/al/algorithm-stone algorithm-stone作为ACM/L…...

字节跳动开源工作流引擎deer-flow:高可用分布式调度与云原生实践

1. 项目概述:一个面向字节跳动内部的开源工作流引擎最近在梳理团队内部的任务调度和流程编排方案时,我重新审视了字节跳动开源的工作流引擎项目deer-flow。这个项目在GitHub上以bytedance/deer-flow的仓库名存在,虽然官方文档和社区讨论不算特…...

電機方向資料整理

1. 基本知識確認電機的接綫2.SVPWM2.1 svpwm是什么SVPWM(空间矢量脉宽调制)是一种用于三相电压源逆变器的调制技术。核心思想:把逆变器的 8 种开关状态看成空间中的 8 个基本电压矢量(6 个有效矢量,2 个零矢量&#xf…...