【问题标题】:numpy eig vs svd . Why they produce different resutlsnumpy eig 与 svd 。为什么它们会产生不同的结果
【发布时间】:2021-03-04 03:24:57
【问题描述】:

我正在尝试了解 numpy svd 与 eig 的想法和行为。 为什么它们会产生不同的结果?我在这里比较苹果和苹果吗? 希望我的用法是正确的。 这是我尝试理解 SVD 和特征向量的简单愚蠢代码

import numpy as np
from sklearn import preprocessing

np.random.seed(123)
np.set_printoptions(suppress=True)

X = np.random.rand(2, 3)
X1 = preprocessing.scale(X, axis=1)

cov = np.matmul(X1.T, X1)/X1.shape[0]
U,S,V = np.linalg.svd(cov)
eig_vals, eig_vec = np.linalg.eig(cov)

ids = eig_vals.argsort()[::-1]
eig_vals = eig_vals[ids]
eig_vec = eig_vec[:,ids]
print("SVD: \n U_svd: \n {} \n V_svd:\n {}\n".format( U, V))
print("Eig: \n U_eig: \n {} \n V_eig: \n {}\n".format(eig_vec, eig_vals))

U 非常接近。然而,Eigen vals 差异很大。谢谢!!

【问题讨论】:

    标签: python numpy svd eigenvalue eigenvector


    【解决方案1】:

    特征值与奇异值不同,因为它们是 S 的平方,如 https://en.wikipedia.org/wiki/Singular_value_decomposition#Relation_to_eigenvalue_decomposition 中所述

    这意味着您的奇异值是特征值的平方根除以样本数。查看此问题的一种方法是转到 scikit-learn 的 PCA 代码 (https://github.com/scikit-learn/scikit-learn/blob/main/sklearn/decomposition/_pca.py),您可以看到它们所做的一切;解释方差由奇异值确定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-25
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      相关资源
      最近更新 更多