J'utilisais l'analyse linéaire discriminante (LDA) de la scikit-learn
bibliothèque d'apprentissage automatique (Python) pour réduire la dimensionnalité et j'étais un peu curieux des résultats. Je me demande maintenant ce que fait la LDA scikit-learn
pour que les résultats soient différents, par exemple, d'une approche manuelle ou d'une LDA effectuée en R. Ce serait formidable si quelqu'un pouvait me donner quelques informations ici.
Ce qui est fondamentalement le plus préoccupant, c'est que le scikit-plot
montre une corrélation entre les deux variables où il devrait y avoir une corrélation 0.
Pour un test, j'ai utilisé l'ensemble de données Iris et les 2 premiers discriminants linéaires ressemblaient à ceci:
IMG-1. LDA via scikit-learn
Ceci est fondamentalement cohérent avec les résultats que j'ai trouvés dans la documentation scikit-learn ici.
Maintenant, j'ai parcouru la LDA étape par étape et j'ai obtenu une projection différente. J'ai essayé différentes approches afin de savoir ce qui se passait:
IMG-2. LDA sur données brutes (pas de centrage, pas de standardisation)
Et voici l'approche étape par étape si je standardisais (normalisation du score z; variance unitaire) les données en premier. J'ai fait la même chose avec le centrage moyen uniquement, ce qui devrait conduire à la même image de projection relative (et c'est effectivement le cas).
IMG-3. LDA étape par étape après centrage moyen ou standardisation
IMG-4. LDA dans R (paramètres par défaut)
LDA dans IMG-3 où j'ai centré les données (ce qui serait l'approche préférée) ressemble également exactement à celle que j'ai trouvée dans un message par quelqu'un qui a fait le LDA dans R
Code de référence
Je ne voulais pas coller tout le code ici, mais je l'ai téléchargé en tant que bloc-notes IPython ici divisé en plusieurs étapes que j'ai utilisées (voir ci-dessous) pour la projection LDA.
- Étape 1: calcul des vecteurs moyens à dimensions d
Étape 2: Calcul des matrices de dispersion
2.1 La matrice de dispersion intra-classe est calculée par l'équation suivante:
2.2 La matrice de dispersion entre classes est calculée par l'équation suivante: où est la moyenne globale.
Étape 3. Résolution du problème des valeurs propres généralisées pour la matrice
3.1. Tri des vecteurs propres en diminuant les valeurs propres
3.2. Choisir k vecteurs propres avec les plus grandes valeurs propres. Combiner les deux vecteurs propres avec les valeurs propres les plus élevées pour construire notre matrice de vecteurs propres
Étape 5: Transformer les échantillons dans le nouveau sous-espace