You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中用谱分解计算airquality数据集协方差矩阵的逆与平方根

基于谱分解计算协方差矩阵的逆与平方根

你使用的协方差矩阵属于实对称正定矩阵,谱分解的标准形式为 matr = V %*% diag(L) %*% t(V),其中V是正交特征向量矩阵,L是按降序排列的正特征值向量。基于谱分解的性质,直接对特征值做对应变换即可得到目标矩阵:

1. 计算协方差矩阵的逆

  • 原理:正定矩阵的逆的谱分解形式为 matr⁻¹ = V %*% diag(1/L) %*% t(V),只需将每个特征值取倒数即可。
  • 对应R实现代码:
# 按你当前累加分量的逻辑实现逆矩阵计算
inv_mat <- (1/L[1]) * V[,1] %*% t(V[,1]) +
           (1/L[2]) * V[,2] %*% t(V[,2]) +
           (1/L[3]) * V[,3] %*% t(V[,3]) +
           (1/L[4]) * V[,4] %*% t(V[,4]) +
           (1/L[5]) * V[,5] %*% t(V[,5]) +
           (1/L[6]) * V[,6] %*% t(V[,6])

# 验证结果:和R内置求逆函数结果对比,差值接近0即为正确
max(abs(inv_mat - solve(matr)))

如果不想手动累加分量,也可以用更简洁的矩阵运算写法:

inv_mat_simple <- V %*% diag(1/L) %*% t(V)

2. 计算协方差矩阵的平方根

  • 原理:正定矩阵的对称平方根(满足 sqrt_mat %*% sqrt_mat = matr)的谱分解形式为 matr^(1/2) = V %*% diag(sqrt(L)) %*% t(V),只需将每个特征值取算术平方根即可。
  • 对应R实现代码:
# 按累加分量的逻辑实现平方根矩阵计算
sqrt_mat <- sqrt(L[1]) * V[,1] %*% t(V[,1]) +
            sqrt(L[2]) * V[,2] %*% t(V[,2]) +
            sqrt(L[3]) * V[,3] %*% t(V[,3]) +
            sqrt(L[4]) * V[,4] %*% t(V[,4]) +
            sqrt(L[5]) * V[,5] %*% t(V[,5]) +
            sqrt(L[6]) * V[,6] %*% t(V[,6])

# 验证结果:平方根矩阵自乘和原协方差矩阵差值接近0即为正确
max(abs(sqrt_mat %*% sqrt_mat - matr))

简洁版矩阵运算写法:

sqrt_mat_simple <- V %*% diag(sqrt(L)) %*% t(V)

内容的提问来源于stack exchange,提问作者user15866126

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:06:02