Autres techniques d'apprentissage automatique

6.5 Autres techniques d'apprentissage automatique

Objectifs d'apprentissage

À la fin de cette section, vous devriez être capable de :

  • 6.5.1 Discuter du concept de forêt aléatoire en tant que méthode de bootstrapping pour les arbres de décision.
  • 6.5.2 Créer un modèle de forêt aléatoire et l'utiliser pour classifier des données.
  • 6.5.3 Définir la probabilité conditionnelle et expliquer les probabilités a priori pour les jeux de données d'entraînement.
  • 6.5.4 Produire un classifieur naïf bayésien (multinomial) et l'utiliser pour classifier des données.
  • 6.5.5 Discuter du concept de classifieur naïf bayésien gaussien.
  • 6.5.6 Décrire certaines méthodes pour travailler avec les mégadonnées de manière efficace et performante.

Jusqu'à présent, nous avons abordé plusieurs algorithmes d'apprentissage automatique adaptés à des tâches particulières. Naturellement, le domaine de l'apprentissage automatique s'étend bien au-delà de ce modeste aperçu de méthodes. Cette section présente plusieurs autres techniques d'apprentissage automatique, bien que de manière moins détaillée. Des méthodes telles que les forêts aléatoires, les classifieurs naïfs bayésiens et un raffinement de ces derniers appelé Bayes naïf gaussien offrent des approches distinctes pour résoudre des problèmes complexes. De plus, cette section donne un aperçu des stratégies de gestion des jeux de données volumineux, en présentant un panorama complet des méthodes conçues pour relever les défis uniques posés par les mégadonnées.

Forêts aléatoires

Dans Arbres de décision, nous avons construit des arbres de décision et abordé certaines méthodes, telles que l'élagage, qui permettent d'améliorer la fiabilité des prédictions de l'arbre de décision. Pour chaque problème de classification, un arbre est créé et sert de modèle pour toutes les utilisations ultérieures. Cependant, quel que soit le soin apporté à la création et à l'élagage d'un arbre de décision, il s'agit en fin de compte d'un modèle unique dont la structure même peut comporter un certain biais en raison des variations du jeu d'entraînement. Si nous avions utilisé un jeu d'entraînement différent, notre arbre de décision aurait pu être sensiblement différent.

Dans le monde réel, obtenir une quantité suffisante de données pour entraîner un modèle d'apprentissage automatique peut être difficile, long et coûteux. Il n'est pas toujours envisageable de chercher de nouveaux jeux d'entraînement simplement pour créer et évaluer divers arbres de décision. Une forêt aléatoire (random forest), un algorithme de classification qui utilise plusieurs arbres de décision, permet de contourner cette difficulté. Tout comme nous l'avons fait pour les régressions linéaires dans L'apprentissage automatique dans l'analyse de régression, la méthode d'agrégation bootstrapping est employée. Dans ce contexte, l'agrégation bootstrapping (bagging) (bootstrapping aggregating (bagging)) consiste à rééchantillonner plusieurs fois à partir du même jeu de données de test, en créant un nouvel arbre de décision à chaque fois. Les arbres de décision individuels qui composent un modèle de forêt aléatoire sont appelés des apprenants faibles (weak learners). Afin d'accroître la diversité de ces apprenants faibles, une sélection aléatoire des variables explicatives est appliquée, ce qui signifie que chaque arbre est construit en utilisant un sous-ensemble sélectionné aléatoirement parmi les variables de caractéristiques. Par exemple, si nous cherchons à prédire la présence d'une maladie cardiaque chez un patient en utilisant l'âge, le poids et le taux de cholestérol, le modèle de forêt aléatoire sera constitué de divers arbres de décision, dont certains n'utiliseront que l'âge et le poids, d'autres l'âge et le taux de cholestérol, et d'autres encore uniquement le poids. Lors de la classification de nouvelles données, la prédiction finale de la forêt aléatoire est déterminée par un « vote à la majorité » parmi les arbres de décision individuels. De plus, le fait que les arbres de décision individuels n'utilisent qu'un sous-ensemble de caractéristiques permet de déduire l'importance de chaque variable explicative en observant l'exactitude des arbres qui l'utilisent.

En raison de la complexité de cette méthode, les forêts aléatoires sont illustrées au moyen du bloc de code Python suivant.

Supposons que vous construisiez un modèle prédisant les températures quotidiennes en fonction de facteurs tels que la température d'hier et d'avant-hier, ainsi que de prévisions provenant de sources multiples, à partir du jeu de données temps.csv. Comme il y a un grand nombre de variables explicatives en entrée, il ne sera pas possible de visualiser les données. De plus, certaines variables ne contribueront probablement pas beaucoup aux prédictions. Comment faire le tri ? Un modèle de forêt aléatoire pourrait être l'outil idéal. La bibliothèque Python sklearn propose un module appelé sklearn.ensemble qui permet de créer le modèle de forêt aléatoire.

Code Python

      # Import libraries
      import pandas as pd  ## for dataset management
      from sklearn.model_selection import train_test_split
      import sklearn.ensemble as ens
      
      # Read input file
      features = pd.read_csv('temps.csv').dropna()
      
      # Use 'actual' as the response variable
      labels = features['actual']
      
      # Convert text data into numerical values
      # This is called "one-hot" encoding
      features = pd.get_dummies(features)
      
      # The other columns are used as features
      features = features.drop('actual', axis=1)
      feature_list = list(features.columns)
      
      # Split data into training and testing sets
      train_features, test_features, train_labels, test_labels = train_test_split(features, labels, test_size=0.25)
      
      # Create random forest model
      rf = ens.RandomForestRegressor(n_estimators=1000)
      rf.fit(train_features, train_labels)
    

La sortie obtenue ressemble à ceci :

Sortie du code Python affichant « RandomForestRegressor » sur la première ligne avec un fond bleu clair et « RandomForestRegressor(n_estimators=1000) » sur la deuxième ligne.

Le code Python précédent charge le jeu de données temps.csv, en désignant la colonne « actual » (les températures réelles de chaque jour) comme variable à prédire. Toutes les autres colonnes sont considérées comme des caractéristiques. Étant donné que la colonne « week » contient des données catégorielles (textuelles), elle doit être convertie en valeurs numériques avant de pouvoir élaborer le moindre modèle. La méthode de l'encodage one-hot permet de résoudre ce problème. Dans l'encodage one-hot (one-hot encoding), chaque catégorie est associée à un vecteur contenant un seul 1 correspondant à cette catégorie, tandis que toutes les autres catégories sont mises à 0. Dans notre exemple, chaque jour de la semaine est représenté par un vecteur à sept dimensions comme suit :

  • Lundi : [1, 0, 0, 0, 0, 0, 0]
  • Mardi : [0, 1, 0, 0, 0, 0, 0]
  • Mercredi : [0, 0, 1, 0, 0, 0, 0]
  • Jeudi : [0, 0, 0, 1, 0, 0, 0]
  • Vendredi : [0, 0, 0, 0, 1, 0, 0]
  • Samedi : [0, 0, 0, 0, 0, 1, 0]
  • Dimanche : [0, 0, 0, 0, 0, 0, 1]

Le jeu de données est divisé en ensemble d'entraînement (75 %) et ensemble de test (25 %), et le modèle de forêt aléatoire est entraîné sur l'ensemble d'entraînement, comme le montre ce bloc de code Python :

Code Python

      import statistics as stats # to compute the mean

      # Get predictions and compute average error
      predictions = rf.predict(test_features)
      errors = abs(predictions - test_labels)
      round(np.mean(errors),2)
    

La sortie obtenue ressemble à ceci :

3.91

Avec une erreur absolue moyenne de seulement 3,91, les températures prédites ne s'écartent que d'environ 4 °F en moyenne ; la forêt aléatoire semble donc donner de très bons résultats sur l'ensemble de test, d'autant plus qu'il est notoirement difficile de prédire des données météorologiques qui présentent habituellement une forte variance. Voyons maintenant quelles caractéristiques se sont révélées les plus importantes pour formuler les prédictions, information stockée dans rf.feature_importances_. Remarquez le nombre de commandes Python utilisées uniquement pour le tri et le formatage des résultats, qui peuvent être ignorées sans inconvénient dans cet extrait de code.

Code Python

    # Find the importance of each feature
    importances = list(rf.feature_importances_)
    feature_importances = [(feature, round(importance,2)) for feature, importance in zip(feature_list, importances)]
    feature_importances = sorted(feature_importances, key=lambda x: x[1], reverse=True)
    [print('Variable: {:20} Importance: {}'.format(*pair)) for pair in feature_importances];
    

La sortie obtenue ressemble à ceci :

Variable: temp_1               Importance: 0.62
Variable: average              Importance: 0.19
Variable: forecast_acc         Importance: 0.06
Variable: forecast_noaa        Importance: 0.04
Variable: day                  Importance: 0.02
Variable: temp_2               Importance: 0.02
Variable: forecast_under       Importance: 0.02
Variable: friend               Importance: 0.02
Variable: month                Importance: 0.01
Variable: year                 Importance: 0.0
Variable: week_Fri             Importance: 0.0
Variable: week_Mon             Importance: 0.0
Variable: week_Sat             Importance: 0.0
Variable: week_Sun             Importance: 0.0
Variable: week_Thurs           Importance: 0.0
Variable: week_Tues            Importance: 0.0
Variable: week_Wed             Importance: 0.0

Comme nous pouvons le constater, le meilleur prédicteur des températures quotidiennes est la température de la veille (« temp_1 »), suivie de la température moyenne observée ce même jour au cours des années précédentes (« average »). Les prévisions de la NOAA et d'ACC ne présentent qu'une importance secondaire, tandis que toutes les autres variables de caractéristiques se sont révélées relativement inutiles pour prédire la température actuelle. Il n'est guère surprenant que le jour de la semaine (lundi, mardi, etc.) ne joue aucun rôle significatif dans la prévision des températures.

Pour aller plus loin

Utiliser les forêts aléatoires pour la reconnaissance faciale

Comme indiqué dans l'introduction de ce chapitre, la reconnaissance faciale est une application importante et largement répandue de l'apprentissage automatique — et un exemple de tâche de classification. La reconnaissance faciale (facial recognition) consiste à catégoriser ou étiqueter des images de visages en fonction de l'identité des personnes représentées sur ces images, ce qui constitue une tâche de classification multiclasse. (Dans sa forme la plus simple, lorsque la tâche consiste à déterminer si une image donnée contient le visage d'un individu en particulier ou non, elle est considérée comme une tâche de classification binaire.) Lorsque les données sont constituées de nombreuses images de visages contenant chacune des centaines ou des milliers de caractéristiques, l'utilisation de forêts aléatoires est particulièrement appropriée. Consultez ce carnet Colab, rédigé par Michael Beyeler, neuroscientifique à l'Université de Californie à Santa Barbara, qui détaille pas à pas la mise en place et l'utilisation d'un modèle de forêt aléatoire pour la reconnaissance faciale en Python.

Classifieurs naïfs bayésiens multinomiaux

Une méthode pour classifier des données consiste à rechercher des caractéristiques fréquentes permettant de distinguer un point de données d'un autre. Par exemple, imaginez que vous disposiez d'une vaste collection d'articles de presse et que vous souhaitiez les catégoriser automatiquement par thèmes tels que le sport, la politique, l'économie, le divertissement et la technologie. Vous avez peut-être remarqué certains schémas récurrents : les articles de sport ont tendance à mentionner des noms d'équipes et des scores chiffrés, tandis que les articles de politique contiennent assez souvent les mots « démocrate » et « républicain ». Les articles économiques peuvent employer des termes tels que « perspectives » et « ralentissement » bien plus souvent que les articles sur le divertissement ou la technologie. La classification naïve bayésienne multinomiale peut être appliquée pour classer ces articles en fonction de la fréquence et de la distribution des mots habituellement rencontrés dans chaque type d'article.

L'algorithme de classification naïve bayésienne (naïve Bayes classification) multinomiale repose sur le théorème de Bayes, en exploitant les probabilités a priori et ce théorème pour prédire la classe ou l'étiquette de nouvelles données. (Voir Distributions de probabilité continues normales pour plus de détails.) L'algorithme du classifieur naïf bayésien est un outil puissant pour déterminer la probabilité d'événements à partir de connaissances préalables. Rappelons que la notation P(A|B)P(A|B) désigne la probabilité conditionnelle que l'événement AA se produise sachant que l'événement BB est connu pour s'être produit (ou s'est déjà produit ou est supposé se produire). Dans sa version la plus simple, le théorème de Bayes s'écrit sous la forme

P(A|B)=P(A)P(B|A)P(B)P(A|B)=P(A)P(B|A)P(B)

Ici, nous considérons AA comme un événement que nous souhaitons prédire et BB comme une information qui nous est fournie (éventuellement sous la forme d'une variable explicative d'un jeu de données). La probabilité conditionnelle P(B|A)P(B|A) représente la vraisemblance connue d'observer l'événement BB dans le cas où A se réalise, qui est généralement calculée à partir des données d'entraînement. La valeur de P(A)P(A) est également calculée ou estimée à partir des données d'entraînement et est désignée sous le nom de probabilité a priori (prior probability).

Exemple 6.11

Problème

Trois entreprises fournissent des batteries pour un modèle donné de véhicule électrique. Acme Electronics fournit 25 % des batteries, et 2,3 % d'entre elles sont défectueuses. Batteries ‘R’ Us fournit 36 % des batteries, et 1,7 % d'entre elles sont défectueuses. Current Trends fournit les 39 % restants, et 2,1 % d'entre elles sont défectueuses. Une batterie défectueuse est livrée sans mention de sa provenance. Quelle est la probabilité qu'elle provienne de chez Acme Electronics ?

Solution

Tout d'abord, nous déterminons la probabilité qu'une batterie livrée soit défectueuse. Soient AA, BB et CC les proportions respectives de batteries fournies par les entreprises Acme Electronics, Batteries ‘R’ Us et Current Trends. Alors P(A)=0.25,P(B)=0.36,P(C)=0.39P(A)=0.25,P(B)=0.36,P(C)=0.39. Nous disposons également des probabilités de recevoir une batterie défectueuse (événement dd) provenant de chaque entreprise : P(d|A)=0.023,P(d|B)=0.017,P(d|C)=0.021P(d|A)=0.023,P(d|B)=0.017,P(d|C)=0.021. La probabilité de recevoir une batterie défectueuse de l'un quelconque de ces fournisseurs est la somme :

P ( d ) = P ( A ) P ( d | A ) + P ( B ) P ( d | B ) + P ( C ) P ( d | C ) = ( 0.25 ) ( 0.023 ) + ( 0.36 ) ( 0.017 ) + ( 0.39 ) ( 0.021 ) = 0.02 P ( d ) = P ( A ) P ( d | A ) + P ( B ) P ( d | B ) + P ( C ) P ( d | C ) = ( 0.25 ) ( 0.023 ) + ( 0.36 ) ( 0.017 ) + ( 0.39 ) ( 0.021 ) = 0.02

En appliquant le théorème de Bayes, la probabilité que la batterie défectueuse provienne d'Acme est de :

P ( A | d ) = P ( A ) P ( d | A ) P ( d ) = ( 0.25 ) ( 0.023 ) 0.02 = 0.29 = 29 % P ( A | d ) = P ( A ) P ( d | A ) P ( d ) = ( 0.25 ) ( 0.023 ) 0.02 = 0.29 = 29 %

En pratique, il existe souvent une multitude de caractéristiques, notées B1,B2,B3,…BnB1,B2,B3,…Bn, où chaque caractéristique peut correspondre à l'événement qu'un mot particulier apparaisse dans un message, et nous cherchons à classer le message dans une catégorie donnée en fonction de ces événements. En d'autres termes, nous souhaitons estimer P(A|B1,B2,B3,…,Bn)P(A|B1,B2,B3,…,Bn), c'est-à-dire la probabilité que l'événement A se produise sachant que les événements B1,B2,B3,…BnB1,B2,B3,…Bn sont survenus. En réalité, notre objectif principal est de distinguer l'événement AA de A′A′ plutôt que d'obtenir un calcul exact des probabilités, ce qui nous permet d'effectuer de simples comparaisons pour tirer une conclusion. Un exemple permet de mieux illustrer cette procédure.

Exemple 6.12

Problème

Une étude portant sur 1 000 articles de presse a été menée. Il est établi que 600 étaient d'authentiques articles et 400 étaient faux. Parmi les articles réels, 432 contenaient le mot today (aujourd'hui), 87 contenaient le mot disaster (catastrophe) et 303 contenaient le mot police. Parmi les faux articles, 124 contenaient le mot today, 320 contenaient le mot disaster et 230 contenaient le mot police. Déterminez si un nouvel article est réel ou faux si (a) il contient le mot « disaster » ou (b) il contient les mots « today » et « police ».

Solution

Tout d'abord, calculons les probabilités a priori qu'un article de presse soit réel ou faux d'après la proportion de ces articles dans le jeu d'entraînement. P(Real)=6001,000=0.6P(Real)=6001,000=0.6 et P(Fake)=4001000=0.4P(Fake)=4001000=0.4. Ensuite, à partir des occurrences de mots observées dans les données d'entraînement, déterminons les probabilités conditionnelles :

P(today|Real)=432600=0.72P(today|Real)=432600=0.72, P(disaster|Real)=87600=0.145P(disaster|Real)=87600=0.145, P(police|Real)=303600=0.505P(police|Real)=303600=0.505

P(today|Fake)=124400=0.31P(today|Fake)=124400=0.31, P(disaster|Fake)=320400=0.8P(disaster|Fake)=320400=0.8, P(disaster|Fake)=230400=0.575P(disaster|Fake)=230400=0.575

À présent, nous n'utiliserons que le numérateur de la formule de Bayes, qui est proportionnel à la probabilité exacte. Cela permettra d'obtenir des scores que nous pourrons comparer. Pour la partie (a) :

Score P(Real|disaster)P(Real|disaster) : P(Real)P(disaster|Real)=(0.6)(0.145)=0.087P(Real)P(disaster|Real)=(0.6)(0.145)=0.087

Score P(Fake|disaster) P(Fake|disaster) : P(Fake)P(disaster|Fake)=(0.4)(0.8)=0.32P(Fake)P(disaster|Fake)=(0.4)(0.8)=0.32

Puisque le score pour Fake est supérieur au score pour Real, nous classifions l'article comme faux.

Pour la partie (b), la démarche est identique. Notez que les probabilités sont multipliées entre elles lorsque plusieurs caractéristiques sont présentes.

Score P(Real|today, police)P(Real|today, police) : P(Real)P(today|Real)P(police|Real)P(Real)P(today|Real)P(police|Real)

= ( 0.6 ) ( 0.72 ) ( .505 ) = 0.22 = ( 0.6 ) ( 0.72 ) ( .505 ) = 0.22

Score P(Fake|today, police)P(Fake|today, police) : P(Fake)P(today|Fake)P(police|Fake)P(Fake)P(today|Fake)P(police|Fake)

= ( 0.4 ) ( 0.31 ) ( .575 ) = 0.071 = ( 0.4 ) ( 0.31 ) ( .575 ) = 0.071

Dans ce cas, le score pour Real est plus élevé que celui pour Fake ; nous en concluons donc que l'article est authentique.

Remarque : la classification naïve bayésienne repose sur l'hypothèse que toutes les caractéristiques des données sont indépendantes. Bien que cette condition ne soit pas systématiquement vérifiée dans les jeux de données réels, le modèle de Bayes naïf peut néanmoins offrir de très bonnes performances dans des situations concrètes. De plus, il s'agit d'un algorithme particulièrement simple et efficace, ce qui en fait souvent la méthode de premier choix pour aborder un problème de classification avant de recourir à des modèles plus sophistiqués.

Bayes naïf gaussien pour les probabilités continues

Le modèle de Bayes naïf gaussien (Gaussian naïve Bayes) est une variante de l'algorithme de classification naïve bayésienne spécialement conçue pour les données présentant des caractéristiques continues. Contrairement au modèle naïf bayésien standard (multinomial), qui est couramment employé pour classifier des données textuelles comportant des variables discrètes, le modèle de Bayes naïf gaussien est adapté aux jeux de données dont les variables suivent une distribution gaussienne (normale) (vous pouvez vous remémorer la discussion sur la distribution normale dans Distributions de probabilité discrètes et continues). Il se révèle particulièrement utile pour traiter des problèmes portant sur des données continues à valeurs réelles, dans lesquelles les variables explicatives sont relativement indépendantes.

Dans cet exemple, nous travaillerons avec un jeu de données volumineux, cirrhosis.csv, qui comprend de nombreuses caractéristiques, tant catégorielles que numériques. Ce jeu de données (ainsi que bien d'autres !) peut être téléchargé gratuitement sur Kaggle.com. Nous n'utiliserons que quatre colonnes numériques comme caractéristiques. La variable réponse est « Status », qui peut prendre les valeurs DD pour le décès, CC pour censuré (ce qui signifie que le patient n'est pas décédé pendant la période d'observation) et CL pour censuré en raison d'une greffe du foie.

Code Python

      # Import libraries
      import pandas as pd  ## for dataset management
      from sklearn.model_selection import train_test_split
      from sklearn.naive_bayes import GaussianNB
      from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
      
      # Load the dataset
      data = pd.read_csv('cirrhosis.csv').dropna()
      
      # Choose feature columns and target labels
      X = data[['Bilirubin','Cholesterol','Albumin','Copper']]
      y = data['Status']
      
      # Split the dataset into training and testing sets (80% training, 20% testing)
      X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
      
      # Initialize and train the Gaussian naive Bayes classifier
      gnb_classifier = GaussianNB()
      gnb_classifier.fit(X_train, y_train)
      
      # Predict labels for the test set
      y_pred = gnb_classifier.predict(X_test)
      
      # Evaluate the classifier's performance
      accuracy = accuracy_score(y_test, y_pred)
      confusion = confusion_matrix(y_test, y_pred, labels=['D','C','CL'])
      report = classification_report(y_test, y_pred)
      
      print(f"Accuracy: {accuracy:.2f}")
      print("Confusion matrix with label order D, C, CL:\n", confusion)
    

La sortie obtenue ressemble à ceci :

Accuracy: 0.71
Confusion matrix with label order D, C, CL:
[[10 14  2]
[ 0 30  0]
[ 0  0  0]]

Le score d'exactitude de 0,71 indique que les étiquettes correctes ont été attribuées dans 71 % des cas. Nous constatons que 10 décès (DD) et 30 non-décès (CC ou CLCL) ont été correctement prédits. En revanche, 16 prédictions de décès correspondaient en fait à des cas sans décès. Il s'agit d'une erreur bien plus tolérable que l'inverse (prédire l'absence de décès alors que le patient va décéder) ; le modèle semble donc adéquat pour la tâche de prédiction de la mortalité liée à la cirrhose.

Travailler avec les mégadonnées

Dans le paysage en constante évolution de l'apprentissage automatique, la question des mégadonnées occupe une place centrale. Comme nous l'avons vu dans Gestion des grands jeux de données, les ensembles de données de grande taille, souvent appelés mégadonnées (big data), désignent des jeux de données extrêmement volumineux et complexes dont le traitement, la gestion et l'analyse dépassent les capacités des outils traditionnels. Les mégadonnées se caractérisent par la règle des « trois V » :

  • Volume : Les mégadonnées impliquent des volumes considérables, allant souvent de téraoctets (240≈1012240≈1012 octets) jusqu'à des pétaoctets (250≈1015250≈1015 octets), voire davantage. D'où provient une telle quantité de données ? Un exemple remarquable est le jeu de données Common Crawl, qui contient des pétaoctets de données constituées de contenus bruts de pages web, de métadonnées et d'autres informations recueillies sur Internet. Il est fort probable que des jeux de données atteignant des exaoctets (260≈1018260≈1018 octets) fassent leur apparition dans un avenir proche.
  • Vélocité : Dans certaines applications concrètes de première importance, les données sont générées et recueillies à une vitesse fulgurante. Ce flux continu peut être diffusé en continu en temps réel ou stocké dans d'immenses bases de données pour une analyse ultérieure. On peut citer en exemple le domaine de la vidéo très haute définition, dont les données peuvent être capturées, enregistrées et analysées à un débit de plusieurs gigabits par heure.
  • Variété : Les mégadonnées englobent également une grande diversité de types de données, comprenant des données structurées (par exemple des bases de données), des données non structurées (textes, images, vidéos) et toutes les formes intermédiaires. Cette variété complexifie considérablement la gestion et l'analyse des données. Songez à l'ensemble des sources possibles et à quel point elles diffèrent tant pour leur transmission que pour leur stockage. Des interactions sur les réseaux sociaux aux transactions de commerce électronique, en passant par les relevés de capteurs issus d'appareils de l'Internet des objets (IoT), les données affluent à un rythme, à une échelle et avec une diversité inédits. De surcroît, bien malin qui pourra prédire les méthodes entièrement nouvelles selon lesquelles les données seront collectées et exploitées à l'avenir !

Nettoyage et exploration de données

L'étape la plus chronophage en science des données a traditionnellement été le nettoyage de données (data cleaning), un processus que nous avons abordé dans Nettoyage et prétraitement des données. Les jeux de données sont fréquemment désordonnés, comportent des données manquantes et sont susceptibles de contenir des erreurs ou des fautes de frappe. Ces difficultés sont décuplées lorsqu'il s'agit de mégadonnées. S'il peut falloir environ une heure à une personne pour examiner un jeu de données de quelques centaines d'entrées afin de repérer et corriger les erreurs ou traiter les valeurs manquantes, une telle démarche devient impossible à réaliser manuellement en présence de millions ou de milliards d'enregistrements. Le nettoyage de données à grande échelle doit impérativement être pris en charge par des outils informatiques ; toutefois, les outils traditionnels de nettoyage peuvent être inadaptés face au volume colossal des mégadonnées. Heureusement, il existe des outils capables de traiter de grandes quantités de données en parallèle.

Exploration de données

L'exploration de données (data mining) est le processus de découverte de régularités, de tendances et d'enseignements au sein de grands jeux de données. Elle fait appel à diverses techniques issues de l'apprentissage automatique, des statistiques et des systèmes de bases de données pour faire émerger des connaissances utiles dissimulées dans les données. L'exploration de données vise à transformer des données brutes en informations exploitables qui peuvent être employées pour la prise de décision, la prédiction et la résolution de problèmes, et constitue souvent l'étape suivante après le nettoyage des données. Parmi les tâches courantes d'exploration de données figurent le partitionnement, la classification, la régression et la détection d'anomalies. Pour les données non étiquetées, des algorithmes d'apprentissage non supervisé peuvent servir à découvrir des groupes au sein d'échantillons plus restreints de données, groupes auxquels on peut ensuite attribuer des étiquettes destinées à des analyses de classification ou de régression de plus grande envergure.

Pour aller plus loin

Outils pour l'exploration de données

Parmi les outils d'exploration de données à grande échelle, on trouve Apache Spark, qui s'appuie sur un système de fichiers distribué (HDFS) pour stocker et traiter les données sur des clusters de serveurs tout en tirant parti du traitement en mémoire vive, ainsi qu'Apache Flink, qui permet l'analyse de données en temps réel. Consultez cet article de Macrometa pour une comparaison détaillée de ces deux environnements.

Méthodes pour travailler avec les mégadonnées

À l'ère des mégadonnées, l'apprentissage automatique exige une grande capacité de mise à l'échelle et d'adaptation. Les méthodes d'analyse traditionnelles, telles que la régression linéaire, la régression logistique, les arbres de décision et les classifieurs bayésiens, demeurent des instruments précieux. Toutefois, elles tirent fréquemment avantage d'optimisations et de nouvelles stratégies spécialement conçues pour les environnements de mégadonnées :

  • Traitement parallèle : Les techniques qui distribuent les calculs sur plusieurs nœuds ou cœurs de processeur, comme la parallélisation des arbres de décision et les méthodes d'ensemble, peuvent considérablement accélérer l'entraînement des modèles.
  • Sélection de caractéristiques : Toutes les variables explicatives d'un jeu de données gigantesque ne peuvent pas nécessairement être utilisées en même temps. Des algorithmes élaborés de sélection de caractéristiques s'avèrent indispensables pour isoler uniquement les variables les plus déterminantes pour les prédictions.
  • Apprentissage progressif : Certaines situations impliquant des mégadonnées nécessitent des modèles capables d'apprendre de manière incrémentale à partir de flux continus de données. Les algorithmes d'apprentissage automatique doivent alors pouvoir s'ajuster en temps réel à l'évolution des données.
  • Apprentissage profond : Les réseaux de neurones profonds, grâce à leur capacité à traiter de vastes volumes de données et à appréhender des motifs complexes, occupent une place grandissante dans les applications de mégadonnées. Nous explorerons ce sujet en détail dans Notions fondamentales d'apprentissage profond et d'IA.
  • Réduction de la dimensionnalité : Des techniques comme l'analyse en composantes principales (ACP) permettent de réduire la dimension des données, les rendant plus maniables tout en préservant les informations essentielles. (Remarque : la réduction de dimension dépasse le cadre du présent ouvrage.)

Lorsque le volume de données est considérable, on privilégie en règle générale les algorithmes les plus simples et les plus efficients, pour lesquels la vitesse prime sur l'exactitude absolue. Par exemple, le filtrage des courriers indésirables (spam) fait souvent appel à la classification de Bayes multinomiale. À l'ère de la communication numérique instantanée, une boîte de réception électronique peut rapidement être submergée de centaines de messages non sollicités, voire malveillants, en l'espace d'une seule journée ; il est donc crucial de disposer d'une méthode pour classifier et supprimer ces pourriels. Ces algorithmes passent facilement à l'échelle pour traiter des mégadonnées, alors que d'autres approches, telles que les arbres de décision et les forêts aléatoires, demandent des ressources considérables et ne montent pas aussi aisément en charge.

Jeux de données

Remarque : Les principaux jeux de données référencés dans le code du chapitre peuvent également être téléchargés ici.