公式原理
- 对于随机变量(X),(Y),协方差(COV(X,Y)=E(X-EX)(Y-EY)=E(XY)-EXEY)
- 假设选取n个样本即,对于总体(X)的样本即为(X_1=[x_1,x_2,x_3,...]),均值记为(ar{x}=frac{1}{n}sum_i{x_i}),(Y)同上
- 样本方差计算,采用总体的无偏估计量计算:(frac{1}{n-1}sum_{i=1}^n{(x_i-ar{x})^2})
- 协方差矩阵(COV([Z_1,Z_2])=left[ egin{matrix} COV(Z_1,Z_1) &COV(Z_1,Z_2)&\COV(Z_2,Z_1)&COV(Z_2,Z_2)end{matrix} ight])
numpy中的cov方法(可点击跳转官方文档)
- 重要参数:rawvar(default:True),即numpy的cov方法中默认一个矩阵中,行为一个随机变量,列为其观测值(即样本(s)),即:
(s_1) | (s_2) | |
---|---|---|
X | ||
Y |
实例:
import numpy as np
a=[1,2,3]
b=[5,5,6]
z=np.stack((a,b))
np.cov(z)
#即:
#[cov(a,a),cov(a,b)]
#[cov(b,a),cov(b,b)]
#output:
# array([[1. , 0.5 ],
# [0.5 , 0.33333333]])
代码:
def cov(x,y):# x为向量,即观测值(样本)向量
n=len(x)
x_bar=np.mean(x)
y_bar=np.mean(y)
var=np.sum((x-x_bar)*(y-y_bar))/(n-1)
return var
print(cov(a,a),cov(a,b),cov(b,b))
#output:
# 1.0 0.5 0.33333333333333337
references:
https://njuferret.github.io/2019/07/26/2019-07-26-covariance/