Comment utiliser scikit-learn PCA pour les fonctions de réduction et de savoir quelles fonctionnalités sont jetés
Je suis en train de lancer une ACP sur la matrice de dimensions m × n, où m est le nombre de fonctionnalités et n le nombre d'échantillons.
Supposons que je veuille préserver la nf
fonctionnalités avec le maximum de variance. Avec scikit-learn
je suis capable de 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 une forme de n x nf. Est-il possible de savoir quelles fonctionnalités ont été mis au rebut ou de la non-uns?
Grâce
- Fonctionnalité ne sont pas jetés, ils sont projetés à des dimensions plus petites, et supposons que pour révéler des liens intéressants entre les différentes fonctionnalités.
- Merci Tom, je pensais PCA pourrait être utilisé pour la sélection des fonctionnalités, mais (corrigez si je me trompe), il est seulement utilisé pour remettre à l'échelle les données sur les composantes principales. Comme vous l'avez lu, je pense que je vais fermer la question.
- Votre matrice de sortie doit être de la forme
(n, nf)
, pas(nf, n)
.
Vous devez vous connecter pour publier un commentaire.
Les caractéristiques de votre
PCA
objet a déterminé au cours de la pose sont danspca.components_
. L'espace vectoriel orthogonal à celui engendré parpca.components_
est rejetée.Veuillez noter que l'APC ne pas "jeter" ou "conserver" à tout de votre pré-défini les caractéristiques (codées par les colonnes de vous préciser). Il mélange tous d'entre eux (par une somme pondérée) pour trouver des directions orthogonales de variance maximale.
Si ce n'est pas le comportement que vous recherchez, puis de l'APC de réduction de dimensionnalité est pas la voie à suivre. Pour une simple caractéristique générale des méthodes de sélection, vous pouvez prendre un coup d'oeil à
sklearn.feature_selection
i
, vous pouvez comparerpca.components_[0, i]
pour le reste depca.components_[0]
. Donc, si je comprends votre question correctement, alors la réponse est à chercher dans un PC et de voir qui de vos fonctions ont le plus grand poids.k
fonctionnalités à l'aide desklearn.feature_selection.SelectKBest
à l'aide desklearn.feature_selection.f_classif
ousklearn.feature_selection.f_regression
selon si votre cible est numériques ou catégoriellespca.components_[0,:100]
pour les sélectionner?pca.components_[0, :100]
regarde les 100 premières entrées de la 0e ligne de ce tableau. 0e ligne signifie premier volet, oui, mais:100
sera juste pour vous sélectionner le poids sur les 100 premières caractéristiques dans l'ordre de leur entrée. Si vous voulait évaluer le poids par la taille et l'ampleur (difficile de savoir si c'est une bonne idée), puis à les identifier, vous voulez le fairenp.abs(pca.components_[0]).argsort()[::-1][:100]
(tri/argsort commencer à la plus petite, donc soit utiliser[::-1]
ou un approprate mot-clé pour inverser, puis couper à 100). Supprimernp.abs
si vous souhaitez conserver le signe.Les entités projetées sur les principaux composants de conserver les informations importantes (axes avec des écarts maximaux) et déposer les axes avec de petits écarts. Ce comportement ressemble à
compression
(Pas de jeter).Et
X_proj
est le meilleur nom deX_new
, parce que c'est la projection deX
surprincipal components
Vous pouvez reconstruire le
X_rec
commeIci,
X_rec
est proche deX
, mais leless important
l'information a été lâchée par l'APC. On peut donc direX_rec
est débruiter.À mon avis, je peux dire
the noise
est à jeter.La réponse ci-dessus est incorrecte. Le sklearn site indique clairement que la components_ tableau est trié. donc il ne peut pas être utilisé pour identifier les caractéristiques importantes.
http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html
components_
tableau est trié en fonction de la variance expliquée, ce qui signifie quecomponents_[0]
est PC1,components_[1]
est le PC2, etc, de la plus élevée à la plus faible variance expliquée. Si j'ai bien compris, ce que la réponse ci-dessus dit, c'est que vous pouvez les utiliser pour ensuite sélectionner les entités en entrée ont le plus de poids sur chacun de ces Ordinateurs