Tout d'abord, la réduction de dimensionnalité est utilisée lorsque vous avez de nombreuses dimensions covariables et que vous souhaitez réduire la taille du problème en faisant pivoter les points de données dans une nouvelle base orthogonale et en prenant uniquement des axes avec la plus grande variance. Avec 8 variables (colonnes), votre espace est déjà de faible dimension, une réduction supplémentaire du nombre de variables ne résoudra probablement pas les problèmes techniques liés à la taille de la mémoire, mais peut affecter considérablement la qualité de l'ensemble de données. Dans votre cas concret, il est plus prometteur de jeter un œil à l' apprentissage en ligneméthodes. En gros, au lieu de travailler avec l'ensemble de données, ces méthodes en prennent une petite partie (souvent appelées "mini-lots") à la fois et construisent un modèle de manière incrémentielle. (Personnellement, j'aime interpréter le mot "en ligne" comme une référence à une source de données infiniment longue provenant d'Internet comme un flux Twitter, où vous ne pouvez tout simplement pas charger l'ensemble de données en même temps).
Mais que se passe-t-il si vous vouliez vraiment appliquer une technique de réduction de dimensionnalité comme l'ACP à un ensemble de données qui ne tient pas dans une mémoire? Normalement, un ensemble de données est représenté comme une matrice de données X de taille n x m , où n est le nombre d'observations (lignes) et m est un nombre de variables (colonnes). En règle générale, les problèmes de mémoire proviennent d'un seul de ces deux nombres.
Trop d'observations (n >> m)
Lorsque vous avez trop d'observations , mais que le nombre de variables va de petit à modéré, vous pouvez construire la matrice de covariance de manière incrémentielle . En effet, l'ACP typique consiste à construire une matrice de covariance de taille m x m et à lui appliquer une décomposition en valeurs singulières. Avec m = 1000 variables de type float64, une matrice de covariance a une taille de 1000 * 1000 * 8 ~ 8Mb, qui tient facilement en mémoire et peut être utilisée avec SVD. Il vous suffit donc de créer la matrice de covariance sans charger l'intégralité de l'ensemble de données en mémoire - une tâche assez facile à gérer .
Alternativement, vous pouvez sélectionner un petit échantillon représentatif de votre ensemble de données et approximer la matrice de covariance . Cette matrice aura toutes les mêmes propriétés que la normale, juste un peu moins précises.
Trop de variables (n << m)
D'autre part, parfois, lorsque vous avez trop de variables , la matrice de covariance elle-même ne tient pas en mémoire. Par exemple, si vous travaillez avec des images 640x480, chaque observation a 640 * 480 = 307200 variables, ce qui donne une matrice de covariance de 703 Go! Ce n'est certainement pas ce que vous aimeriez garder en mémoire de votre ordinateur, ni même en mémoire de votre cluster. Nous devons donc réduire les dimensions sans construire une matrice de covariance.
Ma méthode préférée pour le faire est la projection aléatoire . En bref, si vous avez un ensemble de données X de taille n x m , vous pouvez le multiplier par une matrice aléatoire clairsemée R de taille m x k (avec k << m ) et obtenir une nouvelle matrice X ' d'une taille beaucoup plus petite n x k avec approximativement les mêmes propriétés que l'original. Pourquoi ça marche? Eh bien, vous devez savoir que PCA vise à trouver un ensemble d'axes orthogonaux (composants principaux) et à projeter vos données sur le premier kd'eux. Il s'avère que les vecteurs aléatoires clairsemés sont presque orthogonaux et peuvent donc également être utilisés comme une nouvelle base.
Et, bien sûr, vous n'avez pas à multiplier l'ensemble de données X par R - vous pouvez traduire chaque observation x dans la nouvelle base séparément ou en mini-lots.
Il existe également un algorithme quelque peu similaire appelé Random SVD . Je n'ai aucune expérience réelle avec cela, mais vous pouvez trouver un exemple de code avec des explications ici .
En conclusion, voici une courte liste de contrôle pour la réduction de la dimensionnalité des grands ensembles de données:
- Si vous n'avez pas autant de dimensions (variables), utilisez simplement des algorithmes d'apprentissage en ligne.
- S'il y a beaucoup d'observations, mais un nombre modéré de variables (la matrice de covariance tient dans la mémoire), construisez la matrice de manière incrémentielle et utilisez la SVD normale.
- Si le nombre de variables est trop élevé, utilisez des algorithmes incrémentiels.