web-dev-qa-db-fra.com

Charges factorielles à l'aide de sklearn

Je veux les corrélations entre les variables individuelles et les principaux composants en python. J'utilise PCA dans sklearn. Je ne comprends pas comment puis-je obtenir la matrice de chargement après avoir décomposé mes données? Mon code est ici.

iris = load_iris()
data, y = iris.data, iris.target
pca = PCA(n_components=2)
transformed_data = pca.fit(data).transform(data)
eigenValues = pca.explained_variance_ratio_

http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html ne mentionne pas comment cela peut être réalisé.

24
Riyaz

Je pense que @RickardSjogren décrit les vecteurs propres, tandis que @BigPanda donne les chargements. Il y a une grande différence: Chargements vs vecteurs propres dans PCA: quand utiliser l'un ou l'autre? .

J'ai créé cette classe PCA avec une méthode loadings.

Les charges, telles que données par pca.components_ * np.sqrt(pca.explained_variance_), sont plus analogues aux coefficients dans une régression linéaire multiple. Je n'utilise pas .T ici car dans la classe PCA liée ci-dessus, les composants sont déjà transposés. numpy.linalg.svd produit u, s, and vt, où vt est la transposition hermétienne, vous devez donc d'abord revenir dans v avec vt.T.

Il y a aussi un autre détail important: les signes (positifs/négatifs) sur les composants et les chargements dans sklearn.PCA peut différer des packages tels que R. Plus d'informations ici:

Dans sklearn.decomposition.PCA, pourquoi les composants_ sont-ils négatifs? .

13
Brad Solomon

Multipliez chaque composant par la racine carrée de sa valeur propre correspondante:

pca.components_.T * np.sqrt(pca.explained_variance_)

Cela devrait produire votre matrice de chargement.

15
BigPanda

Selon ce blog les rangées de pca.components_ sont les vecteurs de chargement. Alors:

loadings = pca.components_
10
RickardSjogren