Blog ENI : Toute la veille numérique !
En raison d'une opération de maintenance, le site Editions ENI sera inaccessible le mardi 10 décembre, en début de journée. Nous vous invitons à anticiper vos achats. Nous nous excusons pour la gêne occasionnée
En raison d'une opération de maintenance, le site Editions ENI sera inaccessible le mardi 10 décembre, en début de journée. Nous vous invitons à anticiper vos achats. Nous nous excusons pour la gêne occasionnée
  1. Livres et vidéos
  2. Machine Learning
  3. Algorithmes de classification
Extrait - Machine Learning Implémentation en Python avec Scikit-learn (2e édition)
Extraits du livre
Machine Learning Implémentation en Python avec Scikit-learn (2e édition)
1 avis
Revenir à la page d'achat du livre

Algorithmes de classification

La tâche de classification

1. Définition

La tâche de classification est, avec la régression, une des deux principales tâches de Machine Learning en apprentissage supervisé.

Elle signifie associer à chaque donnée une étiquette (ou label) parmi un ensemble de labels possibles (ou catégories). Dans les cas les plus simples, il n’y a que deux catégories, c’est une classification binaire ou binomiale. Sinon, il s’agit d’une classification en classes multiples, aussi appelée classification multiclasse.

Les catégories doivent être déterminées avant toute forme d’apprentissage. De plus, les données servant à l’apprentissage doivent toutes recevoir un label, permettant de connaître la réponse attendue : il s’agit d’un apprentissage supervisé. 

Si, dans la grande majorité des besoins, chaque image sera associée à une classe, il y a quelques cas particuliers, comme :

  • La détection d’objets : il s’agit non pas de déterminer la classe d’une image globalement mais de reconnaître les différents objets présents et leur position respective.

  • La segmentation d’image : cas particulier de la détection, il s’agit d’indiquer pour chaque pixel à quelle classe il se rapporte....

Évaluation des modèles

Avant même de voir le fonctionnement des principaux algorithmes, il est important de comprendre comment les modèles seront évalués. Cette évaluation ne dépend pas des algorithmes choisis.

L’évaluation sera faite sur l’ensemble de validation lors du choix des hyperparamètres et/ou du modèle, et sur l’ensemble de test à la fin du processus, lorsque le ou les meilleurs modèles auront été déterminés.

L’évaluation se fait aussi régulièrement sur l’ensemble d’apprentissage. Si cette évaluation n’a pas pour but de décider d’un modèle, elle permet de vérifier s’il y a eu apprentissage et s’il n’y a pas de surapprentissage.

Avec Scikit-learn, le processus sera toujours le même :

  • Créer un modèle en lui indiquant les paramètres souhaités. Dans le cas de la classification, la classe sera un classifier (dans l’exemple, il s’agit d’un TreeClassifier, c’est-à-dire un arbre de décision).

  • Faire l’apprentissage grâce à fit, en lui fournissant les données X et y d’apprentissage (il est possible d’utiliser de la validation croisée ou une optimisation des hyperparamètres, comme vu dans le chapitre précédent).

  • Prédire les résultats sur le dataset souhaité grâce à predict.

  • Appeler les différentes métriques souhaitées présentes dans sklearn.metrics avec en paramètres les résultats attendus et les données prédites.

En termes de code, cela ressemble donc à ceci (ici sur le dataset Iris) :

import sklearn.metrics 
from sklearn.tree import DecisionTreeClassifier 
import prepare 
 
# Chargement des données (cf. fichier prepare.py) 
train_X, test_X, train_y, test_y = prepare.prepare_iris() 

# Création d'un modèle 
classifier = DecisionTreeClassifier(max_depth=2, random_state=42) 
 
# Fit du modèle 
classifier.fit(train_X, train_y) 
 
# Prédictions 
pred_y = classifier.predict(test_X) 
 
# Evaluation 
print(sklearn.metrics.confusion_matrix(test_y, pred_y)) 
print(sklearn.metrics.accuracy_score(test_y...

Les arbres de décision et algorithmes dérivés

Les arbres de décisions sont parmi les algorithmes de Machine Learning les plus simples. Pour autant, ils peuvent être très performants, en particulier utilisés avec des méthodes ensemblistes. En effet, il n’est pas rare de voir ces algorithmes en haut des classements dans les défis Kaggle.

Kaggle est un site présentant des challenges de Machine Learning, idéal pour s’entraîner, découvrir des techniques et apprendre des meilleurs du domaine.

1. Arbres de décision

L’arbre de décision est, comme son nom l’indique, un arbre au sens mathématique, c’est-à-dire un ensemble de nœuds reliés par des arcs et menant à des feuilles.

À chaque nœud, un test doit être effectué sur la valeur d’une variable. Selon le cas, il faut alors descendre dans un des nœuds fils. Le processus est répété jusqu’à se retrouver dans un nœud sans descendant qui est alors appelé feuille.

Cette dernière indique la classe de la donnée traitée après classification.

images/ML6_7.png

Voici un exemple d’arbre qui pourrait servir à indiquer si un crédit peut ou non être accordé à une personne. L’arbre indique que le premier critère à regarder est l’âge du demandeur. Si la personne a plus de 25 ans, c’est donc la branche inférieure qu’il faut suivre.

Soit l’enregistrement Alice (Age = 34 ans, Salaire = 3000€/mois). L’arbre indique que son crédit sera accepté car :

  • elle n’a pas moins de 25 ans,

  • elle n’a pas plus de 55 ans,

  • son salaire est supérieur à 2500 €/mois.

Il n’existe pas un mais plusieurs algorithmes permettant d’obtenir des arbres de décision. Ils varient sur le résultat fourni en sortie et la façon dont l’arbre est construit : ID3, C4.5, C5.0, CART, CHAID, etc. Leurs grands principes restent cependant les mêmes.

L’algorithme implémenté dans Scikit-learn est CART, qui est une version améliorée de C4.5. À noter : l’algorithme C5.0 est soumis à une licence propriétaire et n’est donc généralement...

K-Nearest Neighbors

KNN, ou « K-Nearest Neighbors » pour « K plus proches voisins », est une méthode particulière qui ne crée pas de modèle à proprement parler : l’ensemble des données d’apprentissage constitue le modèle. Cet algorithme est dit non paramétrique.

En effet, chaque donnée est classée en fonction des K données les plus proches dans l’espace des variables. K est donc un des hyperparamètres à déterminer.

images/ML6_9.png

Dans cet exemple, deux classes sont représentées par des signes plus (+) et des signes croix (X). Trois données sont à prédire (cercles) et K a été fixé à 3 :

  • Cercle 1 : les trois voisins les plus proches sont X, la donnée 1 sera donc classée comme X.

  • Cercle 2 : les trois voisins se répartissent en deux + et un X, la donnée est donc classée par un vote à la majorité comme étant +.

  • Cercle 3 : les trois voisins sont +, la donnée est classée comme +.

Si K est trop faible, peu de voisins sont sélectionnés et l’algorithme sera alors très sensible à des cas particuliers (surapprentissage). Au contraire, avec un K trop grand, les frontières entre les classes auront tendance à s’effacer....

Logistic Regression

La régression logistique, malgré son nom, est une technique de classification et non de régression. Dans le cas d’une classification multiclasse, elle est dite polytomique.

1. Régression logistique binaire

La régression logistique fonctionne en deux temps :

  • Création d’une fonction linéaire des variables, qui associe des nombres positifs aux données de la classe positive et des valeurs négatives à la classe négative.

  • Application de la fonction logistique sur le résultat obtenu pour ramener la sortie à une valeur entre 0 et 1.

La fonction linéaire s’écrira sous la forme images/ML6_9a.png.
La fonction logistique s’écrit ensuite images/ML6_9b.png.

Pour toutes les valeurs de c négatives, y sera inférieur à 0.5 et c’est donc la classe négative qui sera prédite. À l’inverse, pour les nombres positifs, c’est la classe positive qui est prédite :

images/ML6_10.png

La régression logistique est simple à mettre en place. L’apprentissage consiste à déterminer les coefficients de la fonction linéaire. Plusieurs stratégies, dites « solvers », sont pour cela utilisables. Elles sont itératives et utilisent des algorithmes différents pour essayer de converger vers l’optimum, c’est-à-dire le meilleur set de paramètres. Il est d’usage d’en tester plusieurs pour obtenir les meilleurs résultats.

Elle présente aussi l’avantage d’être facilement compréhensible. En effet, toute variable dont le coefficient est positif indique une corrélation positive vers la classe positive. Un coefficient négatif indique une corrélation négative.

Comme les coefficients dépendent aussi de l’échelle des données en entrée, il est plus que fortement recommandé d’utiliser la régression logistique après une normalisation des variables. Les coefficients sont alors aussi comparables entre eux : le ratio entre deux coefficients permet d’obtenir l’importance relative de l’un sur l’autre.

Soit...

Naive Bayes

1. Principe général

La classification naïve bayésienne (ou Naive Bayes) tire son nom de ses deux principales caractéristiques :

  • Elle utilise les probabilités conditionnelles (théorème de Bayes).

  • Elle fait une supposition dite « naïve », à savoir que les variables ne sont pas corrélées entre elles.

Il s’agit d’une technique facile à mettre en œuvre et qui donne de bons résultats en classification.

Les probabilités conditionnelles correspondent au calcul de P(B|A), probabilité d’avoir l’évènement B en sachant A. Par exemple, P("Parapluie"|"Pluie") indique la probabilité de prendre son parapluie en sachant qu’il pleut.

Dans le cas de la classification, c’est la probabilité d’être dans chaque classe en fonction des entrées qui est à déterminer. Elle est notée P(y|X) signifiant la probabilité de la classe y en connaissant les entrées X.

Grâce au théorème de Bayes et à l’hypothèse d’indépendance des variables entre elles, il est possible de calculer une telle probabilité à partir des probabilités suivantes :

  • La probabilité de y pour l’ensemble de la population (qui correspond généralement à la proportion des données d’apprentissage dans la classe y). Elle est dite antérieure.

  • La probabilité d’une caractéristique pour une classe donnée, qui peut aussi être vue comme la proportion de chaque valeur d’une variable pour une classe donnée, par exemple la proportion de 1ere classe pour les individus ayant survécu. Elle est dite vraisemblance.

  • La probabilité d’avoir les entrées X, c’est-à-dire la probabilité d’avoir un tel cas, généralement obtenu par la multiplication des probabilités de chacune de ses caractéristiques dans la population globale. Elle est dite évidence.

La probabilité d’être dans une classe donnée (aussi dite postérieure) se calcule alors...

Support Vector Machine

1. Présentation générale

Les machines à vecteurs de support (ou Support Vector Machine en anglais, abrégées en SVM) sont un ensemble de techniques généralisant les classifieurs linéaires.

Ils cumulent deux principes différents qui, mis ensemble, vont donner toute la puissance aux SVM.

a. Marge et support vector

Tout d’abord, dans le cas d’un problème de classification linéairement séparable, il existe une infinité d’hyperplans pouvant séparer l’espace en deux. Intuitivement, plus une frontière sera loin des points de chaque côté et plus il y a des chances qu’elle généralise bien de nouveaux points.

Ainsi, dans l’exemple suivant, les lignes fines sont des frontières potentielles mais elles restent près de certains points. Au contraire, la ligne plus épaisse est la plus loin possible des différents points, et serait un meilleur classifieur.

Dans les exemples suivants, les exemples seront en deux dimensions uniquement pour des raisons de lisibilité. Dans la pratique, les problèmes ont souvent de nombreuses dimensions. Il ne s’agira donc plus d’une droite de séparation mais d’un hyperplan, qui en est une généralisation mathématique.

images/ML6_11.png

La marge de chaque côté correspond à la distance entre la droite et le point le plus proche de chaque classe. Le premier point du dataset qui définit la limite de la marge va être appelé « support vector » (d’où le nom de SVM) et c’est seulement lui qui doit être retenu.

Un autre nom du SVM est séparateur à vaste marge, justement en référence à cette recherche de marge maximale.

Pour l’exemple, la marge est représentée en rectangle clair et les supports sont entourés :

images/ML6_12.png

Bien évidemment, il est rare qu’un tel classifieur soit possible, car les frontières sont généralement beaucoup plus floues qu’ici. Il existe donc un paramètre C qui permet de jouer sur l’erreur acceptable lors de la création de la séparation en ajoutant une pénalité à chaque donnée mal classifiée. 

Plus C est faible...