我想实现以下公式是变量x、y和z的方差-协方差矩阵:
我了解对角线和逆运算,但我不清楚将方差协方差矩阵提高到负半幂的含义。因此,我的问题
- 将协方差矩阵提高到负半幂是什么意思?
- 这假设了线性代数的一般概念是什么?
- 有没有什么好的公式可以将协方差矩阵提高到负半幂?
我想实现以下公式是变量x、y和z的方差-协方差矩阵:
我了解对角线和逆运算,但我不清楚将方差协方差矩阵提高到负半幂的含义。因此,我的问题
什么操作指的是基础样本与不相关分量的去相关; 用作白化矩阵。在分析原始数据矩阵的每一列/源时,这是很自然的操作(有一个协方差矩阵),通过一个不相关的矩阵. 实现这种白化的最常见方法是通过 Cholesky 分解(我们使用,请参阅此线程以获取“着色”样本的示例)但在这里我们使用稍微不常见的马氏美白(我们使用)。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) ) ) )
因此,为了简洁地回答提出的问题:
一个展示第 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)))
将协方差矩阵提高到负半幂是什么意思?
通常,当矩阵乘以负整数幂时,会使用此表示法。在这种情况下,符号是取逆和提高幂的简写形式。IE. 看到这个问题。
这可以扩展到分数幂。第一个问题是:什么意思是?好吧,如果是矩阵的平方根 , 这意味着.
这个问题证明了倒数的平方根等于平方根的倒数,所以定义.
这假设了线性代数的一般概念是什么?
如果一个矩阵是半正定的,它有一个实平方根(和一个唯一的半正定平方根)。幸运的是,任何有效的协方差矩阵都是半正定的。
有没有什么好的公式可以将协方差矩阵提高到负半幂?
使用该定义,您应该结合求逆和求矩阵平方根的方法。(即求逆,然后求平方根。)这些问题是众所周知的,你不应该有寻找算法的问题。