Numpy 协方差矩阵的特征值采用GN QR分解

Numpy 协方差矩阵的特征值采用GN QR分解,numpy,linear-algebra,pca,matrix-factorization,Numpy,Linear Algebra,Pca,Matrix Factorization,给定尺寸为dxn的矩阵X,我有兴趣使用QR分解计算C=np.dot(X,X.T)/N的本征值。依据如下: 我们期望C的本征值为np.diag(r.T,r),使用以下公式 q, r=np.linalg.qr(np.dot(X.T, V)) lambdas2=np.diag(np.dot(r.T, r)) / N 但是,我使用下面的代码获取的lambdas2中的值与lambda1中的值不同 from sklearn.decomposition import PCA pca = PCA() pca

给定尺寸为
dxn
的矩阵
X
,我有兴趣使用QR分解计算
C=np.dot(X,X.T)/N
的本征值。依据如下:

我们期望
C
的本征值为
np.diag(r.T,r)
,使用以下公式

q, r=np.linalg.qr(np.dot(X.T, V))
lambdas2=np.diag(np.dot(r.T, r)) / N
但是,我使用下面的代码获取的
lambdas2
中的值与
lambda1
中的值不同

from sklearn.decomposition import PCA
pca = PCA()
pca.fit(X)
lambdas1=pca.explained_variance_
完整的例子是:

import numpy as np
from sklearn.decomposition import PCA
if __name__ == "__main__":
    N = 1000
    D = 20
    X = np.random.rand(D, N)

    X_train_mean = X.mean(axis=0)
    X_train_std = X.std(axis=0)
    X_normalized = (X - X_train_mean) / X_train_std

    pca = PCA(n_components=D)
    cov_ = np.cov(X_normalized) # A D x D array.
    pca.fit(cov_)
    lambdas1 = pca.explained_variance_

    projected_data = np.dot(pca.components_, X_normalized).T # An N x n_components array.

    q, r = np.linalg.qr(projected_data)
    lambdas2 = np.sort(np.diag(np.dot(r.T, r)) / N)[::-1]

我想您需要将
X_normalized.T
传递给PCA的拟合方法,而不是协方差矩阵


因为协方差矩阵的计算是PCA算法的一部分,并且
分量
/
解释的方差
直接是协方差矩阵的特征向量/特征值

你希望
lambdas1
是什么?@feliks谢谢你的回复,我希望
lambdas1
等于
lambda2