6.2 Classification à l'aide de l'apprentissage automatique
Objectifs d'apprentissage
À la fin de cette section, vous devriez être capable de :
- 6.2.1 Effectuer une régression logistique sur des ensembles de données et interpréter les résultats.
- 6.2.2 Effectuer un clustering en clusters par k-moyennes sur des ensembles de données.
- 6.2.3 Définir le concept de clustering en clusters basé sur la densité et utiliser DBScan sur des ensembles de données.
- 6.2.4 Interpréter la matrice de confusion dans le clustering en clusters ou la classification de données.
Les problèmes de classification se présentent sous de nombreuses formes. Par exemple, supposons que vous soyez chargé de créer un algorithme qui diagnostique une maladie cardiaque. Les caractéristiques d'entrée peuvent inclure le sexe biologique, l'âge, les données de pression artérielle et les taux de cholestérol. La sortie serait soit : oui (diagnostiquer une maladie cardiaque), soit non (ne pas diagnostiquer de maladie cardiaque). C'est-à-dire que votre algorithme doit classer les patients en « oui » ou « non » en fonction d'un tableau de caractéristiques, ou symptômes en terminologie médicale. La régression logistique est un outil de classification lorsqu'il n'y a que deux sorties possibles. C'est ce qu'on appelle souvent un problème de classification binaire (binomiale) (binary (binomial) classification). Si l'objectif est de classer les données dans plus de deux classes ou catégories, le problème est alors appelé classification multiclasse (multinomiale) (multiclass (multinomial) classification).
D'autres types de problèmes de classification consistent à trouver deux clusters ou plus dans les données. Une cluster (cluster) est une collection de points de données plus proches les uns des autres que des autres points de données, selon une certaine définition de la proximité. Par exemple, certaines caractéristiques de la musique, telles que le tempo, l'instrumentation, la durée totale et les types de motifs d'accords utilisés, peuvent être utilisées comme caractéristiques pour classer la musique en différents genres, comme le rock, la pop, la country et le hip-hop. Un algorithme d'apprentissage automatique supervisé tel qu'un arbre de décision (voir Arbres de décision) ou une forêt aléatoire (voir Autres techniques d'apprentissage automatique) peut être entraîné et utilisé pour classer la musique dans les différents genres prédéfinis. Alternativement, un modèle non supervisé tel que le clustering en clusters par k-moyennes pourrait être utilisé pour regrouper des morceaux aux sonorités similaires sans nécessairement adhérer à un concept de genre.
Cette section se concentrera sur les techniques de régression logistique et les algorithmes de clustering en clusters tels que les k-moyennes et DBScan. Nous utiliserons des mesures d'exactitude comprenant la matrice de confusion.
Régression logistique
Un modèle de régression logistique (logistic regression) prend des vecteurs d'entrée (caractéristiques) et produit une sortie « oui » ou « non ». Tout comme la régression linéaire, le modèle de régression logistique ajuste d'abord une fonction continue basée sur des données étiquetées et connues. Cependant, au lieu d'ajuster une droite aux données, on utilise une fonction sigmoïde. Une fonction sigmoïde (sigmoid function) est un type spécifique de fonction qui associe tout nombre réel à une valeur comprise entre 0 et 1. Le terme sigmoïde vient du fait que le graphe a une forme caractéristique en « S » (comme illustré à la Figure 6.6), et sigma est la lettre grecque qui correspond à notre lettre S. Nous utilisons souvent la notation pour désigner une fonction sigmoïde. La formule de base de la sigmoïde est :
Un avantage de la sigmoïde par rapport à une fonction linéaire est que les valeurs de la sigmoïde restent proches de 0 lorsque est négatif et proches de 1 lorsque est positif. Cela la rend idéale pour classer des entrées arbitraires dans l'une des deux classes, « oui » (1) ou « non » (0). En fait, nous pouvons interpréter l'axe des y comme la probabilité qu'un événement se produise. La fonction sigmoïde peut être déplacée vers la droite ou la gauche et compressée ou étirée horizontalement selon les besoins pour s'adapter aux données. Dans la formule suivante, les paramètres et contrôlent respectivement la position et la forme de la fonction sigmoïde.
Aussi compliquée que cette formule puisse paraître au premier abord, elle est construite à partir d'éléments simples. La présence de suggère qu'il pourrait y avoir une régression linéaire cachée en arrière-plan. En effet, si nous résolvons pour trouver la fonction réciproque de , nous pouvons l'utiliser pour isoler , ce qui nous permet ensuite d'utiliser des techniques de régression linéaire standard pour construire la régression logistique. Rappelons que la fonction logarithme népérien, ln , est la fonction réciproque de l'exponentielle, . Dans ce qui suit, soit égal à .
À la dernière ligne, nous avons utilisé la propriété des puissances des logarithmes, , avec une puissance . La fonction que nous venons d'obtenir s'appelle la fonction logit.
La propriété clé de la fonction logit (logit function) est qu'elle est la fonction réciproque de . Rappelons d'après l'algèbre que si est la fonction réciproque de , alors nous avons pour tout . Dans notre cas, cela signifie que , pour tout . En appliquant maintenant la fonction logit à la fonction sigmoïde générale, nous pouvons écrire :
Ainsi, la fonction logit linéarise la sigmoïde. Examinons d'un peu plus près la fonction logit et ce qu'elle mesure.
Log-odds et régression logistique discrète
La régression logistique est un modèle de prédiction basé sur la notion de cote. La cote (odds) qu'un événement E se produise est le rapport entre la probabilité que E se produise et la probabilité que E ne se produise pas. Soit .
Ainsi, la fonction logit est simplement le logarithme de la cote d'un événement ayant une probabilité donnée . C'est pourquoi le logit est souvent appelé log-cotes. Alors que les probabilités vont de 0 à 1, les log-cotes vont de (moins l'infini) à (l'infini).
Supposons que nous souhaitions prédire la probabilité qu'un événement se produise, sachant qu'un autre événement se produit ou ne se produit pas. Nous allons créer un modèle de régression logistique, , tel que :
- est la probabilité que se produise lorsque ne se produit pas, et
- est la probabilité que se produise lorsque se produit.
Nous obtenons et à l'aide de la fonction logit. Si est la probabilité que se produise sachant que ne se produit pas (c.-à-d., ), en utilisant la notation de la probabilité conditionnelle (voir Distributions de probabilité continues normales), et si est la probabilité que se produise sachant que se produit (c.-à-d., ), alors
, et
Ce modèle est appelé une régression logistique discrète car la variable caractéristique vaut soit 1, soit 0 (selon que l'événement s'est produit ou non).
Exemple 6.4
Problème
Dans une université donnée, il a été constaté que les étudiants résidents de l'État ont plus de chances d'obtenir leur diplôme que les étudiants non-résidents de l'État. Environ 75 % des étudiants résidents finissent par obtenir leur diplôme, contre seulement environ 30 % des étudiants non-résidents. Construisez un modèle de régression logistique discrète à partir de ces données.
Solution
Soit , qui est la probabilité d'obtenir son diplôme si la variable « résident » est fausse, ou 0. Soit , qui est la probabilité d'obtenir son diplôme si la variable « résident » est vraie, ou 1.
Donc , et . Par conséquent, le modèle est :
Vous pouvez vérifier que et .
L'exemple précédent n'utilisait qu'une seule variable caractéristique, « résident », et l'utilité du modèle est donc très limitée. Nous verrons comment étendre le modèle pour inclure plusieurs entrées ou caractéristiques dans la section Techniques de régression multiple.
Vraisemblance maximale et régression logistique continue
La méthode de régression logistique peut également être utilisée pour prédire une réponse par oui/non sur la base d'une entrée continue. La construction du modèle nécessite de trouver des valeurs pour les paramètres de la fonction sigmoïde qui produisent les résultats les plus précis. Pour expliquer comment cela fonctionne, parlons d'abord de la vraisemblance. La vraisemblance (likelihood) d'un modèle est calculée comme suit. Pour chaque point de données , si l'étiquette de est 1 (ou oui), alors calculez ; si l'étiquette est 0 (ou non), alors calculez . Le produit de ces résultats individuels constitue le score de vraisemblance du modèle. Nous voulons trouver le modèle qui a la vraisemblance maximale.
Exemple 6.5
Problème
Considérez les modèles
Supposons qu'il y ait quatre points de données, , , , , et que et aient tous deux l'étiquette 0, tandis que et ont l'étiquette 1. Trouvez les scores de vraisemblance de chaque modèle et déterminez quel modèle s'ajuste le mieux aux données fournies.
Solution
Pour le modèle , les vraisemblances prédites sont , , et . Puisque et 2 ont l'étiquette 0, tandis que et 4 ont l'étiquette 1, nous calculons :
Pour le modèle , les vraisemblances prédites sont , , et .
Ainsi, le modèle est le meilleur des deux modèles sur ces données.
Comment trouve-t-on le modèle qui a la vraisemblance maximale ? La méthode exacte pour trouver les coefficients et pour le modèle dépasse la portée de ce texte. Heureusement, il existe des logiciels qui peuvent faire ce travail à votre place.
Par exemple, la même université a mené une étude sur l'effet de la moyenne pondérée cumulative (GPA) de première année sur l'obtention d'un diplôme universitaire. Un petit échantillon des données est présenté dans le Tableau 6.5. Quel est le modèle qui s'ajuste le mieux à ces données ?
| GPA | Diplôme universitaire obtenu ? |
|---|---|
| 1.5 | N |
| 2.4 | O |
| 3.4 | O |
| 2.1 | N |
| 2.5 | O |
| 0.8 | N |
| 2.9 | N |
| 4.0 | O |
| 2.3 | O |
| 2.1 | N |
| 3.6 | O |
| 0.5 | N |
La Figure 6.7 montre les données sous forme graphique.
Le modèle logistique (trouvé à l'aide d'un logiciel informatique) qui maximise la vraisemblance est :
Le modèle de régression logistique qui s'ajuste le mieux aux données est illustré à la Figure 6.8 avec les points de données colorés en vert pour une obtention de diplôme prédite et en rouge pour une non-obtention prédite.
Régression logistique en Python
Un exemple de code Python pour la régression logistique, utilisant les données du Tableau 6.5, apparaît ci-dessous. Nous utilisons la fonction LogisticRegression trouvée dans la bibliothèque Python sklearn.linear_model.
Code Python
# Import libraries
from sklearn.linear_model import LogisticRegression
# Define input and output data
data = [[1.5, 0], [2.4, 1], [3.4, 1 ], [2.1, 0 ], [2.5, 1 ],
[0.8, 0 ], [2.9, 0 ], [4.0, 1], [2.3, 1], [2.1, 0], [3.6, 1 ], [0.5, 0]]
# Separate features (X) and labels (y)
X = [[row[0]] for row in data] # Feature
y = [row[1] for row in data] # Label
# Build the logistic model
Lmodel = LogisticRegression()
Lmodel.fit(X,y)
# Display the coefficients of the logistic regression
(a,b) = (Lmodel.intercept_[0], Lmodel.coef_[0,0])
print("Coefficients: ", (round(a,3),round(b,3)))
# Display the accuracy of the model
s = Lmodel.score(X,y)
print("Accuracy: ", round(s, 3))
La sortie résultante ressemblera à ceci :
Coefficients: (-2.826, 1.197)
Accuracy: 0.833
Le code produit les coefficients qui peuvent être introduits pour et dans le modèle :
Regroupement par k-moyennes
Les algorithmes de clustering en clusters fonctionnent comme des détectives numériques, découvrant des motifs et des structures dans les données. L'objectif est de trouver et d'étiqueter des groupes de points de données proches les uns des autres. Cette section développe des méthodes de clustering de données (clustering) qui intègrent l'apprentissage automatique.
L'algorithme de clustering par k-moyennes (k-means clustering algorithm) peut classifier ou regrouper des points de données similaires en clusters ou catégories sans connaissance préalable de ce que ces catégories pourraient être (c'est-à-dire l'apprentissage non supervisé). Cependant, l'utilisateur doit fournir une estimation de la valeur de , le nombre de clusters attendu. (Remarque : vous pouvez contourner ce problème en exécutant l'algorithme par itération sur de nombreuses valeurs de et en évaluant quelle valeur de k a produit les meilleurs résultats. Le compromis réside dans le temps nécessaire pour exécuter l'algorithme en utilisant plusieurs valeurs de et interpréter les résultats. La méthode dite du coude est souvent utilisée pour trouver la meilleure valeur de , mais expliquer cette méthode dépasse la portée de ce texte.) L'utilisateur doit également fournir des estimations initiales quant à l'emplacement des centroïdes. Nous verrons par l'exemple comment ces choix peuvent affecter l'algorithme.
Fondamentaux du clustering par k-moyennes
L'idée de base derrière les k-moyennes est assez intuitive : chaque cluster doit être centrée autour de son centroïde de manière à minimiser la distance entre les données de la cluster et son centroïde. L'astuce consiste à trouver ces centroïdes ! Brièvement, un centroïde (centroid) d'un ensemble de points de données est défini comme la moyenne arithmétique des données, considérées comme des vecteurs.
Les étapes de base de l'algorithme de clustering par k-moyennes sont les suivantes :
- Estimer les emplacements des centres de clusters.
- Calculer les distances entre chaque point de données et le centre de chaque cluster. Les points de données sont attribués à la cluster dont le centre est le plus proche d'eux.
- Trouver le centroïde de chaque cluster.
- Répéter les étapes 2 et 3 jusqu'à ce que les centroïdes se stabilisent, c'est-à-dire que les nouveaux centroïdes soient identiques (ou approximativement identiques, dans les limites d'une certaine tolérance donnée) aux centroïdes de l'itération précédente.
Si le clustering en clusters a été bien fait, alors les clusters doivent être clairement séparées. Le score de silhouette (silhouette score) est une mesure du degré de séparation des clusters et est défini comme suit :
Soit la distance moyenne entre le point et tous les autres points de données de la même cluster que le point .
Pour chaque cluster ne contenant pas le point , soit la distance moyenne entre le point et tous les points de données de la cluster . Ensuite, soit le minimum de toutes les valeurs de .
Le score de silhouette est alors obtenu par la formule
Les valeurs de sont comprises entre 1 et 1, des valeurs proches de 1 indiquant des clusters bien séparées, des valeurs proches de 0 indiquant que les clusters sont ambiguës, et des valeurs proches de 1 indiquant un clustering médiocre avec des points assignés aux clusters de façon arbitraire. Heureusement, les progiciels statistiques capables d'effectuer un clustering par k-moyennes pourront calculer le score de silhouette pour vous.
Exemple 6.6
Problème
Une prolifération de champignons a touché une petite zone de jardin. Le champignon a pris naissance sous terre, mais il a produit des champignons facilement repérables. D'après une photo de la zone, on suppose qu'il y a trois clusters de champignons (voir la Figure 6.9). Utilisez les k-moyennes pour classifier les champignons en trois groupes.
Solution
Les données d'emplacement se composent de 19 points indiquant la position en pieds vers l'est et vers le nord par rapport à un point fixe.
(101.7, 51.1), (109.2, 66.7), (33.2, 54.1), (39.6, 53.6), (66.8, 70.5), (119.9, 42.4),
(26.9, 33.1), (55.5, 71.7), (75, 82.4), (108.6, 71.4), (62.1, 83.5), (119.8, 69.1),
(25.9, 30.2), (37.5, 46.4), (24, 49.1), (75.5, 77.8), (101.5, 51), (110.5, 72),
(39.5, 55.8)
Tout d'abord, choisissez trois centroïdes potentiels. Pour simplifier les choses, nous allons simplement prendre les trois premiers points de données (101.7, 51.1), (109.2, 66.7) et (33.2, 54.1), que nous colorerons respectivement en rouge, vert et bleu. Colorez maintenant tous les points de données en rouge, vert et bleu selon le point le plus proche parmi ces trois. Le clustering initial n'est pas parfait, comme vous pouvez le voir sur la Figure 6.10.
Ensuite, nous trouvons les centroïdes de chacun des groupes colorés. En pratique, tout cela est fait automatiquement par un logiciel, mais nous allons calculer l'un des centroïdes explicitement ici. Calculons le centroïde vert.
Points verts actuels : (75, 82.4), (75.5, 77.8), (108.6, 71.4), (109.2, 66.7), (110.5, 72), (119.8, 69.1).
Valeur en x du centroïde vert :
Valeur en y du centroïde vert :
Ainsi, le centroïde vert est situé à (99.8, 73.2).
Tracez maintenant tous les centroïdes. Vous pouvez imaginer que les centroïdes potentiels précédents se sont déplacés vers des positions plus proches des véritables centroïdes des groupes visibles. Le point rouge se déplace vers (107.7, 48.2) ; le point vert se déplace vers (99.8, 73.2) ; et le point bleu se déplace vers (41.1, 54.8). Notez que (en dehors des choix initiaux) les centroïdes ne sont généralement pas des points du jeu de données. Recolorez les points du jeu de données par rapport à ces nouveaux centroïdes, comme le montre la Figure 6.11.
Exécutez l'algorithme un certain nombre de fois jusqu'à ce que la coloration se stabilise. Dans ce cas, l'itération suivante est stable. Les clusters se trouvent-elles là où vous pensiez qu'elles allaient aboutir ? Cet exemple met en évidence le fait que les k-moyennes peuvent être très sensibles au choix initial des centroïdes.
Exécuter à nouveau l'algorithme avec des centroïdes initiaux différents peut produire des clusters différentes, comme le montre la Figure 6.12.
Les algorithmes de clustering en clusters tels que les k-moyennes permettent également de faire des prédictions sur de nouvelles données. Par exemple, supposons qu'un nouveau champignon pousse à l'emplacement (90, 50). Pour classifier ce point comme rouge, vert ou bleu, il suffit de déterminer quel centroïde est le plus proche de ce point.
Rappelons que la distance entre deux points et est obtenue à l'aide de la formule
Distance au centroïde rouge :
Distance au centroïde vert :
Distance au bleu :
Par conséquent, le nouveau champignon doit être inclus dans le groupe rouge.
Parmi les algorithmes de clustering en clusters, les k-moyennes sont plutôt simples, faciles à mettre en œuvre et très rapides. Cependant, ils souffrent de nombreux inconvénients, notamment la sensibilité au choix initial des centroïdes. De plus, les k-moyennes ne détectent pas les clusters qui ne sont pas de simples « taches ». Dans la section suivante, nous aborderons un autre algorithme de clustering qui fonctionne généralement mieux sur un éventail plus large de données.
Regroupement par k-moyennes en Python
Notre exemple précédent utilisait un échantillon de seulement 19 points de données sélectionnés parmi les 115 points de données figurant dans le fichier FungusLocations.csv. Voici le code Python permettant de produire un clustering par k-moyennes à partir d'un ensemble de données :
Code Python
# Import libraries
import pandas as pd ## for dataset management
import matplotlib.pyplot as plt ## for data visualization
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
# Read data
data = pd.read_csv('FungusLocations.csv').dropna()
# Build K-means model with 3 clusters
km = KMeans(n_clusters=3, n_init='auto')
km.fit(data)
# Calculate silhouette score
silhouette_avg = silhouette_score(data, km.labels_)
print("Silhouette Score:", round(silhouette_avg,2))
# Visualize the result of k-Means clustering using matplotlib
plt.scatter(data['East'], data['North'], c=km.labels_, cmap='viridis')
plt.xlabel('East')
plt.ylabel('North')
plt.title('k-Means Clustering Result')
plt.show()
La sortie obtenue ressemblera à ceci :
Silhouette Score: 0.77
Avec un score de silhouette d'environ 0,77, la séparation des points de données en trois clusters semble appropriée.
Pour aller plus loin
Centroïdes par rapport à d'autres moyennes
Au lieu d'utiliser des centroïdes (qui sont calculés à l'aide de moyennes arithmétiques), d'autres moyennes peuvent être employées, notamment les médianes, les moyennes tronquées, les moyennes géométriques ou harmoniques, et bien d'autres. Ces algorithmes peuvent porter des noms différents tels que k-médianes, k-médoydes, etc. De plus amples informations peuvent être trouvées sur Neptune et les articles Tidymodels..
Regroupement basé sur la densité (DBScan)
Supposons que vous deviez classifier les données de la Figure 6.13 en deux clusters.
Comment pourriez-vous procéder ? Il semble y avoir une distinction nette entre les points situés sur l'anneau intérieur et les points situés sur l'anneau extérieur. Alors que le clustering par k-moyennes n'obtiendrait pas de bons résultats sur cet ensemble de données, un algorithme de clustering basé sur la densité (density-based clustering algorithm) tel que DBScan pourrait donner de meilleurs résultats.
Fondamentaux de DBScan
L'algorithme DBScan (DBScan algorithm) (DBScan est un acronyme anglais qui signifie density-based spatial clustering of applications with noise) fonctionne en localisant les points de données centraux (cœurs) qui font partie de régions denses du jeu de données et en s'étendant à partir de ces cœurs en ajoutant des points voisins selon certains critères de proximité.
Tout d'abord, nous définissons deux paramètres : et . Un point dans le jeu de données est appelé point cœur s'il a au moins voisins, en se comptant lui-même, à une distance inférieure ou égale à de lui-même.
Les étapes de DBScan sont les suivantes :
- Choisir un point de départ qui est un point cœur et l'assigner à une cluster. (Remarque : s'il n'y a aucun point cœur dans le jeu de données, les paramètres et devront être ajustés.)
- Ajouter tous les points cœurs qui sont proches (à une distance inférieure à ) du premier point dans la première cluster. Continuer d'ajouter à la cluster de cette façon jusqu'à ce qu'il n'y ait plus de points cœurs suffisamment proches de la première cluster.
- S'il reste des points cœurs non assignés à une cluster, en choisir un pour démarrer une nouvelle cluster et répéter l'étape 2 jusqu'à ce que tous les points cœurs soient assignés à des clusters.
- Pour chaque point non cœur, vérifier s'il est proche de points cœurs. Si c'est le cas, l'ajouter à la cluster du point cœur le plus proche. Si un point non cœur n'est pas assez proche de points cœurs, il ne sera ajouté à aucune cluster. Un tel point est considéré comme une valeur aberrante ou du bruit.
Comme les valeurs de et sont primordiales pour les performances de DBScan, l'algorithme est généralement exécuté plusieurs fois sur le même ensemble de données en utilisant une plage de valeurs de et de valeurs de . S'il y a un grand nombre de valeurs aberrantes et/ou très peu de clusters, le modèle peut souffrir de sous-apprentissage. À l'inverse, un très petit nombre de valeurs aberrantes (ou zéro valeur aberrante) et/ou de nombreuses clusters présentes dans le modèle peuvent être le signe d'un surapprentissage.
Examinons un petit exemple utilisant DBScan avec et pour classifier le jeu de données suivant en clusters. (Les points sont étiquetés par des lettres pour plus de commodité.)
A: (3.5, 5.8) B: (4.5, 3.5) C: (5.0, 5.0) D: (6.0, 6.0) E: (6.0, 3.0) F: (6.9, 4.7)
G: (9.0, 4.0) H: (11.0, 5.0) J: (12.0, 4.0) K: (12.4, 5.4) L: (13.2, 2.5)
Remarque : en pratique, DBScan ne serait jamais effectué à la main, mais les étapes présentées ci-dessous illustrent le fonctionnement de l'algorithme. La Figure 6.14 affiche les données.
Les points cœurs sont ceux qui ont au moins voisins (ou , sans compter le point lui-même) à une distance inférieure ou égale à . La façon la plus simple de déterminer les points cœurs serait de tracer des cercles de rayon 2,1 centrés sur chaque point, comme le montre la Figure 6.15, puis de compter le nombre de points à l'intérieur de chaque cercle.
D'après la Figure 6.15, le point A n'a que deux voisins, A et C, de sorte que A n'est pas un point cœur. D'autre part, le point B a trois voisins, B, C et E, de sorte que B est un point cœur. La liste complète des points cœurs est B, C, D, E, F, H, J et K. On peut donc choisir B pour commencer la première cluster. Ensuite, en partant de B, les points C et E sont ajoutés. Ensuite, D, E et F sont ajoutés à la première cluster en expansion. Ni A ni G ne sont ajoutés à ce stade car ils ne sont pas des points cœurs. Ayant trouvé tous les points cœurs de la première cluster, laissons H commencer une deuxième cluster. Les seuls points cœurs restants sont suffisamment proches de H pour que la deuxième cluster soit formée de H, J et K.
Based on Figure 6.15, point A has only two neighbors, A and C, so A is not a core point. On the other hand, point B has three neighbors, B, C, and E, so B is core. The full list of core points is B, C, D, E, F, H, J, and K. So B may be chosen to start the first cluster. Then, building from B, points C and E are added next. Next, D, E, and F are added to the growing first cluster. Neither A nor G are added at this stage since they are not core points. Having found all core points that are in the first cluster, let H start a second cluster. The only core points left are close enough to H that the second cluster is H, J, and K.
DBScan en Python
La bibliothèque Python sklearn.cluster dispose d'un module nommé DBSCAN. Voici comment il fonctionne sur le jeu de données DBScanExample.csv.
Code Python
# Import libraries
import pandas as pd ## for dataset management
from sklearn.cluster import DBSCAN
# Read data
data = pd.read_csv('DBScanExample.csv').dropna()
# Run DBScan
db = DBSCAN(eps=1.3, min_samples=5).fit(data)
labels = db.labels_
# Find the number of clusters and points of noise
n_clusters = len(set(labels)) - (1 if -1 in labels else 0)
n_noise = list(labels).count(-1)
print("Number of clusters: ", n_clusters)
print("Points of noise:", n_noise)
La sortie obtenue ressemblera à ceci :
Number of clusters: 2
Points of noise: 8
Code Python
# Visualize clusters
import matplotlib.pyplot as plt ## for data visualization
plt.scatter(data['X'], data['Y'], c=db.labels_)
La sortie obtenue ressemblera à ceci :
La matrice de confusion
Lors de l'entraînement et du test de tout algorithme effectuant une classification, comme les modèles de régression logistique, le clustering par k-moyennes ou DBScan, il est important de mesurer l'exactitude et d'identifier les erreurs. La matrice de confusion (confusion matrix) est un moyen de quantifier et de visualiser l'efficacité d'un modèle de classification. Ce concept sera illustré par l'exemple suivant.
Supposons que vous ayez entraîné un modèle qui classifie des images de plantes dans l'une des trois catégories suivantes : fleurs, arbres et herbes. Lorsque vous testez le modèle sur 100 images supplémentaires de plantes, vous découvrez qu'il a correctement identifié les fleurs, les arbres et les herbes la majorité du temps, mais qu'il y a également eu un certain nombre d'erreurs. Le Tableau 6.6 présente les résultats dans une matrice de confusion :
| Identifié comme une fleur | Identifié comme un arbre | Identifié comme une herbe | |
|---|---|---|---|
| Est une fleur | 23 | 3 | 9 |
| Est un arbre | 2 | 32 | 0 |
| Est une herbe | 12 | 1 | 18 |
Ainsi, nous pouvons voir que 23 fleurs, 32 arbres et 18 herbes ont été correctement identifiés, ce qui donne au modèle une exactitude de , soit 73 %. Remarque : les termes TP, TN, FP et FN introduits dans Qu'est-ce que l'apprentissage automatique ? et définis à nouveau dans l'exemple suivant ne s'appliquent pas lors de la classification de données en trois catégories ou plus ; cependant, la matrice de confusion donne des informations plus détaillées sur les erreurs. Lorsque les nombres hors de la diagonale principale sont relativement bas, le modèle a obtenu de bons résultats. À l'inverse, des nombres plus élevés hors de la diagonale principale indiquent des taux d'erreur d'identification, ou de confusion, plus élevés. Dans cet exemple, lorsqu'on lui présentait une image de fleur, le modèle réussissait assez bien à l'identifier comme une fleur, mais confondait les fleurs avec des herbes plus souvent qu'avec des arbres. Le modèle a très bien réussi à identifier les arbres comme des arbres, ne les confondant jamais avec des herbes et ne les confondant que deux fois avec des fleurs. En revanche, le modèle n'a pas été aussi efficace pour identifier les herbes. Près de 40 % des images d'herbes ont été confondues avec des fleurs ! Avec ces informations en main, vous pourriez revenir à votre modèle et ajuster les paramètres de manière à traiter ces problèmes spécifiques. Il peut y avoir un moyen de modifier le modèle qui aide particulièrement à identifier les herbes. Ou vous pouvez décider de prendre des mesures supplémentaires chaque fois qu'une image est identifiée comme une fleur, par exemple en soumettant l'image à une analyse supplémentaire pour vous assurer qu'il s'agit bien d'une fleur et non pas d'une herbe mal étiquetée.
Lorsqu'il n'y a que deux classes (classification binaire), la matrice de confusion n'aurait bien sûr que quatre entrées. Des termes spéciaux s'appliquent à ce cas lorsque les deux classes sont « Positif » et « Négatif ». Pensez au diagnostic d'une maladie. Soit le patient a la maladie, soit il ne l'a pas. Un médecin peut effectuer un test, et l'espoir est que le test déterminera avec certitude si le patient a cette maladie. Malheureusement, aucun test n'est précis à 100 %. Les deux cas dans lesquels le test échoue sont appelés faux positif et faux négatif. Un faux positif (également appelé erreur de type I) se produit lorsque l'état réel est négatif, mais que le modèle ou le test prédit un résultat positif. Un faux négatif (également appelé erreur de type II) est exactement le contraire : l'état est positif, mais le modèle ou le test prédit un résultat négatif. Les deux erreurs peuvent être dangereuses dans des domaines tels que la médecine. Une certaine terminologie pour les quatre possibilités est présentée dans le Tableau 6.7.
| Prédit Positif | Prédit Négatif | |
|---|---|---|
| Positif réel | Vrai positif (TP) – succès | Faux négatif (FN) – échec |
| Négatif réel | Faux positif (FP) – fausse alerte | Vrai négatif (TN) – correctement rejeté |
Les ajustements apportés à un modèle pour réduire un type d'erreur augmentent généralement le taux de l'autre type d'erreur. C'est-à-dire que si vous souhaitez que votre modèle ait un taux très faible de faux négatifs, il peut acquérir un biais positif (devenir plus sensible), prédisant davantage de positifs, qu'il s'agisse de vrais ou de faux positifs. En revanche, si le taux de faux positifs doit être réduit, le modèle peut acquérir un biais négatif (devenir moins sensible) et produire davantage de prédictions négatives dans l'ensemble, à la fois de vrais et de faux négatifs.
Visualisation des matrices de confusion
Les matrices de confusion sont souvent ombrées ou colorées de manière à montrer le contraste entre les valeurs élevées et les valeurs faibles, ce qui est utile pour localiser tout comportement anormal dans le modèle, souvent appelée une carte thermique (heatmap). La Figure 6.17 fournit une carte thermique pour l'exemple fleurs/arbres/herbes.
Les nuances plus sombres indiquent des valeurs plus élevées. La diagonale principale se détache avec des cellules plus sombres. C'est ce à quoi on peut s'attendre si notre classificateur fait son travail. Cependant, des nuances plus sombres dans les cellules situées en dehors de la diagonale principale indiquent des taux d'erreur de classification plus élevés. Les nombres 12 en bas à gauche et 9 en haut à droite sont marquants. Le modèle a manifestement plus de mal avec les fleurs et les herbes qu'avec les arbres.
Génération d'une matrice de confusion en Python
Le jeu de données CollegeCompletionData.csv contient 62 points de données (parmi lesquels seulement 12 points de données ont été utilisés dans le Tableau 6.6). Le code suivant produit une régression logistique basée sur l'ensemble des 62 points. Ensuite, la matrice de confusion est générée. Enfin, un affichage visuel de la matrice de confusion sous forme de carte thermique est généré à l'aide d'une autre bibliothèque de visualisation appelée seaborn. Si vous n'avez pas besoin de la carte thermique, tapez simplement print(cf) directement après avoir obtenu la matrice de confusion pour afficher une version textuelle de la matrice.
Code Python
# Import libraries
import pandas as pd ## for dataset management
import matplotlib.pyplot as plt ## for data visualization
import seaborn as sns ## for heatmap visualization
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix
# Read data
data = pd.read_csv('CollegeCompletionData.csv').dropna()
x = data[['GPA']]
y = data['Completion']
# Build the logistic model
model = LogisticRegression()
model.fit(x,y)
# Generate model predictions
y_pred = model.predict(x)
# Generate the confusion matrix
cf = confusion_matrix(y, y_pred)
# Plot the heatmap using seaborn and matplotlib
sns.heatmap(cf, annot=True, fmt='d', cmap='Blues', cbar=True)
plt.xlabel('Predicted')
plt.ylabel('True')
plt.yticks(rotation=0)
plt.title('Confusion Matrix')
plt.show()
La sortie obtenue ressemblera à ceci :
D'après l'analyse précédente, nous trouvons 20 vrais positifs et 24 vrais négatifs, ce qui représente une exactitude de . Il y a eu 10 faux négatifs et 8 faux positifs.