web-dev-qa-db-fra.com

Comment utiliser scikit-learn PCA pour réduire le nombre de fonctionnalités et savoir quelles fonctionnalités sont supprimées

J'essaie d'exécuter une ACP sur une matrice de dimensions m x n où m est le nombre de caractéristiques et n le nombre d'échantillons.

Supposons que je veuille préserver les entités nf avec la variance maximale. Avec scikit-learn je peux le faire de cette façon:

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)

Maintenant, je reçois une nouvelle matrice X_new qui a la forme de n x nf. Est-il possible de savoir quelles fonctionnalités ont été supprimées ou conservées?

Merci

24
gc5

Les fonctionnalités que votre objet PCA a déterminées lors de l'ajustement se trouvent dans pca.components_. L'espace vectoriel orthogonal à celui couvert par pca.components_ est supprimé.

Veuillez noter que la PCA ne "supprime" ni ne "conserve" aucune de vos fonctionnalités prédéfinies (codées par les colonnes que vous spécifiez). Il les mélange tous (en sommes pondérées) pour trouver les directions orthogonales de la variance maximale.

Si ce n'est pas le comportement que vous recherchez, la réduction de la dimensionnalité de la PCA n'est pas la solution. Pour certaines méthodes simples de sélection des fonctionnalités générales, vous pouvez consulter sklearn.feature_selection

27
eickenberg

Les entités projetées sur les composants principaux conserveront les informations importantes (axes avec variances maximales) et les axes de largage avec petites variances. Ce comportement ressemble à compression (pas à éliminer). 

Et X_proj est le meilleur nom de X_new, car il s'agit de la projection de X sur principal components

Vous pouvez reconstruire le X_rec en tant que

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

Ici, X_rec est proche de X, mais les informations less important ont été supprimées par la PCA. On peut donc dire que X_rec est débruité.

À mon avis, je peux dire que the noise est rejeté.

2
emeth

La réponse indiquée ci-dessus est incorrecte. Le site sklearn indique clairement que le tableau components_ est trié. il ne peut donc pas être utilisé pour identifier les caractéristiques importantes.

components_: array, [n_components, n_features] Axes principaux dans l'espace des fonctions, représentant les directions de la variance maximale dans les données. Les composants sont triés par explicit_variance_.

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

0
Pramod Kalipatnapu