dimanche 8 août 2021

Guide de survie pour pandas et Numpy

 

Les librairies Pandas et Numpy sont deux piliers de l’outillage Python pour l’apprentissage automatique. Aussi faut-il connaitre quelques subtilités pour éviter de perdre du temps à la recherche d’erreur.

 Par expérience, je réserve l’utilisation de Pandas au chargement des données et à leur transformation pour ensuite les exporter vers les frameworks comme Tensorflow ou Pytorch.

La phase d’export d’une colonne vers un array Numpy doit s’accompagner d’une vérification des dimensions de l’export. Car Pandas l’exporte vers un tableau qui est à plutôt les caractéristiques d’une liste.

Exemple : Création d'un dataFrame et export vers Numpy d'une colonne.

 


Une dimension unique comme (3,) est le propre d’une série au sens Dataframe ou d’un type liste en Python : ce n’est pas une vrai matrice (array) Numpy.

Dans numpy on peut repérer 3 structures particulières :

Les listes

La matrice sur 1 seule ligne mais bien de dimension 2

La matrice d’une colonne mais bien de dimension 2 (un vecteur)

Il est possible de passer d’une structure à une autre par une opération de ‘reshape’

 Illustration ci-dessous:


Une structure a 1 dimension peut provoquer des erreurs dans des fonctions d'apprentissage automatique et surtout être la cause d'erreur de broadcasting.

Le broadcasting dans numpy.

C'est un mécanisme puissant mais qui peut provoquer des erreurs en cascade.

Les opérations  entre matrice imposent de respecter des contraintes sur les dimensions des matrices:
Le broadcasting permet des opérations hybrides à mi chemin entre les opérations  entre des matrices ou des opérations avec des scalaires.

Exemple : création de 3 matrices: une de 3X3 , une de 1X3 et enfin une de 3X1:


Si on réalise la multiplication scalaire de la matrice a par le 'scalaire' 2 on obtiendra: 

Que ce passe-t-il si je souhaite multiplier la matrice a (3X3) par b (1X3) ? Comme on pourrait le faire avec un scalaire ?  Cette opération hybride n'est pas autorisée et c'est là qu'intervient le broadcasting. Numpy va étendre sous certaines conditions les matrices. 
Les conditions sont les suivantes:
  • Dimensions identiques
  • Une des deux dimensions est égale à 1 
 
Numpy va prendre la ligne de la matrice b et la dupliquer vers le bas afin d'avoir une matrice 3X3.

 


Erreurs de broadcasting.

Prenons maintenant un cas qui va générer des erreurs en cascade.

Soit deux matrice de dimension 5X1 

Leur multiplication 'scalaire' va donner une matrice 5X1


 Si on prend la matrice 'c' qui n'a qu'une seule dimension: le résultat sera différent : une matrice de 5X5




Ainsi la règle d'or est de toujours vérifier la forme de la matrice (shape) avant une opération.