将方差-协方差矩阵提高到负半幂

机器算法验证 矩阵 协方差矩阵
2022-03-12 19:13:46

我想实现以下公式C是变量xyz的方差-协方差矩阵:

C=[cov(x,x)cov(x,y)cov(x,z)cov(y,x)cov(y,y)cov(y,z)cov(z,x)cov(z,y)cov(z,z)]

S=(C)1/2

我了解对角线和逆运算,但我不清楚将方差协方差矩阵提高到负半幂的含义。因此,我的问题

  1. 将协方差矩阵提高到负半幂是什么意思?
  2. 这假设了线性代数的一般概念是什么?
  3. 有没有什么好的公式可以将协方差矩阵提高到负半幂?
2个回答

什么操作C12指的是基础样本与不相关分量的去相关;C12 用作白化矩阵在分析原始数据矩阵的每一列/源时,这是很自然的操作A(有一个协方差矩阵C),通过一个不相关的矩阵Z. 实现这种白化的最常见方法是通过 Cholesky 分解(我们使用C=LLT,请参阅此线程以获取“着色”样本的示例)但在这里我们使用稍微不常见的马氏美白(我们使用C=C0.5C0.5)。R 中的整个操作有点像这样:

set.seed(323)
N <- 10000;
p <- 3;
# Define the real C
( C <- base::matrix( data =c(4,2,1,2,3,2,1,2,3), ncol = 3, byrow= TRUE) ) 
# Generate the uncorrelated data (ground truth)
Z <- base::matrix( ncol = 3, rnorm(N*p) ) 
# Estimate the colouring matrix C^0.5
CSqrt <- expm::sqrtm(C)
# "Colour" the data / usually we use Cholesky (LL^T) but using C^0.5 valid too
A <- t( CSqrt %*% t(Z) ) 
# Get the sample estimated C 
( CEst <- round( digits = 2, cov( A )) )
# Estimate the whitening matrix C^-0.5
CEstInv <-  expm::sqrtm(solve(CEst))
# Whiten the data
ZEst <-  t(CEstInv %*% t(A) )
# Check that indeed we have whitened the data 
( round( digits = 1, cov(cbind(ZEst, Z) ) ) )

因此,为了简洁地回答提出的问题:

  1. 这意味着我们可以对样本进行去相关A与该协方差矩阵相关联C这样我们就得到了不相关的分量。这通常被称为美白
  2. 它假设的一般线性代数思想是(协方差)矩阵可以用作投影算子(通过“着色”生成相关样本),但它的逆矩阵也是如此(去相关/“白化”样本)。
  3. 是的,通过使用其特征分解将有效协方差矩阵提高到任何幂(负平方根只是一种特殊情况)的最简单方法C=VΛVT,V是一个包含特征向量的正交矩阵CΛ是一个包含特征值的对角矩阵。然后我们可以很容易地改变对角矩阵Λ如我们所愿并得到相关结果。

一个展示第 3 点的小代码片段。

# Get the eigendecomposition of the covariance matrix
myEigDec <- eigen(cov(A))
# Use the eigendecomposition to get the inverse square root
myEigDec$vectors %*% diag( 1/ sqrt( myEigDec$values) ) %*% t(myEigDec$vectors)
# Use the eigendecomposition to get the "negative half power" (same as above)
myEigDec$vectors %*% diag( ( myEigDec$values)^(-0.5) ) %*% t(myEigDec$vectors)
# And to confirm by the R library expm
solve(expm::sqrtm(cov(A)))

将协方差矩阵提高到负半幂是什么意思?

通常,当矩阵乘以负整数幂时,会使用此表示法。在这种情况下,符号是取逆和提高幂的简写形式。IEA2=(A2)1=(A1)2. 看到这个问题

这可以扩展到分数幂。第一个问题是:什么A1/2意思是?好吧,如果B矩阵的平方根 A, 这意味着BB=A.

这个问题证明了倒数的平方根等于平方根的倒数,所以定义A1/2=(A1/2)1=(A1)1/2.

这假设了线性代数的一般概念是什么?

如果一个矩阵是半正定的,它有一个实平方根(和一个唯一的半正定平方根)。幸运的是,任何有效的协方差矩阵都是半正定的。

有没有什么好的公式可以将协方差矩阵提高到负半幂?

使用该定义,您应该结合求逆和求矩阵平方根的方法。(即求逆,然后求平方根。)这些问题是众所周知的,你不应该有寻找算法的问题。