首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >协方差矩阵的特征值为负值

协方差矩阵的特征值为负值
EN

Data Science用户
提问于 2021-03-26 19:01:47
回答 2查看 706关注 0票数 2

我正在研究mnist数据集的PCA,我得到了一个非常奇怪的结果,我创建了一个矩阵,它的行是扁平的mnist图像,当我试图计算协方差矩阵的特征值时,我得到了一些负值。但协方差矩阵是半正定的。

代码语言:javascript
运行
复制
np.linalg.eigvals(np.dot(mnistBis[:, 0:20].T, mnistBis[:, 0:20])) # mnistBis.shape=(60000, 784)
代码语言:javascript
运行
复制
array([ 4.79599869e+02, -1.19628465e+02,  9.68398702e+01,  1.88726171e-01,
        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00])

修改:这是完整的代码

代码语言:javascript
运行
复制
import tensorflow.keras.datasets.mnist as mnist
import matplotlib.pyplot as plt
import numpy as np

(x_train, y_train), (x_test, y_test) = mnist.load_data()
mnistBis = np.reshape(x_train, (-1, 28*28))
np.linalg.eigvalsh(np.dot(mnistBis[:, 0:20].T, mnistBis[:, 0:20]))

```
代码语言:javascript
运行
复制
EN

回答 2

Data Science用户

发布于 2021-06-25 15:02:24

这可能是浮点错误的结果。

矩阵为60000×20和稀疏(大部分为零)。计算的结果是非常接近于零的值,计算机没有正确地表示这些值。

票数 1
EN

Data Science用户

发布于 2021-03-26 23:20:00

你似乎在使用一个通用的特征值求解器。也许你的矩阵条件很差,而且算法无法提取它。大量的零特征值和很少的大量特征值显然显得可疑。你试过针对hermitian/对称matricies的求解器吗?艾格 & 艾格瓦尔什

另外,我会给你的所有特征打分,并删除所有零方差的特征。这将在最大可能的特征值上设置一个上限,因为矩阵的迹是特征的数目,而且由于正定矩阵只有正特征值,所以最大的特征值不会大于迹。

票数 0
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/91215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档