Python:使用SVD实现PCA

问题描述 投票:0回答:1

[我试图找出使用奇异值分解的PCA与使用特征向量分解的PCA相对的差异。

生动描述以下矩阵:

 B = np.array([          [1, 2],
                         [3, 4],
                         [5, 6] ])

[使用特征向量分解计算此矩阵B的PCA时,请遵循以下步骤:

  1. 通过从每列中减去列均值来居中数据(B的条目)>
  2. 计算协方差矩阵C = Cov(B) = B^T * B / (m -1),其中m = B的#行
  3. 查找C的特征向量
  4. PCs = X * eigen_vecs
  5. [使用SVD计算矩阵B的PCA时,请遵循以下步骤:

  1. B的计算SVD:B = U * Sigma * V.T
  2. PCs = U * Sigma
  3. 对于给定的矩阵,我都做了。

通过特征向量分解,我得到了这个结果:

[[-2.82842712  0.        ]
 [ 0.          0.        ]
 [ 2.82842712  0.        ]]

使用SVD,我得到此结果:

[[-2.18941839  0.45436451]
 [-4.99846626  0.12383458]
 [-7.80751414 -0.20669536]]

特征向量分解得到的结果是作为解给出的结果。那么,为什么用SVD获得的结果不同?

[我知道:C = Cov(B) = V * (Sigma^2)/(m-1)) * V.T,我感觉这可能与两个结果不同的原因有关。仍然。谁能帮助我更好地理解?

我试图找出使用奇异值分解的PCA与使用特征向量分解的PCA相对的差异。图片下面的矩阵:B = np.array([[1,...

python data-science pca svd
1个回答
0
投票

请在下面查看与sklearn.decomposition.PCA和numpy.linalg.svd的矩阵的比较。您可以比较或发布您如何得出SVD结果。

© www.soinside.com 2019 - 2024. All rights reserved.