我有一个大输入矩阵,大小为(20,20000),并且正在尝试使用sklearn Python软件包执行PCA。在这里,20代表20个主题,20,000代表20,000个特征。下面是示例代码:
import numpy as np
from sklearn.decomposition import PCA
rng = np.random.RandomState(1)
X = rng.randn(20, 20000)
pca.fit(X)
X.shape =
>> (20, 20000)
pca = PCA(n_components=21)
pca.fit(X)
X_pca = pca.transform(X)
print("Original shape: ", X.shape)
print("Transformed shape: ", X_pca.shape)
>> Original shape: (20, 20000)
>> Transformed shape: (20, 20)
使用PCA,我是否不能获得比我的x值数量更多的组件(为什么我们在获得pca组件时会受到x值长度的限制)?
答案 0 :(得分:2)
PCA implementation执行singular value decomposition以便识别与主要方向分量相关联的奇异值。在您的情况下,此奇异值矩阵为20x20000 rectangular diagonal matrix,其中最多可包含20个分量。
答案 1 :(得分:1)
与sklearn相比,这与PCA实施更多有关,但是:
if n_samples <= n_features:
maxn_pc = n_samples - 1
else:
maxn_pc = n_features
即,如果样本数(n)小于或等于特征数(f),则可以提取的最大非平凡分量的最大数目为n-1。否则,非平凡分量的最大数量为n。