Prétraitement en data science (partie 1) : centrage, mise à l'échelle et k-NN
Cet article explique l'importance du prétraitement dans le pipeline de machine learning en montrant comment le centrage et la mise à l'échelle peuvent améliorer les performances des modèles.
· 11 min lire
Explorez l'IA
Contenus associés
blog
Architecture de l'entrepôt de données : Tendances, outils et techniques
Apprenez l'essentiel de l'architecture d'un entrepôt de données, des composants clés aux meilleures pratiques, pour construire un système de données évolutif et efficace !

Tutoriel
Normalisation vs. Standardisation: comment faire la différence
Découvrez les principales différences, les applications et la mise en œuvre de la normalisation et de la standardisation dans le prétraitement des données pour l’apprentissage automatique.
Tutoriel
Régression MCO : Les idées clés expliquées
Gagnez en confiance dans la régression par les MCO en maîtrisant ses fondements théoriques. Découvrez comment réaliser des mises en œuvre simples dans Excel, R et Python.

Dans cet article, j'utiliserai l'exemple de la mise à l'échelle de données numériques (données numériques : données composées de nombres, par opposition aux catégories/chaînes ; mise à l'échelle : utilisation d'opérations arithmétiques simples pour modifier l'étendue des données ; plus de détails à suivre) pour montrer l'importance d'envisager le prétraitement comme une composante d'une structure plus large : le pipeline de machine learning (ML). À cette fin, nous verrons un cas d'usage réel dans lequel la mise à l'échelle peut améliorer les performances d'un modèle.
\nJe présenterai d'abord les problèmes de classification en ML et k-Nearest Neighbors, l'un des algorithmes les plus simples dans ce cadre. Pour bien comprendre l'importance de la mise à l'échelle des données numériques dans ce contexte, j'introduirai des mesures de performance des modèles ainsi que les notions d'ensembles d'entraînement et de test. Vous verrez tous ces concepts et pratiques à l'œuvre sur un jeu de données où j'essaie de classer la qualité de vins rouges. Je veillerai également à placer le prétraitement là où il est le plus utile : au début d'un pipeline de data science itératif. Tous les exemples seront en Python. Si vous ne connaissez pas Python, vous pouvez consulter nos cours DataCamp ici. J'utiliserai les bibliothèques pandas pour la manipulation de dataframes et scikit-learn pour le machine learning.
\nVoici la première partie d'un tutoriel en trois volets :
\nPartie 2 : Centrage, mise à l'échelle et régression logistique
\nPartie 3 : Mise à l'échelle de données synthétisées
\nBrève introduction aux problèmes de classification en machine learning
\nClasser et étiqueter les choses dans le monde phénoménal est un art ancien. Au IVe siècle av. J.-C., Aristote a élaboré un système de classification des êtres vivants qui a été utilisé pendant 2 000 ans. Aujourd'hui, la classification est couramment formulée comme une tâche de machine learning, en particulier une tâche d'apprentissage supervisé. Le principe de base de l'apprentissage supervisé est simple : nous disposons d'un lot de données composées de variables prédictives et d'une variable cible. L'objectif de l'apprentissage supervisé est de construire un modèle « performant » pour prédire la variable cible à partir des variables prédictives. Si la variable cible se compose de catégories (par ex. « clic » ou « non », tumeur « maligne » ou « bénigne »), on parle de tâche de classification. À l'inverse, si la cible est une variable continue (par ex. le prix d'une maison), c'est une tâche de régression.
\nUn exemple illustratif aide beaucoup : considérez le jeu de données sur les maladies cardiaques, qui comporte 75 variables prédictives, comme l'âge, le sexe ou le statut fumeur, et une variable cible indiquant la présence d'une maladie cardiaque, allant de 0 (aucune) à 4. De nombreux travaux sur ce jeu de données se sont concentrés sur la distinction entre présence et absence de maladie cardiaque. C'est une tâche de classification. Si vous cherchiez à prédire la valeur exacte (0 à 4) de la variable cible, ce serait un problème de régression (car la variable cible est ordonnée). Je parlerai de régression dans le prochain article. Ici, j'examinerai l'un des algorithmes les plus simples pour la classification : l'algorithme des plus proches voisins (k-Nearest Neighbors).
\nk-Nearest Neighbors pour la classification en machine learning
\nSupposons que nous disposions de données étiquetées, par exemple des caractéristiques de vins rouges (teneur en alcool, densité, quantité d'acide citrique, pH, etc. ; ce sont les variables prédictives) avec une variable cible « Quality » et des étiquettes « good » et « bad ». Étant donné les caractéristiques d'un nouveau vin non étiqueté, la tâche de classification consiste à prédire sa « Quality ». Lorsque toutes les variables prédictives sont numériques (il existe aussi des moyens de traiter le cas catégoriel), on peut considérer chaque ligne/vin comme un point dans un espace à n dimensions et, dans ce cas, k-Nearest Neighbors (k-NN) est une méthode de classification simple sur le plan conceptuel et computationnel : pour chaque nouveau vin non étiqueté, on calcule, pour un entier k donné, ses k plus proches voisins dans l'espace des variables prédictives à n dimensions. On regarde ensuite les étiquettes de ces k voisins (« good » ou « bad ») et on attribue au nouveau vin l'étiquette majoritaire (par ex., si k = 5, 3 voisins votent « good » et 2 votent « bad », alors notre modèle étiquette le nouveau vin « good »). Notez qu'ici, entraîner le modèle consiste uniquement à stocker les points de données : il n'y a aucun paramètre à ajuster !
\nUne description visuelle de k-Nearest Neighbors
\nDans l'image ci-dessous, voici un exemple de k-NN en 2D : comment classeriez-vous le point au centre ? Eh bien, si k=3, vous le classeriez en rouge et, si k=5, en vert.
\nImplémentation de k-NN en Python (scikit-learn)
\nRemarquez d'abord l'étendue des variables prédictives : « free sulfur dioxide » varie de 0 à ~70 et « volatile acidity » d'environ 0 à ~1,2. Plus précisément, la première a une plage deux ordres de grandeur supérieure à la seconde. Tout algorithme, tel que k-NN, qui s'appuie sur la distance entre points de données, risque donc de se focaliser de manière disproportionnée sur les variables à grande plage, comme « free sulfur dioxide », une variable qui, pour autant que l'on sache, peut ne contenir que du bruit. Cela motive la mise à l'échelle des données, à laquelle nous allons venir très vite.
\nIci, la variable cible est une note de « Quality » allant de 3 à 8. Pour simplifier l'exposition, transformons-la en variable binaire : « good » (note > 5) et « bad » (note <= 5). Nous tracerons également des histogrammes des deux formulations de la cible pour mieux comprendre la situation.
\n\n\nk-Nearest Neighbors : quel niveau de performance ?
\nRemarque : l'accuracy peut aussi se définir à partir d'une matrice de confusion et, pour la classification binaire, en termes de vrais positifs et faux négatifs. D'autres mesures courantes dérivées de la matrice de confusion sont la précision (true positives / [true positives + false positives]) et le rappel (true positives / [true positives + false negatives]) ; une autre mesure, le F1-score, est la moyenne harmonique de la précision et du rappel. Voir machine learning mastery pour une bonne présentation de ces mesures ; voir aussi Wikipédia sur la matrice de confusion et le F1 score.
\nk-Nearest Neighbors : performance en pratique et séparation entraînement/test
\nNous allons maintenant introduire la mise à l'échelle et le centrage, les méthodes de prétraitement les plus basiques pour les données numériques, et voir si, et comment, elles influencent la performance de notre modèle.
\nLes mécanismes du prétraitement : mise à l'échelle et centrage
\nAvant d'entraîner un modèle, qu'il s'agisse de régression (prédire une variable continue) ou de classification (prédire une variable discrète), vous voudrez presque toujours effectuer un prétraitement. Pour les variables numériques, il est courant de normaliser ou de standardiser les données. Que signifient ces termes ?
\nLa normalisation consiste à mettre à l'échelle un jeu de données pour que son minimum soit 0 et son maximum 1. Pour y parvenir, on transforme chaque point de donnée x en
\n$$x_{normalized} = \\frac{x-x_{min}}{x_{max}-x_{min}}.$$\n
La standardisation est légèrement différente ; elle recentre les données autour de 0 et les met à l'échelle en fonction de l'écart type :
\n$$x_{standardized} = \\frac{x-\\mu}{\\sigma},$$\n
où \\mu et \\sigma sont respectivement la moyenne et l'écart type du jeu de données. Notez d'abord que ces transformations ne changent que la plage des données, pas leur distribution. Vous souhaiterez peut-être ensuite appliquer d'autres transformations, comme une transformation logarithmique ou de Box-Cox, pour rendre vos données plus gaussiennes (en cloche). Mais avant d'aller plus loin, posons-nous les bonnes questions : pourquoi mettons-nous les données à l'échelle ? Dans quels cas est-ce plus pertinent ? Par exemple, est-ce plus important en classification qu'en régression ?
\nPlongeons d'abord dans les problèmes de classification et voyons comment la mise à l'échelle affecte les performances de k-Nearest Neighbors :
\nPrétraitement : mise à l'échelle en pratique
\nCi-dessous, je (i) mets les données à l'échelle, (ii) utilise k-Nearest Neighbors et (iii) évalue la performance du modèle. J'utiliserai la fonction scale de scikit-learn, qui standardise toutes les caractéristiques (colonnes) du tableau passé en entrée.
\n\nToutes ces mesures se sont améliorées d'environ 0,1, soit un gain de 16 % — significatif ! Comme suggéré plus haut, avant la mise à l'échelle, plusieurs variables prédictives avaient des ordres de grandeur très différents, ce qui signifie que l'une ou deux pouvaient dominer un algorithme basé sur les distances comme k-NN. Les deux raisons principales de mettre vos données à l'échelle sont :
\n\n- Vos variables prédictives peuvent avoir des plages très différentes et, dans certaines situations, comme avec k-NN, il faut atténuer cet effet pour éviter qu'une caractéristique ne domine l'algorithme ;
\n- Vous souhaitez que vos caractéristiques soient indépendantes des unités de mesure : par exemple, vous pourriez mesurer une caractéristique en mètres et moi en centimètres. Si nous mettons chacun nos données à l'échelle, cette caractéristique deviendra comparable.
\n
\nNous avons vu la place essentielle qu'occupe le prétraitement — sous forme de mise à l'échelle et de centrage — dans le pipeline de data science, et ce, pour encourager une approche holistique des défis du machine learning. Dans de prochains articles, j'espère étendre cette discussion à d'autres types de prétraitement, comme les transformations de données numériques et le prétraitement des données catégorielles, deux volets indispensables de la boîte à outils de tout data scientist. Avant cela, dans le prochain article, j'explorerai le rôle de la mise à l'échelle dans les approches de régression pour la classification. En particulier, j'examinerai la régression logistique et vous verrez que le résultat diffère fortement de celui observé avec k-Nearest Neighbors.
\nDans la fenêtre interactive ci-dessous, vous pouvez expérimenter vous-même avec les données. Commencez par modifier la variable n_neig, qui est le nombre de voisins utilisés par l'algorithme k-NN. Vous pouvez aussi mettre les données à l'échelle en définissant sc = True, si vous le souhaitez. Exécutez ensuite tout le script pour obtenir l'accuracy du modèle, ainsi qu'un classification report.
\n\nGlossaire
\nApprentissage supervisé : la tâche qui consiste à déduire une variable cible à partir de variables prédictives. Par exemple, déduire la variable cible « présence d'une maladie cardiaque » à partir de variables prédictives comme l'âge, le sexe et le statut fumeur.
\nTâche de classification : une tâche d'apprentissage supervisé est une tâche de classification si la variable cible consiste en des catégories (par ex. « clic » ou « non », tumeur « maligne » ou « bénigne »).
\nTâche de régression : une tâche d'apprentissage supervisé est une tâche de régression si la variable cible est une variable continue (par ex. le prix d'une maison) ou une variable catégorielle ordonnée comme la « note de qualité d'un vin ».
\nk-Nearest Neighbors : un algorithme pour les tâches de classification dans lequel un point de données reçoit l'étiquette décidée par le vote majoritaire de ses k plus proches voisins.
\nPrétraitement : ensemble d'opérations utilisées par les data scientists pour mettre les données dans une forme plus adaptée à l'usage prévu. Par exemple, avant une analyse de sentiments sur Twitter, vous pouvez supprimer les balises HTML, les espaces superflus, développer les abréviations et découper les tweets en listes de mots.
\nCentrage et mise à l'échelle : deux formes de prétraitement des données numériques, c'est‑à‑dire des données composées de nombres, par opposition aux catégories ou aux chaînes ; centrer une variable consiste à soustraire sa moyenne à chaque observation pour obtenir une nouvelle variable de moyenne nulle ; mettre à l'échelle une variable consiste à multiplier chaque observation par une constante afin de modifier la plage des données. Voir le corps de l'article pour l'importance de ces techniques et des exemples.
\nCet article a été généré à partir d'un notebook Jupyter. Vous pouvez télécharger le notebook ici.
\n