Comment blanchir dans l'ACP de la matrice
Je travaille avec Python et j'ai mis en place la PCA à l'aide de ce tutoriel.
Tout fonctionne très bien, j'ai eu la Covariance j'ai fait un succès de la transformation, l'a amené à faire les dimensions d'origine, pas de problème.
Mais comment puis-je procéder à blanchir? J'ai essayé de diviser les vecteurs propres par les valeurs propres:
S, V = numpy.linalg.eig(cov)
V = V / S[:, numpy.newaxis]
et utilisé V pour transformer les données, mais cela a conduit à bizarre valeurs de données.
Quelqu'un pourrait-il svp déchiqueter un peu de lumière sur cette?
Vous voudrez peut-être essayer un plus mathématique spécifique du lieu, peut-être une liste de diffusion associée avec numpy ou scikits.
Merci c'est ce que je vais faire
Merci c'est ce que je vais faire
OriginalL'auteur mabounassif | 2011-07-04
Vous devez vous connecter pour publier un commentaire.
Voici un numpy mise en œuvre de certains code Matlab pour la matrice de blanchiment j'ai reçu de ici.
Vous pouvez également blanchir une matrice en utilisant la SVD:
La deuxième manière est un peu plus lent, mais probablement plus numériquement stable.
Je pense que vous confondez SVD avec eigendecomposition. À l'aide de la méthode SVD vous n'avez pas explicitement calculer la matrice de covariance d'avance - les colonnes de
U
contiendra les vecteurs propres deX * X.T
, et les lignes deVt
contiennent les vecteurs propres deX.T * X
. Puisque les lignes deU
etVt
sont orthonormale de vecteurs, la matrice de covariance desU.dot(Vt)
sera l'identité.Tous les autres exemples que j'ai vu effectuer la svd de la matrice de covariance, par exemplegist.github.com/duschendestroyer/5170087 .
L'exemple que vous venez de lier à la montre ZCA de blanchiment, qui est l'une des nombreuses façons de blanchir une matrice. Pour toute matrice orthogonale
R
,R * X_white
auront également l'identité de la covariance. Dans la ZCA,R
est choisi pour êtreU
(c'est à dire les vecteurs propres deX * X.T
). Cette transformation en particulier les résultats dans blanchi de données qui est aussi proche que possible deX
(dans la méthode des moindres carrés sens). Si vous voulez juste blanchi de données vous pouvez calculerX_white
comme ci-dessus (voir les valeurs dansX_white.T * X_white
si vous ne me croyez pas).Voir aussi: stats.stackexchange.com/a/117463/22156
OriginalL'auteur ali_m
Si vous utilisez python scikit-learn bibliothèque pour cela, il vous suffit de définir la fonction intégrée de paramètre
vérifier la la documentation.
sklearn
bibliothèqueÉdité, merci.
OriginalL'auteur Shubham Bansal
Je pense que vous devez transposer V et de prendre la racine carrée de S. Ainsi, la formule est
matrix_to_multiply_with_data = transpose( v ) * e^(-1/2 )
OriginalL'auteur Krish