webentwicklung-frage-antwort-db.com.de

So verwenden Sie scikit-learn PCA zur Reduzierung von Funktionen und wissen, welche Funktionen verworfen werden

Ich versuche, eine PCA auf einer Matrix der Dimensionen m x n auszuführen, wobei m die Anzahl der Merkmale und n die Anzahl der Abtastwerte ist.

Angenommen, ich möchte die nf-Features mit der maximalen Varianz beibehalten. Mit scikit-learn kann ich das so machen:

from sklearn.decomposition import PCA

nf = 100
pca = PCA(n_components=nf)
# X is the matrix transposed (n samples on the rows, m features on the columns)
pca.fit(X)

X_new = pca.transform(X)

Nun bekomme ich eine neue Matrix X_new, die eine Form von n x nf hat. Ist es möglich zu wissen, welche Funktionen verworfen wurden oder welche beibehalten wurden?

Vielen Dank

24
gc5

Die Funktionen, die Ihr PCA-Objekt beim Anpassen ermittelt hat, befinden sich in pca.components_. Der Vektorraum orthogonal zu dem von pca.components_ aufgespannten Raum wird verworfen.

Beachten Sie, dass PCA keine Ihrer vordefinierten Funktionen "verwirft" oder "beibehält" (kodiert durch die von Ihnen angegebenen Spalten). Sie mischt alle (nach gewichteten Summen), um die orthogonalen Richtungen der maximalen Varianz zu finden.

Wenn dies nicht das Verhalten ist, nach dem Sie suchen, ist die Reduzierung der PCA-Dimensionalität nicht der richtige Weg. Einige einfache allgemeine Auswahlmethoden für Funktionen finden Sie unter sklearn.feature_selection.

27
eickenberg

Die projizierten Merkmale auf Hauptkomponenten behalten die wichtigen Informationen (Achsen mit maximalen Abweichungen) und die Achsen mit kleinen Abweichungen. Dieses Verhalten gleicht compression (Nicht verwerfen). 

Und X_proj ist der bessere Name von X_new, da dies die Projektion von X auf principal components ist.

Sie können den X_rec als rekonstruieren

X_rec = pca.inverse_transform(X_proj) # X_proj is originally X_new

Hier befindet sich X_rec in der Nähe von X, die less important-Informationen wurden jedoch von PCA gelöscht. Wir können also sagen, dass X_rec denotiert ist.

Meiner Meinung nach kann ich sagen, dass the noise verworfen wird.

2
emeth

Die oben markierte Antwort ist falsch. Die sklearn-Site gibt eindeutig an, dass das components_-Array sortiert ist. Daher kann es nicht zur Identifizierung der wichtigen Merkmale verwendet werden.

components_: Array, [n_components, n_features] Hauptachsen im Merkmalsraum, die die Richtungen der maximalen Abweichung in den Daten darstellen. Die Komponenten sind nach Verweis_Variante_ sortiert.

http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html

0