一、期望
———————————————————————————————————————————
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. 注意
-
方差單位是原數據的平方(比如“秒2”),有時用標準差(方差的平方根)更直觀。
-
方差對異常值敏感(一個極端值會大幅拉高方差)。
?三、協方差
———————————————————————————————————————————
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()
計算,但實際分析更常用相關系數。