使用 QR 分解的协方差矩阵的特征值
Eigen-values of covariance matrix usign QR factorization
给定维度 D x N
的矩阵 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 算法的一部分 而 components
/explained_variance
直接是 eigenvectors/eigenvalues协方差矩阵。
给定维度 D x N
的矩阵 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 算法的一部分 而 components
/explained_variance
直接是 eigenvectors/eigenvalues协方差矩阵。