Représentation : nettoyage des données

Les pommiers produisent aussi bien des pommes savoureuses que des fruits véreux. Pourtant, les épiceries haut de gamme ne proposent que des pommes parfaites. Entre le verger et l'épicerie, des personnes ont donc passé un temps considérable à jeter les mauvais fruits ou à appliquer un peu de cire sur ceux qui restaient vendables. En tant qu'ingénieur ML, vous allez consacrer une très grande partie de votre temps à éliminer les mauvais exemples et à nettoyer ceux qui sont récupérables. Quelques "mauvaises pommes" seulement peuvent gâcher un ensemble de données conséquent.

Mettre des valeurs de caractéristiques à l'échelle

La mise à l'échelle consiste à convertir des valeurs de caractéristiques en virgule flottante de leur plage naturelle (par exemple, 100 à 900) vers une plage standard (par exemple, 0 à 1 ou -1 à +1). Si un ensemble de caractéristiques ne comporte qu'une seule caractéristique, la mise à l'échelle ne présente que peu ou pas d'avantages pratiques. Toutefois, si un ensemble de caractéristiques comporte plusieurs caractéristiques, la mise à l'échelle des caractéristiques offre les avantages suivants :

  • Elle accélère la convergence de la descente de gradient.
  • Elle permet d'éviter le "piège NaN", dans lequel un paramètre du modèle devient NaN (par exemple, lorsqu'une valeur dépasse la limite de précision en virgule flottante pendant l'apprentissage) et chaque autre nombre du modèle finit par devenir également un NaN, du fait des opérations mathématiques.
  • Elle permet au modèle d'apprendre les pondérations appropriées pour chaque caractéristique. Sans mise à l'échelle des caractéristiques, le modèle accorde une attention trop importante aux caractéristiques présentant les plages les plus larges.

Il n'est pas nécessaire d'attribuer la même échelle à chaque caractéristique en virgule flottante. La conséquence n'est pas grave si l'échelle de la caractéristique A s'étend de -1 à +1 et celle de la caractéristique B de -3 à +3. En revanche, votre modèle réagira mal si l'échelle de la caractéristique B s'étend de 5 000 à 100 000.

Gérer les données aberrantes extrêmes

Le graphique suivant représente une caractéristique appelée roomsPerPerson, tirée de l'ensemble de données sur l'immobilier en Californie. La valeur de roomsPerPerson a été calculée en divisant le nombre total de pièces pour une zone par la population de cette zone. Le graphique montre que dans la grande majorité des zones de Californie, les habitations comportent une ou deux pièces par personne. Observez toutefois l'axe des abscisses.

Représentation graphique de roomsPerPerson (nombre de pièces par personne), dans laquelle pratiquement toutes les valeurs sont regroupées entre 0 et 4, mais avec une très longue file de valeurs s'étendant jusqu'à 55 pièces par personne

Figure 4 : Une très longue queue de valeurs

Comment minimiser l'impact de ces données aberrantes extrêmes ? Une méthode consiste à utiliser le logarithme de chaque valeur :

Représentation graphique de log(roomsPerPerson) (logarithme du nombre de pièces par personne), dans laquelle 99 % des valeurs sont regroupées entre 0,4 et 1,8 environ, mais avec encore une file de valeurs assez longue allant jusqu'à 4,2 environ

Figure 5 : La mise à l'échelle logarithmique laisse une longue queue de valeurs

La mise à l'échelle logarithmique est légèrement plus performante, mais laisse une queue importante de données aberrantes. Utilisons une autre approche : limitons ou plafonnons la valeur maximale de roomsPerPerson à une valeur arbitraire, par exemple 4,0.

Représentation graphique de roomsPerPerson, dans laquelle toutes les valeurs sont comprises entre -0,3 et 4,0. La courbe est en cloche, avec une anomalie : une bosse à 4,0.

Figure 6 : Limitation des valeurs de la caractéristique à 4,0

La limitation des valeurs de la caractéristique à 4,0 ne signifie pas que toutes les valeurs supérieures à 4,0 sont ignorées. Cela veut simplement dire que toutes les valeurs supérieures à 4,0 sont désormais égales à 4,0. Cela explique cette étrange bosse à la valeur 4,0. Malgré cette bosse, l'ensemble de caractéristiques mises à l'échelle est maintenant plus utile que les données d'origine.

Binning

Le graphique suivant montre la prédominance relative des habitations pour différentes latitudes en Californie. Notez les clusters : Los Angeles se trouve à une latitude d'environ 34° et San Francisco d'environ 38°.

Représentation graphique des habitations en fonction de la latitude. La courbe est très irrégulière, avec des creux autour de la latitude de 36° et de grandes pointes autour des latitudes de 34° et 38°.

Figure 7 : Habitations en fonction de la latitude

Dans l'ensemble de données, latitude est une valeur en virgule flottante. Il n'est toutefois pas logique de représenter latitude sous forme de caractéristique en virgule flottante dans notre modèle. En effet, il n'existe aucune relation linéaire entre la latitude et la valeur immobilière. Par exemple, les habitations à une latitude de 35° ne sont pas 35/34 fois plus chères (ou moins chères) que celles situées à une latitude de 34°. Pourtant, la latitude est sans doute un bon indicateur de la valeur immobilière.

Pour que la latitude devienne un indicateur utile, fractionnons les latitudes en classes, comme suggéré dans la figure suivante :

Représentation graphique des habitations en fonction de la latitude

Figure 8 : Valeurs de binning

À présent, nous n'avons plus une caractéristique en virgule flottante, mais 11 caractéristiques booléennes différentes (LatitudeBin1, LatitudeBin2, …, LatitudeBin11). Ces 11 caractéristiques n'étant pas très pratiques, regroupons-les dans un vecteur unique à 11 éléments. Cela va nous permettre de représenter la latitude de 37,4° comme suit :

[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]

Grâce au binning, notre modèle peut désormais apprendre des pondérations complètement différentes pour chaque latitude.

Corriger des erreurs

Jusqu'à présent, nous avons supposé que toutes les données utilisées pour l'apprentissage et l'évaluation étaient fiables. En réalité, les ensembles de données contiennent de nombreux exemples qui ne sont pas fiables, pour les raisons suivantes :

  • Valeurs omises : une personne a oublié de saisir une valeur pour l'âge d'une habitation, par exemple.
  • Exemples en double : un serveur a importé par erreur les mêmes journaux deux fois, par exemple.
  • Étiquettes erronées : une personne a étiqueté l'image d'un chêne comme étant celle d'un érable, par exemple.
  • Valeurs de caractéristique erronées : une personne a saisi un chiffre en trop, ou un thermomètre a été laissé au soleil, par exemple.

Une fois les mauvais exemples détectés, vous les "corrigez" généralement en les supprimant de l'ensemble de données. Pour identifier des valeurs omises ou des exemples en double, vous pouvez écrire un programme simple. La détection de valeurs de caractéristiques ou d'étiquettes erronées est bien plus délicate.

Outre les mauvais exemples, vous devez détecter les données erronées de l'agrégat. Les histogrammes constituent un excellent moyen de visualiser les données de l'agrégat. Les statistiques suivantes peuvent aussi s'avérer utiles :

  • Valeurs maximale et minimale
  • Valeurs moyenne et médiane
  • Écart type

Vous pouvez générer des listes des valeurs les plus courantes pour les caractéristiques discrètes. Par exemple, le nombre d'exemples pour country:uk correspond-il à ce que vous pensiez ? Est-ce que language:jp doit vraiment être la langue la plus courante dans votre ensemble de données ?

Connaître ses données

Suivez les règles ci-dessous :

  • Gardez à l'esprit le résultat attendu pour vos données.
  • Assurez-vous que les données sont conformes à vos attentes (ou, si tel n'est pas le cas, que vous en connaissez la raison).
  • Vérifiez que les données d'apprentissage sont en accord avec d'autres sources (des tableaux de bord, par exemple).

Traitez vos données comme vous le feriez avec un code stratégique. Les performances du ML dépendent de la qualité des données.

Envoyer des commentaires concernant…

Cours d'initiation au machine learning