PCA使用sklearn

4

我有一个大的输入矩阵,大小为(20, 20000),正在尝试使用sklearn Python包执行PCA。这里,20指的是20个受试者,20000指的是20000个特征。以下是示例代码:

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值长度的限制)?

2个回答

2

这与PCA的实现相关,而不是与sklearn相关:

if n_samples <= n_features:
    maxn_pc = n_samples - 1
else:
    maxn_pc = n_features

如果您的样本数量(n)小于或等于特征数量(f),则可以提取的非平凡组件的最大数量为n-1。否则,最大的非平凡组件数量为n。


2
该文本的翻译如下:

PCA实现执行奇异值分解以确定与主方向组件相关联的奇异值。在您的情况下,这个奇异值矩阵是一个20x20000 矩形对角矩阵,其中最多可以有20个组件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接