У меня большая входная матрица, размер (20, 20000), и я пытаюсь выполнить PCA с помощью пакета sklearn Python. Здесь 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 (почему мы ограничены длиной наших значений x, когда мы получаем компоненты pca)?
Это больше связано с реализацией PCA, чем с sklearn, но:
if n_samples <= n_features:
maxn_pc = n_samples - 1
else:
maxn_pc = n_features
А именно, если ваше количество образцов (n) меньше или равно количеству функций (f), наибольшее количество нетривиальных компонентов, которые вы можете извлечь, равно n-1. В противном случае наибольшее количество нетривиальных компонентов равно n.
Реализация PCA выполняет разложение по сингулярным числам, чтобы идентифицировать особые значения, связанные с основными направленными компонентами. В вашем случае эта матрица сингулярных значений представляет собой 20x20000 прямоугольная диагональная матрица, из которых у вас может быть не более 20 компонентов.