特征矩阵与其转置相乘的自协方差矩阵的对称性
Symmetry of autocovariance matrix by multiplying feature matrix with its transpose
有一个数学定理指出,矩阵 A 与其转置相乘会产生对称的正定矩阵(从而导致正特征值)。
为什么对称性测试在这里对中等大小的随机矩阵失败?
它总是适用于小矩阵(20,20 等)
import numpy as np
features = np.random.random((50,70))
autocovar = np.dot(np.transpose(features),features)
print((np.transpose(autocovar) == autocovar).all())
我总是得到 'FALSE' 运行 这个代码。我做错了什么?
我需要自协方差矩阵来执行 PCA,但到目前为止我得到了复杂的特征值...
谢谢!
这可能是由于浮点运算错误。您的矩阵在数值上可能非常接近对称矩阵,但由于有限精度算法的错误,它在技术上是非对称的。因此,数值求解器可能 return 复杂的特征值。
一种解决方案(有点像 hack)是使矩阵对称,即用 symmetric part 替换它。这个矩阵保证是对称的,即使在浮点运算中,它也会非常接近你定义的矩阵(接近机器精度)。这可以通过
实现
autocovar_sym = .5*(autocovar+autocovar.T)
希望对您有所帮助。
有一个数学定理指出,矩阵 A 与其转置相乘会产生对称的正定矩阵(从而导致正特征值)。 为什么对称性测试在这里对中等大小的随机矩阵失败? 它总是适用于小矩阵(20,20 等)
import numpy as np
features = np.random.random((50,70))
autocovar = np.dot(np.transpose(features),features)
print((np.transpose(autocovar) == autocovar).all())
我总是得到 'FALSE' 运行 这个代码。我做错了什么? 我需要自协方差矩阵来执行 PCA,但到目前为止我得到了复杂的特征值...
谢谢!
这可能是由于浮点运算错误。您的矩阵在数值上可能非常接近对称矩阵,但由于有限精度算法的错误,它在技术上是非对称的。因此,数值求解器可能 return 复杂的特征值。
一种解决方案(有点像 hack)是使矩阵对称,即用 symmetric part 替换它。这个矩阵保证是对称的,即使在浮点运算中,它也会非常接近你定义的矩阵(接近机器精度)。这可以通过
实现autocovar_sym = .5*(autocovar+autocovar.T)
希望对您有所帮助。