PCA с использованием sklearn - PullRequest
       8

PCA с использованием sklearn

0 голосов
/ 30 октября 2018

У меня большая матрица ввода, размер (20, 20000), и я пытаюсь выполнить PCA, используя пакет Python sklearn. Здесь 20 относится к 20 предметам, а 20 000 относится к 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 (почему мы ограничены длиной наших значений x при получении компонентов pca)?

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Реализация PCA выполняет декомпозицию сингулярных значений , чтобы идентифицировать сингулярные значения, связанные с основными компонентами направления. В вашем случае эта матрица единственного значения представляет собой прямоугольную диагональную матрицу 20x20000 , из которой вы можете иметь не более 20 компонентов.

0 голосов
/ 30 октября 2018

Это больше связано с реализацией PCA, чем с sklearn, но:

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

А именно, если ваше количество выборок (n) меньше или равно количеству признаков (f), наибольшее количество нетривиальных компонентов, которые вы можете извлечь, равно n-1. В противном случае наибольшее количество нетривиальных компонент равно n.

...