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

【深度学习与大模型基础】第10章-期望、方差和协方差

一、期望

———————————————————————————————————————————

1. 期望是什么?

期望(Expectation)可以理解为“长期的平均值”。比如:

  • 掷骰子:一个6面骰子的点数是1~6,每个数字概率是1/6。
    期望值 = (1+2+3+4+5+6)/6 = 3.5
    意思是:如果你掷骰子无数次,平均每次的结果会趋近于3.5。

  • 程序员类比
    假设你每天写代码的bug数量是随机变量,长期平均每天产生2个bug,那么 bug数的期望就是2


2. 期望的公式

离散随机变量的期望公式:

E(X)=X_{1}P_{1}+X_{2}P_{3}+...+X_{K}P_{K}

即:每个值 × 它的概率,再全部加起来


3. 代码例子

例子1:计算骰子的期望
import numpy as np# 骰子的可能取值和概率
values = np.array([1, 2, 3, 4, 5, 6])
probabilities = np.array([1/6] * 6)  # 每个概率1/6# 期望 = sum(值 × 概率)
expectation = np.sum(values * probabilities)
print(expectation)  # 输出:3.5

4. 期望的现实意义

  • 决策依据:比如比较两个功能的预期收益,选期望更高的。

  • 风险评估:比如算法的平均时间复杂度就是期望的体现。

  • 机器学习:损失函数的期望最小化(如交叉熵)是训练模型的核心。


5. 注意

  • 期望≠必然结果!比如骰子期望是3.5,但永远掷不出3.5。

  • 期望可能是无限(如某些概率分布的期望不存在)。

———————————————————————————————————————————

二、方差

_____________________________________________________________________________

1. 方差是什么?

方差衡量的是数据的“离散程度”,即数据点与期望值(均值)的偏离程度。
通俗说:方差越大,数据越“散”;方差越小,数据越“集中”

  • 例子1
    两组程序员每天写的代码行数:

    • A组:[90, 100, 110](均值=100,波动小)→ 方差小

    • B组:[50, 100, 150](均值=100,波动大)→ 方差大

  • 例子2(程序员版)
    你的代码在测试环境跑10次,每次耗时可能是:

    • 低方差:[9ms, 10ms, 11ms](稳定)

    • 高方差:[1ms, 10ms, 20ms](波动大,性能不可靠)


2. 方差的公式

设随机变量 X的期望为 E(X),则方差 Var(X)为:

 Var(X)=E[(X-E(X))^{2}]

即:每个数据与均值的差的平方的平均


3. 代码例子

例子1:计算骰子的方差

import numpy as np# 骰子的可能取值和概率
values = np.array([1, 2, 3, 4, 5, 6])
probabilities = np.array([1/6] * 6)  # 每个概率1/6# 期望 = sum(值 × 概率)
expectation = np.sum(values * probabilities)
print(expectation)  # 输出:3.5# 方差 = sum( (x_i - 期望)^2 × 概率 )
variance = np.sum((values - expectation) ** 2 * probabilities)
print(variance)  # 输出:2.916...
 

解释

  • 骰子的结果1~6分别与期望3.5的差是[-2.5, -1.5, -0.5, 0.5, 1.5, 2.5]

  • 平方后求和再平均,得到方差≈2.92(说明骰子点数波动较大)。


4. 方差的意义

  • 稳定性评估:比如API接口的响应时间方差越小越好。

  • 风险控制:在强化学习中,策略的方差高可能导致训练不稳定。

  • 特征选择:机器学习中,方差接近0的特征可能对模型无用(如常数列)。


5. 注意

  • 方差单位是原数据的平方(比如“秒²”),有时用标准差(方差的平方根)更直观。

  • 方差对异常值敏感(一个极端值会大幅拉高方差)。


 三、协方差

———————————————————————————————————————————

1. 协方差是什么?

协方差衡量的是两个随机变量的“协同变化关系”:

  • 协方差 > 0:一个变量增大,另一个也倾向于增大(正相关)。

  • 协方差 < 0:一个变量增大,另一个倾向于减小(负相关)。

  • 协方差 ≈ 0:两个变量无明显线性关系。

通俗比喻

  • 程序员版:

    • 正相关:代码量增加 → Bug数量也增加 😅

    • 负相关:测试覆盖率提高 → Bug数量减少 🎉

    • 无关系:咖啡饮用量和代码性能(可能毫无关联)☕→🤖


2. 协方差公式

对于两个随机变量 X 和 Y,协方差 Cov(X,Y) 定义为:

Cov(X,Y)=E[(X−E[X])(Y−E[Y])]

即:两个变量分别与各自均值的偏差,乘积的平均值


3. 代码例子

例子1:程序员工作时长与Bug数量的关系

假设5天数据:

  • 每天工作时间(小时):[6, 8, 10, 12, 14]

  • 对应Bug数量:[3, 5, 7, 9, 11]

import numpy as np# 数据
hours = np.array([6, 8, 10, 12, 14])  # X
bugs = np.array([3, 5, 7, 9, 11])     # Y# 计算协方差
covariance = np.cov(hours, bugs, ddof=0)[0, 1]  # ddof=0表示总体协方差
print(covariance)  # 输出:10.0
 

解释

  • 协方差=10(正数),说明工作时长和Bug数量呈正相关(工作时间越长,Bug越多)。


例子2:代码覆盖率与Bug数量的关系

新数据:

  • 代码覆盖率(%):[70, 80, 90, 95, 99]

  • Bug数量:[10, 7, 5, 3, 1]

coverage = np.array([70, 80, 90, 95, 99])
bugs = np.array([10, 7, 5, 3, 1])covariance = np.cov(coverage, bugs, ddof=0)[0, 1]
print(covariance)  # 输出:-32.16
 

解释

  • 协方差≈-32(负数),说明覆盖率越高,Bug越少(负相关)。


4. 协方差的意义

  • 特征相关性分析:在机器学习中,协方差矩阵用于筛选高相关性的特征。

  • 投资组合:在量化中,不同股票收益的协方差衡量风险分散效果。

  • 性能优化:比如分析CPU占用和内存使用的协方差,优化资源分配。


5. 注意

  • 协方差的数值大小受数据单位影响(比如“小时×Bug数”),难以直接比较。

  • 更常用的是相关系数(Pearson系数),它标准化协方差到[-1, 1]范围:

    corr = np.corrcoef(hours, bugs)[0, 1]  # 输出:1.0(完全线性正相关)

附:协方差矩阵

协方差矩阵是机器学习中常用的工具,例如PCA降维:

# 计算协方差矩阵
data = np.vstack([hours, bugs])
cov_matrix = np.cov(data, ddof=0)
print(cov_matrix)

输出:

 [[ 8.   -8.8 ]
 [-8.8   9.76]]


总结

  • 协方差告诉你两个变量如何共同变化。

  • 正/负协方差 → 正/负相关;接近0 → 无线性关系。

  • 代码中用np.cov()计算,但实际分析更常用相关系数。

相关文章:

【深度学习与大模型基础】第10章-期望、方差和协方差

一、期望 ——————————————————————————————————————————— 1. 期望是什么&#xff1f; 期望&#xff08;Expectation&#xff09;可以理解为“长期的平均值”。比如&#xff1a; 掷骰子&#xff1a;一个6面骰子的点数是1~6&#x…...

Elasticvue-轻量级Elasticsearch可视化管理工具

Elasticvue一个免费且开源的 Elasticsearch 在线可视化客户端&#xff0c;用于管理 Elasticsearch 集群中的数据&#xff0c;完全支持 Elasticsearch 版本 8.x 和 7.x. 功能特色&#xff1a; 集群概览索引和别名管理分片管理搜索和编辑文档REST 查询快照和存储库管理支持国际…...

危化品经营单位安全生产管理人员备考要点

危化品经营单位安全生产管理人员备考要点 &#x1f4cc; 考试核心内容 ✅ 必考法规&#xff1a; 《危险化学品安全管理条例》重点条款&#xff08;如经营许可条件&#xff09; GB 18218-2018《重大危险源辨识》新标准 安全生产法律责任&#xff08;罚款金额/刑事责任&…...

【python】OpenCV—Tracking(10.6)—People Counting

文章目录 1、功能描述2、代码实现3、效果展示4、完整代码5、涉及到的库函数6、参考来自 更多有趣的代码示例&#xff0c;可参考【Programming】 1、功能描述 借助 opencv-python&#xff0c;用 SSD 人形检测模型和质心跟踪方法实现对人群的计数 基于质心的跟踪可以参考 【pyt…...

使用KeilAssistant代替keil的UI界面

目录 一、keil Assistant的优势和缺点 二、使用方法 &#xff08;1&#xff09;配置keil的路径 &#xff08;2&#xff09;导入并使用工程 &#xff08;3&#xff09;默认使用keil自带的ARM编译器而非GUN工具链 一、keil Assistant的优势和缺点 在日常学…...

FreeRTOS菜鸟入门(五)·空闲任务与阻塞延时的实现

目录 1. 实现空闲任务 1.1 定义空闲任务的栈 1.2 定义空闲任务的任务控制块 1.3 创建空闲任务 2. 实现阻塞延时 2.1 vTaskDelay()函数 2.2 修改 vTaskSwitchContext()函数 3. SysTick 中断服务函数 4. SysTick 初始化函数 通过之前我们了解知道&#xff0c;任…...

Doris部署生产集群最低要求的部署方案

Doris生产集群最低部署方案&#xff08;2025年4月版&#xff09; 一、节点规划与数量 1. FE节点&#xff08;Frontend&#xff09; 数量&#xff1a;至少 3个节点&#xff08;1个Follower 2个 Observer&#xff09;&#xff0c;确保高可用&#xff08;HA&#xff09;。角色分…...

JBOSS反序列化漏洞解析与防范策略CVE-2017-12149

JBOSS反序列化漏洞解析与防范策略 引言 JBOSS是一个流行的开源应用服务器&#xff0c;广泛应用于企业级应用程序的开发和部署。然而&#xff0c;由于其广泛的使用和复杂的架构&#xff0c;JBOSS也成为了黑客攻击的常见目标。近年来&#xff0c;多个JBOSS漏洞被曝光&#xff0…...

MySQL MVCC工作流程详解

MySQL MVCC工作流程详解 1. 基础概念 MVCC&#xff08;多版本并发控制&#xff09;是通过在每行记录后面保存多个版本来实现并发控制的技术&#xff0c;主要用于提供并发事务访问数据库时的读一致性。 2. 核心要素 2.1 事务ID&#xff08;DB_TRX_ID&#xff09; 每个事务都…...

Web3技术下数字资产数据保护的实践探索

在这个信息爆炸的时代&#xff0c;数字资产已经成为我们生活中不可或缺的一部分。随着Web3技术的兴起&#xff0c;它以其去中心化、透明性和安全性的特点&#xff0c;为数字资产的管理和保护提供了新的解决方案。本文将探讨Web3技术在数字资产数据保护方面的实践探索&#xff0…...

从PPT到PNG:Python实现的高效PPT转图工具

从PPT到PNG&#xff1a;Python实现的高效PPT转图工具 在日常工作中&#xff0c;PPT&#xff08;PowerPoint&#xff09;文件是我们常用的演示工具。然而&#xff0c;有时候我们需要将PPT的内容提取为图片格式&#xff08;如PNG&#xff09;以便于展示或保存。手动将每一页PPT保…...

使用 Java 8 Stream实现List重复数据判断

import java.util.*; import java.util.stream.Collectors;public class DeduplicateStreamExample {static class ArchiveItem {// 字段定义与Getter/Setter省略&#xff08;需根据实际补充&#xff09;private String mATNR;private String lIFNR;private String suppSpecMod…...

状态模式详解与真实场景案例(Java实现)

模式定义 状态模式&#xff08;State Pattern&#xff09; 允许对象在其内部状态改变时改变它的行为&#xff0c;使对象看起来像是修改了它的类。属于行为型设计模式&#xff0c;核心思想是将状态抽象为独立对象&#xff0c;不同状态下行为封装在不同状态类中。 解决的问题 …...

BitMap和RoaringBitmap:极致高效的大数据结构

目录 1、引言 2、BitMap:基础 2.1、核心原理 2.2、BitMap的优势 2.3、BitMap的局限性 3、RoaringBitmap:进化 3.1、分段策略 3.2、三种容器类型 3.2.1. ArrayContainer(数组容器) 3.2.2. BitMapContainer(位图容器) 3.2.3. RunContainer(行程容器) 3.3、行…...

【Java基础】Java集合遍历方式

前言 在Java编程中&#xff0c;集合&#xff08;Collection&#xff09;是存储和操作对象的核心工具。遍历集合是开发者最频繁的操作之一&#xff0c;但不同场景下选择合适的遍历方式至关重要。 一、基础遍历方式 1. 基本for循环 适用场景&#xff1a;仅适用于List等有序集…...

Rust-引用借用规则

目录 一、概述 二、借用规则 三、详细解释 3.1 第一条规则 3.2 第二条规则 3.3 第三条规则 四、总结 Welcome to Code Blocks blog 本篇文章主要介绍了 [Rust-引用借用规则] ❤博主广交技术好友&#xff0c;喜欢文章的可以关注一下❤ 一、概述 Rust为确保程序在运行时不…...

如何保障企业数据的安全?软件开发中的数据安全防护措施

引言 随着数字化转型的推进&#xff0c;数据已经成为企业最重要的资产之一。然而&#xff0c;随着数据量的增长&#xff0c;数据泄露、丢失和滥用的风险也不断增加。如何保障企业数据的安全&#xff0c;成为企业在进行软件开发时必须重点关注的问题。本文将介绍软件开发中的一些…...

Linux安装开源版MQTT Broker——EMQX服务器环境从零到一的详细搭建教程

零、EMQX各个版本的区别 EMQX各个版本的功能对比详情https://docs.emqx.com/zh/emqx/latest/getting-started/feature-comparison.html...

【软件工程大系】净室软件工程

净室软件工程&#xff08;Cleanroom Software Engineering&#xff09;是一种以缺陷预防&#xff08;正确性验证&#xff09;为核心的软件开发方法&#xff0c;旨在通过严格的工程规范和数学验证&#xff0c;在开发过程中避免缺陷的产生&#xff0c;而非依赖后期的测试和调试。…...

软考 系统架构设计师系列知识点之杂项集萃(49)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;48&#xff09; 第76题 某文件管理系统在磁盘上建立了位视图&#xff08;bitmap&#xff09;&#xff0c;记录磁盘的使用情况。若磁盘上物理块的编号依次为&#xff1a;0、1、2、……&#xff1b…...

Day(21)--网络编程

网络编程 在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;进行的数据传输 应用场景&#xff1a;即使通信、网友对战、金融证券等等&#xff0c;不管是什么场景&#xff0c;都是计算机和计算机之间通过网络进行的数据传输 java.net 常见的软件架构 C/S&am…...

JVM 调优不再难:AI 工具自动生成内存优化方案

在 Java 应用程序的开发与运行过程中&#xff0c;Java 虚拟机&#xff08;JVM&#xff09;的性能调优一直是一项极具挑战性的任务&#xff0c;尤其是内存优化方面。不合适的 JVM 内存配置可能会导致应用程序出现性能瓶颈&#xff0c;甚至频繁抛出内存溢出异常&#xff0c;影响业…...

封装Tcp Socket

封装Tcp Socket 0. 前言1. Socket.hpp2. 简单的使用介绍 0. 前言 本文中用到的Log.hpp在笔者的历史文章中都有涉及&#xff0c;这里就不再粘贴源码了&#xff0c;学习地址如下&#xff1a;https://blog.csdn.net/weixin_73870552/article/details/145434855?spm1001.2014.3001…...

5.1 GitHub订阅监控系统实战:FastAPI+SQLAlchemy高效架构设计与核心源码揭秘

GitHub Sentinel Agent 分析报告功能设计与实现 关键词:订阅管理 API 设计、GitHub API 集成、SQLAlchemy ORM、JWT 认证、单元测试框架 1. 订阅管理功能架构设计 订阅管理模块采用分层架构设计,通过 FastAPI 构建 RESTful 接口,结合 SQLAlchemy ORM 实现数据持久化: #me…...

2025年推荐使用的开源大语言模型top20:核心特性、选择指标和开源优势

李升伟 编译 随着人工智能技术的持续发展&#xff0c;开源大型语言模型&#xff08;LLMs&#xff09;正变得愈发强大&#xff0c;使最先进的AI能力得以普及。到2025年&#xff0c;开源生态系统中涌现出多个关键模型&#xff0c;它们在各类应用场景中展现出独特优势。 大型语言…...

Linux 入门九:Linux 进程间通信

概述 进程间通信&#xff08;IPC&#xff0c;Inter-Process Communication&#xff09;是指在不同进程之间传递数据和信息的机制。Linux 提供了多种 IPC 方式&#xff0c;包括管道、信号、信号量、消息队列、共享内存和套接字等。 方式 一、管道&#xff08;Pipe&#xff09…...

Spark-SQL核心编程实战:自定义函数与聚合函数详解

在大数据处理领域&#xff0c;Spark-SQL是极为重要的工具。今天和大家分享一下在Spark-SQL开发中的自定义函数和聚合函数的使用&#xff0c;这些都是基于实际项目开发经验的总结。 在Spark-SQL开发时&#xff0c;第一步是搭建开发环境。在IDEA中创建Spark-SQL子模块&#xff0c…...

[Mysql][Mybatis][Spring]配置文件未能正确给驱动赋值,.properties文件username值被替换

这是最初的.properties配置文件&#xff1a; drivercom.mysql.cj.jdbc.Driver urljdbc:mysql://localhost:3306/qykf usernameroot password123456 在Mybatis中引入后进行赋值&#xff1a; <environments default"development"><environment id"deve…...

go 指针接收者和值接收者的区别

go 指针接收者和值接收者的区别 指针接收者和值接收者的区别主要有两点&#xff1a; Go 中函数传参是传值&#xff0c;因此指针接收者传递的是接收者的指针拷贝&#xff0c;值接收者传递的是接收者的拷贝---在方法中指针接收者的变量会被修改&#xff0c;而值接收者的成员变量…...

Redis之缓存更新策略

缓存更新策略 文章目录 缓存更新策略一、策略对比二、常见的缓存更新策略三、如何选择策略四、实际应用示例五、使用 Cache-Aside TTL 的方式&#xff0c;实现缓存商铺信息详情1.引入StringRedisTemplate2.将查询商铺信息加入缓存3.更新商铺信息时移除缓存总结 六、注意事项 一…...