一、期望
———————————————————————————————————————————
1. 期望是什么?
期望(Expectation)可以理解为“长期的平均值”。比如:
-
掷骰子:一个6面骰子的点数是1~6,每个数字概率是1/6。
期望值 = (1+2+3+4+5+6)/6 = 3.5
意思是:如果你掷骰子无数次,平均每次的结果会趋近于3.5。 -
程序员类比:
假设你每天写代码的bug数量是随机变量,长期平均每天产生2个bug,那么 bug数的期望就是2。
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
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)为:
即:每个数据与均值的差的平方的平均。
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()
计算,但实际分析更常用相关系数。