.. _chap-coursReductionVolume: ###################################### Cours - Réduction du volume de données ###################################### [`Diapositives du cours `_] Nous nous intéressons ici à la première approche de passage à l'échelle, qui consiste à réduire fortement le volume de calculs à réaliser. Une première méthode est la diminution forte du volume de données, en choisissant un échantillon de données et/ou un nombre réduit de variables. Les résultats obtenus ainsi sont en général des *approximations* des résultats qui seraient issus des données complètes. Une autre méthode, examinée dans `la séance de cours suivante `_, consiste à travailler sur toutes les données (et toutes les variables) mais en exploitant leurs caractéristiques de similarité afin de diminuer *l'ordre de complexité* des calculs à réaliser. Des méthodes hybrides peuvent également être employées, comme la réduction de l'ordre de complexité *après* réduction de dimension (permettant de diminuer l'impact de la *malédiction de la dimension*, cf. `cette partie `_ d'une séance suivante). Nous verrons que chacune de ces approches peut présenter dans certains cas des inconvénients majeurs, la seule solution étant alors le recours au calcul parallèle. Si la diminution du volume de données à traiter est assez forte, une architecture classique, centralisée, peut s'avérer suffisante. Si les données disponibles présentent une « faible densité en information » alors cette approche ne produira pas de bons résultats : avec un échantillon trop petit, les « régularités » recherchées par la méthode de fouille ne se manifesteront pas suffisamment pour être détectables ; avec trop peu de variables, les « régularités » trouvées seront très incomplètes ou les capacités prédictives insuffisantes. *************************************** Calculs sur un échantillon *************************************** Nous examinons d'abord brièvement l'échantillonnage, qui vise à inférer des propriétés concernant toute la « population » de :math:`N` données à partir d'un sous-ensemble (échantillon) de seulement :math:`n \ll N` données. Une présentation détaillée peut être trouvée par exemple dans [Til01]_. Une question importante abordée par la théorie de l'échantillonnage est la construction des échantillons, basée sur des méthodes non aléatoires ou des méthodes aléatoires. Dans la première catégorie on peut trouver la construction d'un échantillon par choix d'expert (une bonne connaissance du problème est supposée permettre à un expert de désigner les données ou les observations à retenir dans l'échantillon), par le volontariat (les observations concernent des individus qui se portent volontaires), etc. Ces méthodes répondent souvent à des considérations pragmatiques mais il est difficile de qualifier la représentativité de l'échantillon, donc la qualité de l'inférence qui est réalisée. Parmi les méthodes aléatoires de construction d'échantillon nous mentionnons ici l'échantillonnage simple, l'échantillonnage stratifié et l'échantillonage en grappes (voir par ex. [Til01]_ pour d'autres méthodes et des présentations plus détaillées). **L'échantillonnage simple** consiste à faire des tirages indépendants, habituellement sans remise, chaque donnée (ou observation) ayant la même probabilité d'être sélectionnée, :math:`p_s = \frac{n}{N}`. **L'échantillonnage stratifié** considère que l'ensemble de données est constitué de sous-ensembles (ou *strates*) qui présentent une certaine *homogénéité* interne par rapport à l'étude. Un échantillonnage simple est ensuite appliqué dans chaque strate. Par rapport à l'application directe d'un échantillonnage simple à l'ensemble de la population, l'application d'un échantillonnage stratifié augmente la précision pour une même valeur de :math:`n` (ou conserve la précision avec :math:`n` plus faible). Il est par ailleurs possible de moduler la représentation des différents strates dans l'échantillon en choisissant une valeur de :math:`p_s` adéquate dans chaque strate. .. admonition:: Exemple : Pour une étude des pratiques des clients du commerce en ligne, on considère qu'il y a une certaine homogénéité à l'intérieur de chaque tranche de revenus. Si un échantillonnage simple est appliqué directement sur la population entière, la proportion relative de chaque tranche de revenus n'est pas bien conservée dans l'échantillon ; plus la population d'une tranche de revenus est faible, plus son taux de présence dans l'échantillon s'éloignera en général de :math:`p_s`. On applique alors un échantillonnage stratifié : on partitionne la population en tranches de revenus (1 tranche = 1 strate) et on applique un échantillonnage simple en imposant un même taux de sélection dans chaque tranche. **L'échantillonnage en grappes** vise en général à simplifier la réalisation de l'étude. On considère que l'ensemble de données est constitué de sous-ensembles (ou « grappes ») tels que les différences intra-grappe sont plus fortes que les différences inter-grappe. On sélectionne alors au hasard des « grappes » et on examine tous les individus de chaque grappe choisie. Par rapport à un échantillonnage simple appliqué à l'ensemble de la population, l'échantillonnage en grappes facilite la réalisation de l'étude s'il est plus simple d'obtenir les données par grappes, tout en conservant la précision (si les différences sont plus fortes à l'intérieur de chaque grappe qu'entre les grappes). .. admonition:: Exemple : Pour une étude des pratiques sportives des élèves de troisième en zone urbaine, on considère qu'il y a autant de diversité à l'intérieur d'un même collège qu'entre collèges. Avec un échantillonnage simple il faudrait vraisemblablement interroger quelques élèves de chaque collège de chaque zone urbaine. Un échantillonnage en grappes, avec 1 grappe = 1 collège, nous amènerait plutôt à sélectionner quelques collèges et à interroger tous les élèves de troisième de ces collèges, solution bien plus facile à mettre en œuvre. Quelle que soit la méthode de construction d'échantillon utilisée, il est important de garder à l'esprit que la taille de l'échantillon doit être suffisante pour que les régularités supposées (qui seront recherchées) y trouvent un support satisfaisant. Échantillonnage dans Spark ************************** Dans `Spark `_ on trouve l'échantillonnage simple et l'échantillonnage stratifié comme méthodes de base pour les structures de données de l'API actuelle (DataFrame, Dataset) ou précédente (RDD) : **Échantillonnage simple**, peut s'appliquer à tout DataFrame (ou Dataset) et retourne un DataFrame (ou Dataset) de même type : méthode ``sample(withReplacement: Boolean, fraction: Double, seed: Long): Dataset[T]`` ; ``fraction`` indique la probabilité de choisir chaque donnée. La taille de l'échantillon :math:`n` ne peut pas être contrôlée de façon précise, chaque donnée étant sélectionnée avec une probabilité :math:`p_s` (plus :math:`N` sera grand, plus :math:`n` approchera en général :math:`p_s \cdot N`). **Échantillonnage stratifié**, peut s'appliquer à tout DataFrame et retourne un DataFrame de même type : méthode ``sampleBy[T](col: String, fractions: Map[T, Double], seed: Long): DataFrame`` (dans ``DataFrameStatFunctions``) ; ``fractions`` indique, pour chaque clé :math:`k`, la probabilité :math:`f_k` de choisir chaque donnée et :math:`N_k` est le nombre de données de clé :math:`k` dans le RDD initial ; ``col`` est le nom de la colonne contenant les clés qui identifient les strates ; respecte de façon approximative la taille d'échantillon visée (:math:`f_k \cdot N_k`). .. #. ``sampleByKey(withReplacement: Boolean, fractions: Map[K, Double], seed: Long): RDD[(K, V)]`` : méthode de base (une seule passe sur les données) qui fait un tirage pour chaque donnée et respecte de façon *approximative* la taille d'échantillon visée (:math:`f_k \cdot N_k`) ; ``fractions`` indique, pour chaque clé :math:`k`, la probabilité :math:`f_k` de choisir chaque donnée et :math:`N_k` est le nombre de données de clé :math:`k` dans le RDD initial. .. #. ``sampleByKeyExact(withReplacement: Boolean, fractions: Map[K, Double], seed: Long): RDD[(K, V)]`` : méthode plus coûteuse (deux passes sur les données) qui retourne :math:`\left\lceil f_k \cdot N_k \right\rceil` données pour chaque clé :math:`k` (mêmes notations que pour ``sampleByKey()`` ci-dessus). *************************************** Réduction de dimension *************************************** Considérons :math:`N` données (observations) définies dans :math:`\mathbb{R}^m`. Une réduction de dimension consiste à obtenir une représentation des :math:`N` données dans :math:`\mathbb{R}^k`, avec :math:`k \ll m`. Cette diminution du nombre de variables décrivant les données peut avoir plusieurs objectifs : #. Réduire le volume de données à traiter, tout en conservant au mieux « l'information utile ». Il est nécessaire de définir d'abord ce qu'est information utile. #. Améliorer le rapport signal / bruit et supprimant des variables non pertinentes. Il est nécessaire de définir d'abord ce qu'est une variable non pertinente. #. Améliorer la « lisibilité » des données en mettant en évidence des relations entre variables ou groupes de variables ou en facilitant la visualisation. Il est nécessaire de définir d'abord ce qu'il faut mettre en évidence. #. Atténuer la « malédiction de la dimension » (*curse of dimensionality*, voir `cette partie `_ d'une séance suivante). Vu la multiplicité des objectifs et des critères associés, de nombreuses méthodes de réduction de dimension ont été définies. Approches de réduction de dimension *************************************** La construction de méthodes de réduction de dimension suit une des deux approches suivantes : la sélection de variables et la transformation de variables. La **sélection de variables** (*feature selection*, voir par ex. la synthèse de [TAL14]_) consiste à choisir un sous-ensemble de :math:`k` variables parmi les :math:`m` variables initiales. Les variables sélectionnées gardent ainsi leur signification initiale, ce qui contribue à la lisibilité des modèles construits ultérieurement. Cette approche est potentiellement sous-optimale par rapport à la seconde approche qui est la construction de nouvelles variables. Chaque méthode de sélection de variables fait partie d'une des catégories suivantes : #. Méthodes de filtrage : basées sur des critères (par ex. minimisation de la redondance entre variables, maximisation de l'information mutuelle avec la classe à prédire) qui ne tiennent pas compte des résultats du modèle décisionnel ultérieur. #. *Wrappers* : basées sur des mesures des performances du modèle décisionnel qui emploie les variables sélectionnées. #. Méthodes intégrées (*embedded*) : l'opération de sélection est indissociable de la méthode de modélisation décisionnelle. La sélection de variables est confrontée à un problème de complexité algorithmique : pour choisir :math:`k` variables parmi :math:`m`, l'espace de recherche contient :math:`C_m^k` possibilités. Afin d'éviter une recherche exhaustive dans cet espace, des méthodes approximatives sont adoptées (la solution est en général sous-optimale par rapport à celle d'une recherche exhaustive). Nous pouvons mentionner les approches suivantes : #. Tri des :math:`m` *variables initiales* par rapport à un critère de « pertinence » exprimable par variable individuelle, indépendamment des autres, puis sélection des :math:`k` premières (par ex., dans Spark, sélection sur la base du test du :math:`\chi^2` avec ``ChiSqSelector``). #. Construction incrémentale de l'ensemble de :math:`k` variables : à chaque itération on ajoute la variable qui forme le meilleur ensemble avec celles déjà sélectionnées lors des itérations précédentes. La **transformation de variables** (*feature extraction*, expression qui peut avoir une signification plus large) consiste à construire de *nouvelles* variables à partir des variables initiales. Cette approche présente plus de flexibilité par rapport à la seule sélection de variables. En revanche, si les variables initiales ont une signification précise, les nouvelles variables sont rarement interprétables. Les nouvelles variables sont obtenues par des méthodes qui peuvent être (voir les figures suivantes) #. Linéaires : trouver un sous-espace linéaire de dimension :math:`k` dans l'espace initial :math:`\mathbb{R}^m`. #. Non linéaires : trouver un sous-espace non linéaire de dimension :math:`k` dans l'espace initial. .. figure:: figures/lineaire.png :width: 50 % :alt: Sous-espace bidimensionnel linéaire dans l'espace tridimensionnel :align: center Sous-espace bidimensionnel linéaire dans l'espace tridimensionnel .. figure:: figures/manifold.png :width: 50 % :alt: Sous-espace bidimensionnel non linéaire dans l'espace tridimensionnel :align: center Sous-espace bidimensionnel non linéaire dans l'espace tridimensionnel Nous rappellerons brièvement dans la suite trois méthodes factorielles linéaires : #. L'analyse en composantes principales (ACP), méthode à caractère exploratoire, adaptée à des données décrites par des variables quantitatives. #. L'analyse factorielle discriminante (AFD), méthode à caractère exploratoire et décisionnel, adaptée à des données décrites par des variables quantitatives et appartenant à plusieurs classes. #. L'analyse des correspondances multiples (ACM), méthode à caractère exploratoire, adaptée à des données décrites par des variables nominales. Pour plus de détails concernant ces méthodes classiques vous êtes invités à consulter des sources externes (par ex. [CABB04]_, [Sap11]_, voir aussi `le support en ligne de l'UE RCP208 `_). Analyse en composantes principales *************************************** L'ACP est une méthode d'analyse exploratoire des données : à partir d'un ensemble de :math:`N` observations caractérisées par :math:`m` variables quantitatives initiales, on cherche à condenser la représentation des données en conservant au mieux leur organisation globale. Pour cela, on représente les données sur :math:`k` nouvelles variables (les composantes principales, :math:`k < m`) obtenues comme des combinaisons linéaires des variables initiales, en conservant le plus de variance possible. Dans l'analyse de données massives, l'ACP est principalement utilisée pour : #. Condenser les données en conservant au mieux leur organisation globale. #. Visualiser en faible dimension l'organisation prépondérante des données. #. Interpréter les corrélations ou anti-corrélations entre multiples variables. #. Interpréter les projections des prototypes de classes d'observations par rapport aux variables. #. Préparer des analyses ultérieures en éliminant les sous-espaces dans lesquels la variance des données est très faible (assimilés, parfois à tort, à des sous-espaces de bruit, sans information utile). Dans la matrice :math:`\mathbf{R}` des données brutes chaque ligne correspond à une observation et chaque colonne à une variable initiale. L'ACP connaît plusieurs variantes, selon le pré-traitement appliqué à la matrice :math:`\mathbf{R}` : #. ACP générale : appliquée directement sur :math:`\mathbf{X} = \mathbf{R}`. Interviennent dans l'analyse à la fois la *position* du nuage d'observations par rapport à l'origine et la *forme* du nuage. Cette variante est utilisée rarement, essentiellement pour tenir compte du zéro naturel de certaines variables. #. ACP centrée : centrage préalable des variables. La matrice analysée, :math:`\mathbf{X}`, est obtenue en transformant :math:`\mathbf{R}` pour que chaque variable (chaque colonne) soit de moyenne nulle. Cela revient à s'intéresser à la *forme* du nuage d'individus par rapport à son centre de gravité. Cette variante est utilisée lorsque les variables initiales sont directement comparables (de même nature, intervalles de variation comparables). #. ACP normée : réduction préalable des variables. La matrice analysée, :math:`\mathbf{X}`, est obtenue en transformant :math:`\mathbf{R}` pour que chaque variable (chaque colonne) soit de moyenne nulle et d'écart-type unitaire. On s'intéresse donc à la forme du nuage d'individus après centrage et réduction des variables. Cette variante (la plus fréquemment rencontrée) est employée lorsque les variables (toutes quantitatives) sont de nature différente ou présentent des intervalles de variation très différents. +------------------------------------+------------------------------------+------------------------------------+ |.. figure:: figures/acpGenerale.png |.. figure:: figures/acpCentree.png |.. figure:: figures/acpReduite.png | | :width: 60 % | :width: 60 % | :width: 68 % | | :align: center | :align: center | :align: center | | | | | | ACP générale | ACP centrée | ACP normée | +------------------------------------+------------------------------------+------------------------------------+ | Les lignes de la matrice analysée, :math:`\mathbf{X}`, décrivent les observations dans l'espace des variables initiales, alors que les colonnes de :math:`\mathbf{X}` décrivent les variables dans l'espace des observations. Deux analyses sont donc possibles, l'analyse du nuage des observations et l'analyse du nuage des variables. Dans l'analyse du **nuage des observations** nous cherchons :math:`k` nouvelles variables obtenues comme des combinaisons linéaires des variables initiales (c'est à dire, un sous-espace linéaire de dimension :math:`k` de l'espace initial) telles que la projection des observations sur ces variables conserve le plus de *variance* (ou « dispersion »). Il est facile de montrer (voir par ex. [CABB04]_, [Sap11]_) que le sous-espace de dimension :math:`k` recherché est généré par les :math:`k` vecteurs propres :math:`\mathbf{u}_{\alpha}` associés aux :math:`k` plus grandes valeurs propres :math:`\lambda_{\alpha}` de la matrice :math:`\mathbf{X}^T \mathbf{X}`, satisfaisant donc l'équation :math:`\mathbf{X}^T \mathbf{X} \mathbf{u}_{\alpha} = \lambda_{\alpha} \mathbf{u}_{\alpha}`, :math:`\alpha \in \{1,\ldots,k\}`. Les vecteurs :math:`\mathbf{u}` sont en général choisis de norme égale à 1. Rappelons ici que si :math:`\mathbf{u}_{\alpha}` satisfait :math:`\mathbf{X}^T \mathbf{X} \mathbf{u}_{\alpha} = \lambda_{\alpha} \mathbf{u}_{\alpha}` alors pour tout :math:`\beta \in \mathbb{R}`, :math:`\beta \mathbf{u}_{\alpha}` satisfait la même relation. Nous remarquerons que pour l'ACP centrée :math:`\mathbf{X}^T \mathbf{X}` est la matrice des *covariances empiriques* alors que pour l'ACP normée :math:`\mathbf{X}^T \mathbf{X}` est la matrice des *corrélations empiriques*. La matrice :math:`\mathbf{X}^T \mathbf{X}` est symétrique et (semi-)définie positive, donc toutes ses valeurs propres sont réelles, positives (certaines nulles si la matrice est semi-définie) et les vecteurs propres associés à des valeurs propres différentes sont orthogonaux. La figure suivante montre un exemple d'analyse du nuage des observations. Les :math:`N = 5500` données initiales de dimension :math:`m = 40` sont projetées sur les deux premières composantes principales (:math:`k = 2`) de l'analyse du nuage des observations. Les observations correspondent à des descripteurs visuels de pixels extraits d'images de textures [#textures]_. En plus des 40 variables quantitatives initiales, chaque pixel est caractérisé par la classe de texture (11 classes au total) à laquelle il appartient, mais l'ACP ne tient pas compte de cette variable nominale. Cette classe a néanmoins été représentée par une couleur et une forme spécifique du point projection (11 classes au total) afin de nous permettre de voir dans quelle mesure les directions de variances maximales (les deux premiers axes principaux dans cette projection bidimensionnelle) permettent de séparer les classes. .. figure:: figures/acpEx.png :width: 60 % :alt: Exemple 1 ACP : projection des observations sur le premier plan factoriel :align: center Exemple 1 ACP : projection des observations sur le premier plan factoriel | L'analyse du **nuage des variables** se déroule de façon symétrique. La matrice à diagonaliser est dans ce cas :math:`\mathbf{X} \mathbf{X}^T` et ses valeurs propres non nulles sont les mêmes que celles de :math:`\mathbf{X}^T \mathbf{X}`. Le lien entre les matrices analysées mène à des relations de transition entre les deux analyses (du nuage des observations et du nuage des variables) qui permettent d'obtenir les résultats de l'une directement à partir des résultats de l'autre (voir par ex. [CABB04]_, [Sap11]_). Comme en général :math:`N \gg m` (nombre d'observations :math:`\gg` nombre de variables initiales), il est préférable de traiter la matrice :math:`\mathbf{X}^T \mathbf{X}` de dimension :math:`m \times m` plutôt que :math:`\mathbf{X} \mathbf{X}^T` de dimension :math:`N \times N`. La figure suivante montre un exemple d'analyse du nuage des variables pour un cas où les significations des variables initiales sont plus facile à appréhender [#sleep]_ : poids du corps, poids du cerveau, durée de vie, durée de gestation, durée du sommeil avec rêves, sans rêves et totale, indice de prédation, indice d'exposition pendant le sommeil et indice de danger. Les 10 variables initiales sont projetées sur les deux premières composantes principales de l'analyse du nuage des variables. Chaque observation correspond à un représentant typique d'une espèce de mammifères ; il y a :math:`N = 62` observations décrites par les :math:`m = 10` variables initiales. Le variables de départ étant de nature diverse (poids, durées, indices), l'ACP normée a été employée. Les variables initiales ont donc d'abord été centrées et réduites avant l'analyse (pour avoir une moyenne nulle et une variance égale à 1). Cela explique pourquoi chaque variable initiale est représentée par un vecteur de norme égale à 1, situé donc sur une hyper-sphère centrée dans l'origine. L'intersection de cette hyper-sphère avec le plan de projection illustré est donc un cercle et les vecteurs sont projetés à l'intérieur de ce cercle. Plus la projection d'une variable initiale est proche du cercle, plus cette variable est proche du plan de projection, donc bien représentée par ce plan. .. figure:: figures/acpVariables.png :width: 50 % :alt: Exemple 2 ACP : projection des variables sur le premier plan factoriel :align: center Exemple 2 ACP : projection des variables sur le premier plan factoriel Une visualisation simple permet d'identifier trois groupes de variables initiales (corrélation forte des variables à l'intérieur de chaque groupe) : le groupe « sommeil », le groupe « danger » et le groupe « corps, cerveau, vie, gestation » (CCVG). On observe une forte opposition entre le groupe « sommeil » et le groupe « danger » (anti-corrélation des variables entre ces deux groupes) et une opposition plus faible entre le groupe « sommeil » et le groupe CCVG. .. eqt:: coursReductionVolumeQ1 **Question :** Si les projections de deux variables différentes (parmi les :math:`m > 2` variables de départ) sur le plan des deux premiers axes factoriels sont confondues, nous pouvons conclure que A) :eqt:`I` les deux variables sont identiques pour toutes les observations, #) :eqt:`C` les deux variables ont les mêmes projections sur ces axes factoriels, #) :eqt:`I` la corrélation entre les deux variables est égale à 1. | Le choix du nombre de composantes à retenir (valeur de :math:`k`) dépend de l'objectif de l'analyse : #. Analyse descriptive avec visualisation : déterminer à partir de quel ordre les différences entre les pourcentages d'inertie expliquée ne sont plus significatives. Un test statistique d'égalité entre valeurs propres successives peut être envisagé si la distribution des données est proche d'une distribution normale multidimensionnelle. Une méthode heuristique est souvent utilisée, voir la figure suivante : on construit le graphique des valeurs propres triées par ordre décroissant et on conserve les valeurs propres (et les composantes principales associées) qui précèdent le premier « coude ». #. Réduction du volume de données : on impose la conservation d'une qualité d'approximation des données initiales, mesurée par le taux d'inertie expliquée (par ex. 85\%). Le taux de réduction du volume interviendra, en général, dans ce choix. #. Prétraitement avant application de méthodes décisionnelles : on utilise souvent un simple critère de bon conditionnement de la matrice des covariances empiriques (ou corrélations empiriques si analyse normée) ; attention, ce choix peut s'avérer nocif lorsque les directions qui présentent la plus faible variance sont des directions prédictives (par exemple, dans un problème de classement, des directions discriminantes ou qui aident à séparer les classes). Il est également possible de considérer le nombre d'axes comme un paramètre supplémentaire de la méthode décisionnelle et d'employer ensuite une technique de sélection de modèle décisionnel. .. figure:: figures/acpNbAxes.png :width: 40 % :alt: ACP : choix du nombre d'axes :align: center Choix du nombre d'axes en ACP : lorsque les différences entre valeurs propres successives deviennent faibles, les axes principaux correspondants ne sont plus significatifs (deviennent très instables par rapport au choix de l'échantillon analysé) .. eqt:: coursReductionVolumeQ2 **Question :** Considérons :math:`10^9` observations décrites par :math:`m = 10` variables quantitatives. Si ces observations sont issues d'une loi normale multidimensionnelle qui a la matrice identité d'ordre 10 comme matrice de variances-covariances, que pouvons-nous dire des valeurs propres ? A) :eqt:`I` elles sont toutes identiques et égales à 1, #) :eqt:`C` elles sont toutes de valeur proche de 1, #) :eqt:`I` la plus grande est égale à 1, les autres sont égales à 0. | Les valeurs et vecteurs propres de :math:`\mathbf{M} = \mathbf{X}^T \mathbf{X}` (en général :math:`N \gg m`, on s'intéresse donc à :math:`\mathbf{X}^T \mathbf{X}` plutôt qu'à :math:`\mathbf{X} \mathbf{X}^T`) peuvent être obtenus de différentes façons, selon qu'on souhaite déterminer *toutes* les valeurs propres de :math:`\mathbf{M}` (de dimension :math:`m \times m`) ou seulement les :math:`k` plus grandes, avec les vecteurs propres unitaires associés. Pour obtenir toutes les valeurs propres, l'algorithme est de complexité :math:`O(m^3)` : on commence par calculer le déterminant de :math:`(\mathbf{M} - \lambda \mathbf{I}_m)` afin de trouver les valeurs propres, ensuite on résout pour chaque valeur propre un système linéaire de :math:`m` équations avec :math:`m` inconnues pour déterminer le vecteur propre associé. Si :math:`m` est très élevé et on souhaite conserver :math:`k \ll m` composantes, il est inutile de chercher à obtenir toutes les valeurs propres et on préfère la solution suivante. Pour obtenir les :math:`k` plus grandes valeurs propres, un algorithme itératif de complexité :math:`O(N m k)` peut être employé. Les valeurs propres sont trouvées une par une (avec le vecteur propre associé), à partir de la plus grande. Pour cela, on itère :math:`\mathbf{x}_{i+1} = \frac{\mathbf{M} \cdot \mathbf{x}_i}{\left\|\mathbf{M} \cdot \mathbf{x}_i\right\|}` à partir d'un vecteur :math:`\mathbf{x}_0` quelconque non nul. A convergence, :math:`\lambda_1 = \mathbf{x}^T \cdot \mathbf{M} \cdot \mathbf{x}` sera la plus grande valeur propre et le :math:`\mathbf{x}` obtenu le vecteur propre associé. On calcule :math:`\mathbf{M}_2 = \mathbf{M} - \lambda_1 \mathbf{x} \cdot \mathbf{x}^T` et on applique le même processus itératif sur :math:`\mathbf{M}_2` pour obtenir :math:`\lambda_2`, etc. Cette solution est encore plus intéressante pour des variables initiales « creuses » : si chaque variable prend des valeurs non nulles pour au maximum :math:`p` observations, avec :math:`p \ll N`, alors :math:`p` remplace :math:`N` dans la complexité qui devient donc :math:`O(p m k)`. .. eqt-mc:: coursReductionVolumeQ3 **Question :** Pour réduire le volume d'un ensemble de données nous souhaitons utiliser à la fois l'ACP et l'échantillonnage. Laquelle (lesquelles) des observations suivantes est (sont) juste(s) ? A) :eqt:`C` appliquer l'ACP sur un petit échantillon permet de réduire significativement le coût de l'ACP #) :eqt:`I` appliquer l'échantillonnage aux données projetées sur les premiers axes principaux permet de réduire significativement le coût de l'échantillonnage #) :eqt:`C` les résultats de l'ACP sur un petit échantillon peuvent être éloignés des résultats sur les données complètes #) :eqt:`I` la taille de l'échantillon n'a que très peu d'impact sur les résultats de l'ACP appliquée à l'échantillon Analyse factorielle discriminante *************************************** L'AFD est une méthode d'analyse de données multidimensionnelles qui présente à la fois une composante descriptive et une composante décisionnelle. On considère :math:`N` observations caractérisées par :math:`m` variables quantitatives initiales (matrice de données :math:`\mathbf{X}`) *et* une variable nominale de « classe » :math:`Y \in \{1,\ldots,q\}`. Lors de l'étape descriptive on cherche à identifier :math:`k` « facteurs discriminants » (:math:`k < m`, :math:`k < q` !) qui permettent de différencier au mieux les classes ; ces facteurs discriminants sont des combinaisons linéaires des variables initiales. Lors de l'étape décisionnelle on construit un modèle de *discrimination* (ou de *classement*) permettant de décider à quelle classe affecter une nouvelle observation à partir des valeurs prises par les variables quantitatives (donc implicitement par les facteurs discriminants). Les principales utilisations de l'AFD sont : #. Descriptive : condenser la représentation des données en conservant au mieux la séparation entre les classes. #. Décisionnelle : classer de nouvelles observations à partir du sous-espace linéaire qui optimise la séparation. Nous nous intéresserons ici exclusivement à la composante descriptive. Plus d'explications sur l'AFD (à la fois sur les aspects descriptifs et décisionnels) peuvent être trouvées par ex. dans [CABB04]_, [Sap11]_. La figure suivante montre un exemple d'AFD. Les :math:`N = 5500` données initiales de dimension :math:`m = 40` issues de [#textures]_, avec :math:`q = 11`, sont projetées sur les deux premières composantes discriminantes (:math:`k = 2`). .. figure:: figures/afdEx.png :width: 60 % :alt: Exemple 1 AFD : projection des observations sur le premier plan factoriel :align: center Exemple 1 AFD : projection des observations sur le premier plan factoriel En comparant le résultat avec la projection des mêmes données sur les deux premières composantes principales (voir plus haut) on constate que la séparation entre les classes est naturellement bien meilleure avec l'AFD. On voit aussi que cette séparation entre les 11 classes n'est pas parfaite sur le premier plan discriminant ; la séparation est en revanche presque parfaite dans l'espace tridimensionnel correspondant aux trois premières composantes discriminantes (non représenté ici). La figure suivante illustre, pour un exemple simple (deux classes de forme allongée dans le plan), la différence entre l'ACP et l'AFD : l'ACP cherche le sous-espace (unidimensionnel ici) qui maximise la *variance* des projections alors que l'AFD cherche le sous-espace qui maximise la séparation entre les classes. .. figure:: figures/afdVsAcp.png :width: 40 % :alt: AFD versus ACP :align: center AFD versus ACP | Pour comprendre de quelle façon l'AFD procède il est nécessaire de s'intéresser aux calculs des covariances entre les variables initiales, selon qu'on considère les données dans leur totalité ou séparées en classes : #. Covariances inter-classes : calculées en considérant que les seules observations sont les centres de gravité des :math:`q` classes :math:`\rightarrow` matrice :math:`\mathbf{E}`. #. Covariances intra-classes : calculées sur les observations de départ, en centrant chaque classe sur son centre de gravité :math:`\rightarrow` matrice :math:`\mathbf{D}`. #. Covariances totales : calculées sur les observations de départ :math:`\rightarrow` matrice :math:`\mathbf{S}`. Ces covariances sont liées par la relation de Huygens :math:`\mathbf{S} = \mathbf{E} + \mathbf{D}`. +----------------------------------+----------------------------------+----------------------------------+ |.. figure:: figures/covInter.png |.. figure:: figures/covIntra.png |.. figure:: figures/covTotale.png | | :width: 100 % | :width: 100 % | :width: 100 % | | :align: center | :align: center | :align: center | | | | | | Inter-classes | Intra-classes | Totale | +----------------------------------+----------------------------------+----------------------------------+ | Pour trouver le sous-espace de dimension :math:`k` le plus discriminant on cherche à séparer au mieux les centres de gravité des classes, tout en tenant compte de la forme des classes. On peut montrer (voir par ex. [CABB04]_, [Sap11]_) que le sous-espace recherché est généré par les :math:`k` vecteurs propres :math:`\mathbf{u}_{\alpha}` associés aux :math:`k` plus grandes valeurs propres :math:`\lambda_{\alpha}` de l'équation de valeurs et vecteurs propres *généralisée* :math:`\mathbf{E} \mathbf{u}_{\alpha} = \lambda_{\alpha} \mathbf{S} \mathbf{u}_{\alpha}`, :math:`\alpha \in \{1,\ldots,k\}`. Il est possible de résoudre plutôt :math:`\mathbf{E} \mathbf{u}_{\alpha} = \lambda_{\alpha} \mathbf{D} \mathbf{u}_{\alpha}` si le rang de :math:`\mathbf{D}` n'est pas inférieur à celui de :math:`\mathbf{S}` (le rang de :math:`\mathbf{D}` ne peut pas être supérieur à celui de :math:`\mathbf{S}`). Aussi, si :math:`\mathbf{S}` est inversible (et bien conditionnée) cela revient à résoudre :math:`\mathbf{S}^{-1} \mathbf{E} \mathbf{u}_{\alpha} = \lambda_{\alpha} \mathbf{u}_{\alpha}`. Lorsque la matrice :math:`\mathbf{S}` est singulière, une approche fréquente est de réduire la dimension avec une ACP, pour que dans l'espace réduit :math:`\mathbf{S}'` soit de rang complet, ensuite résoudre :math:`{\mathbf{S}'}^{-1} \mathbf{E}' \mathbf{u}_{\alpha} = \lambda_{\alpha} \mathbf{u}_{\alpha}` dans cet espace réduit. Remarque importante : si l'ACP est appliquée pour réduire la dimension au-delà de la nécessité de rendre :math:`\mathbf{S}'` de rang complet (par exemple, pour rendre :math:`\mathbf{S}'` bien conditionnée), il y a un risque non négligeable d'élimination de variables discriminantes ! Il faudrait préférer dans ce cas une approche de *régularisation*, par exemple remplacer :math:`\mathbf{S}` par :math:`\mathbf{S} + r \mathbf{I}_m` (où :math:`\mathbf{I}_m` est la matrice identité d'ordre :math:`m`). La constante de régularisation :math:`r > 0` doit être assez grande pour que la matrice :math:`\mathbf{S} + r \mathbf{I}_m` soit bien conditionnée (mais pas *trop* grande, pour éviter de dénaturer la solution). Le choix du nombre de composantes discriminantes à retenir (valeur de :math:`k`) peut être réalisé à l'aide de tests statistiques lorsqu'il est possible de considérer que les classes sont issues de lois normales multidimensionnelles : #. Test de Rao : test d'égalité à 0 de la :math:`i`-ème valeur propre. #. Test du lambda de Wilks : test de l'apport des axes au-delà du :math:`i`-ème. #. Test incrémental : test de l'apport du :math:`i+1`-ème axe. Si l'AFD est employée comme un prétraitement avant application de méthodes décisionnelles, il est également possible de considérer le nombre d'axes (de facteurs discriminants) comme un paramètre supplémentaire de la méthode décisionnelle et de se servir ensuite d'une technique de *sélection de modèle* décisionnel pour choisir le nombre d'axes. Il est important de noter que pour l'AFD (méthode linéaire) le nombre :math:`k` de facteurs discriminants est :math:`k < q`, :math:`q` étant le nombre de classes. En effet, avec :math:`q` classes, le rang de :math:`\mathbf{E}` ne peut être supérieur à :math:`q-1` et donc l'équation :math:`\mathbf{E} \mathbf{u}_{\alpha} = \lambda_{\alpha} \mathbf{S} \mathbf{u}_{\alpha}` ne peut avoir plus de :math:`q-1` valeurs propres non nulles. Par exemple, pour un problème à 2 classes on ne peut trouver qu'un **seul** axe discriminant (:math:`k = 1`). .. eqt-mc:: coursReductionVolumeQ4 **Question :** Est-ce utile ou potentiellement risqué de réduire la dimension par ACP avant d'appliquer l'AFD ? Pourquoi ? L'illustration qui suit cette question devrait vous aider à répondre. Plusieurs réponses peuvent être correctes. A) :eqt:`C` utile pour obtenir une matrice :math:`\mathbf{S}` bien conditionnée #) :eqt:`I` utile pour réduire la complexité algorithmique de l'application de l'AFD #) :eqt:`I` risqué car l'ACP mène à une réduction du nombre d'observations #) :eqt:`C` risqué car perte potentielle d'information de discrimination .. figure:: figures/discriminationPossible.png :width: 40 % :alt: Exemple simple AFD vs ACP :align: center Exemple simple AFD vs ACP. Chacune des deux ellipses regroupe les observations d'une des classes. La discrimination entre les deux classes est-elle encore possible si on projette d'abord les observations sur l'axe principal ? Analyse factorielle des correspondances ***************************************** L'analyse des correspondances est une méthode d'analyse exploratoire de données décrites par des variables *nominales* (à modalités). Nous examinerons brièvement ici l'analyse des correspondances multiples (ACM) qui considère :math:`N` (ou :math:`n`) observations caractérisées par :math:`q > 2` variables nominales, représentées par un *tableau disjonctif complet* (TDC, voir la :numref:`TDC` ci-dessous) ; chaque observation possède exactement une modalité pour chaque variable. .. figure:: figures/TDC.png :width: 70 % :alt: Tableau disjonctif complet (TDC) :align: center :name: TDC Tableau disjonctif complet (TDC) Il est également possible d'utiliser pour l'ACM un *tableau de Burt* qui est la concaténation des tables de contingences par paires de variables nominales. L'emploi du TDC permet d'analyser à la fois le nuage des observations et le nuage des modalités des variables, alors que le tableau de Burt permet d'étudier seulement le nuage des modalités (car les observations individuelles n'y sont pas décelables). L'ACM cherche à mettre en évidence les relations dominantes entre des modalités des variables nominales initiales. Pour cela, :math:`k` nouvelles variables quantitatives sont construites à partir des :math:`q` variables nominales initiales, en conservant un maximum de variance. L'ACM est utilisée traditionnellement dans le traitement d'enquêtes basées sur des questions fermées à choix multiples, afin de mettre en évidence des relations entre modalités ou éventuellement entre observations et modalités. Dans l'analyse de données massives, l'ACM peut servir à résumer un grand nombre (:math:`q`) de variables qualitatives par un faible nombre (:math:`k \ll q`) de variables quantitatives. Il est également possible d'inclure des variables quantitatives dans l'analyse, après leur transformation en variables nominales (voir plus loin). Considérons un exemple issu de [CABB04]_ et basé sur des données de [#etuVille]_ pour clarifier la nature des résultats obtenus par ACM (sur des données en faible volume). L'enquête « Les étudiants et la ville » [#etuVille]_ dont sont issues les données inclut, entre autres, les questions suivantes : #. Habitez-vous : seul(e), en colocation, en couple, avec les parents. #. Quel type d'habitation occupez-vous : cité U, studio, appartement, chambre chez l'habitant, autre. #. Si vous vivez en dehors du foyer familial, depuis combien de temps : moins d'1 an, de 1 à 3 ans, plus de 3 ans, non applicable (NA). #. A quelle distance de l'université vivez-vous : moins d'1 km, de 1 à 5 km, plus de 5 km. #. Quelle est la surface habitable de votre logement : moins de 10 :math:`m^2`, de 10 :math:`m^2` à 20 :math:`m^2`, de 20 :math:`m^2` à 30 :math:`m^2`, plus de 30 :math:`m^2`. Nous pouvons observer que trois des cinq variables sont issues de variables quantitatives discrétisées avant la réalisation du sondage. La figure suivante montre les résultats de l'analyse des *modalités* des variables nominales initiales à travers leurs projections sur les deux premiers facteurs : .. figure:: figures/acmExemple.png :width: 100 % :alt: ACM : résultats sur l'exemple :align: center ACM : résultats sur l'exemple « Les étudiants et la ville » [#etuVille]_ Nous pouvons examiner des similarités et des oppositions entre projections de modalités de variables différentes (deux modalités sont similaires si elles concernent les mêmes populations d'observations) ou d'une même variable (et donc mutuellement exclusives ; deux telles modalités seront « similaires » si leurs populations sont similaires par rapport aux autres variables nominales). Sur cet exemple nous pouvons constater, par exemple, des similarités fortes entre les modalités « parents » (variable « Habitez-vous »), « NA » (variable « depuis combien de temps ») et « autre » (variable « type d'habitation »), ainsi que des oppositions fortes entre « seul » et « parents » (même variable « Habitez-vous »), ou entre « +5 km » et « -1 km » (variable « distance »). Pour améliorer la lisibilité, les modalités « successives » des variables ordinales (issues ici de la discrétisation préalable de variables quantitatives) ont été reliées entre elles par des traits. Pour réaliser l'ACM on cherche, comme pour l'ACP, le sous-espace de dimension :math:`k` qui résume le mieux la variance (on parle parfois de « dispersion ») du nuage analysé. En revanche, contrairement à l'ACP où les données (observations ou variables) sont en général non pondérées, pour l'ACM on pondère chaque modalité (représentée par une colonne du TDC) par sa fréquence relative. Aussi, pour l'ACM on emploie la distance du :math:`\chi^2` qui permet de pondérer dans le calcul de distance l'influence de chaque composante par l'inverse de son poids. Des développements plus détaillés peuvent être trouvés par ex. dans [CABB04]_, [Sap11]_. La distance du :math:`\chi^2` présente une propriété intéressante d'équivalence distributionnelle : si deux colonnes (modalités) proportionnelles sont cumulées en une seule (fusion de deux modalités), les résultats de l'analyse ne changent pas. .. eqt:: coursReductionVolumeQ5 **Question :** Comment interpréter la similarité entre les modalités « couple » et « colocation » de la variable « Habitez-vous » (voir la figure précédente) ? A) :eqt:`I` les couples et les colocataires habitent en appartement, #) :eqt:`I` les couples habitent en général en colocation, #) :eqt:`C` les individus qui habitent en couple ou en colocation possèdent en général les mêmes modalités pour les autres variables. | Il est possible d'inclure des variables quantitatives dans l'ACM si les domaines de variation de ces variables sont découpés en intervalles et chaque intervalle est assimilé à une modalité de variable nominale. Cela permet de trouver des relations entre modalités de variables qualitatives et *intervalles* de valeurs prises par des variables quantitatives. Cela donne aussi la possibilité de mettre en évidence des relations *non linéaires* entre (intervalles de) valeurs prises par des variables quantitatives. Le découpage en intervalles du domaine de variation d'une variable quantitative peut être réalisé sur la base de connaissances *a priori* concernant les intervalles « pertinents » ou à partir de l'histogramme, comme dans la figure suivante (pour un découpage robuste, les frontières entre intervalles sont choisies dans les creux de l'histogramme) ; chaque intervalle sera une modalité de la nouvelle variable ordinale (les valeurs numériques sont ordonnées, les intervalles le seront donc aussi). .. figure:: figures/varQvarN.png :width: 50 % :alt: Découpage en intervalles pour obtenir des modalités :align: center Découpage en intervalles du domaine de variation d'une variable quantitative afin d'obtenir des modalités .. eqt-mc:: coursReductionVolumeQ6 **Question :** L'ACM permet de (plusieurs réponses peuvent être correctes) A) :eqt:`I` déterminer les variables qui permettent de séparer les observations en classes, #) :eqt:`I` trouver des corrélations linéaires entre variables, #) :eqt:`C` représenter par quelques variables numériques des observations décrites au départ par des variables nominales, #) :eqt:`C` mettre en évidence les relations dominantes entre modalités de variables nominales. | ---------------------------------------------------- .. [CABB04] Crucianu, M., J.-P. Asselin de Beauville, et R. Boné. Méthodes d'analyse factorielle des données : méthodes linéaires et non linéaires. Hermès, Paris, 2004. .. [Sap11] Saporta, G. Probabilités, Analyse des Données et Statistique. Technip, Paris, 2011. .. [TAL14] Tang, J., S. Alelyani, et H. Liu. *Feature selection for classification: A review*. Dans *Data Classification: Algorithms and Applications*, pages 37–64. 2014. .. [Til01] Tillé, Y. Théorie des sondages. Dunod, Paris, 2001. ---------------------------------------------------- .. [#textures] Données mises à disposition par le Laboratoire de Traitement d'Image et de Reconnaissance de Formes (LTIRF) de l'Institut National Polytechnique de Grenoble (INPG) dans le cadre du projet ESPRIT III ELENA (No. 6891) et du groupe de travail ESPRIT ATHOS (No. 6620). .. [#sleep] Données issues de Allison T., Cicchetti D., *Sleep in mammals: ecological and constitutional correlates*, Science, vol. 194, pp. 732-734. .. [#etuVille] Données issues de l'enquête « Les étudiants et la ville » réalisée en 2001 sous la direction de S. Denèfle à l'Université de Tours, voir [CABB04]_.