协方差矩阵
在信号处理算法中的现代滤波器部分经常会看到协方差矩阵,记录下来备忘。
协方差用来表示两个随机变量的相关程度。-1是负相关,+1是正相关,0是不相关。
例如X和Y的协方差,假设有m个样本samples,那么可以计算:
c
o
v
(
X
,
Y
)
=
E
(
(
X
−
E
X
)
(
Y
−
E
Y
)
)
=
1
m
−
1
∑
i
=
1
m
(
x
i
−
x
‾
)
(
y
i
−
y
‾
)
cov(X,Y) = E((X-EX)(Y-EY))=\frac{1}{m-1}\sum_{i=1}^{m}(x_i-\overline{x})(y_i-\overline{y})
cov(X,Y)=E((X−EX)(Y−EY))=m−11i=1∑m(xi−x)(yi−y)
推广到N维随机变量,且有m个样本的情况,就可以由N个随机变量两两构成协方差矩阵,也就是对称矩阵:
Σ
=
[
c
o
v
(
X
1
,
X
1
)
⋯
c
o
v
(
X
1
,
X
n
)
⋮
⋱
⋮
c
o
v
(
X
n
,
X
1
)
⋯
c
o
v
(
X
n
,
X
n
)
]
\pmb{\Sigma}= \begin{bmatrix} cov(X_1, X_1) & \cdots & cov(X_1,X_n)\\ \vdots & \ddots & \vdots \\ cov(X_n, X_1) & \cdots & cov(X_n, X_n) \end{bmatrix}
ΣΣ=⎣
⎡cov(X1,X1)⋮cov(Xn,X1)⋯⋱⋯cov(X1,Xn)⋮cov(Xn,Xn)⎦
⎤
协方差矩阵一般不用逐个计算的方式,而是使用矩阵运算,然后利用像numpy的广播机制加速运算。一般来说求和相乘的运算都可以转化成矩阵乘法运算,然后利用numpy广播机制。求协方差numpy也有接口直接计算:
x = [-2.1, -1, 4.3]
y = [3, 1.1, 0.12]
X = np.stack((x, y), axis=0)
np.cov(X)
>> array([[11.71 , -4.286 ], # may vary
[-4.286 , 2.144133]])
np.cov(x, y)
>>array([[11.71 , -4.286 ], # may vary
[-4.286 , 2.144133]])
np.cov(x)
>>array(11.71)
参考:
Understanding the Covariance Matrix - Parametric Thoughts (janakiev.com)
协方差矩阵是信号处理中用于衡量多个随机变量相互关联性的工具。它由每个随机变量对的协方差构成,表示了变量之间的线性关系强度。例如,两个随机变量X和Y的协方差可以通过样本计算,当结果为正时,它们正相关;为负则负相关;为零则不相关。在N维随机变量情况下,形成对称的协方差矩阵。在Python中,可以使用numpy库的cov函数高效计算协方差矩阵。对于实际应用,了解如何利用矩阵运算和numpy的广播机制能加速这一过程。
2548

被折叠的 条评论
为什么被折叠?



