Explication des algorithmes KNN et Kmeans pour l'IA

Author Profile - Paul Claret

By Paul Claret

10 minutes read - 06/12/24

Oui oui on va couvrir tout ça dans un seul article.

Prérequis

Donc du coup, je vais vous demander d’être à jour avant de commencer. Veillez à bien comprendre les sujets suivants:
- Supervised, Unsupervised, Semi-Supervised, Reinforcement Learning
- Mon article sur les introduction aux algorithmes de bases
- Facultatif mais bien: Regression Linéaire et logistique

KNN (K-Nearest Neighbors): Classification et régession

Introduction

L’algorithme des K-Nearest Neighbors (KNN) est l’un des algorithmes les plus simples et intuitifs en machine learning. Malgré sa simplicité, il reste souvent très efficace pour des tâches classiques de classification et de régression.

KNN, ou K-Nearest Neighbors, est un algorithme de classification et de régression qui est basé sur l’idée simple que des points similaires sont souvent proches les uns des autres. En d’autres termes, KNN suppose que des exemples appartenant à une même catégorie ou ayant des valeurs similaires sont souvent situés géographiquement proches dans l’espace des caractéristiques.

Par exemple, si vous cherchez à classifier des fruits en fonction de leurs caractéristiques (taille, poids, couleur), KNN examinera les fruits voisins et déduira la catégorie (par exemple, orange ou pomme) selon la majorité des voisins.

Pasted image 20241208112935.png Sur l’image ci dessus, si l’on prend on citron vert, que l’on calcule sa “rondeur” et “taille” et la place sur le graphique, on va regarder où il se place et quels sont ses voisons les plus proches. S’il est proche des autres agrumes, c’es surement qu’il fait parti de la famille des agrumes et surement pas des bananes ou fraises.

Pourquoi utiliser KNN ?

KNN est souvent utilisé pour des tâches de machine learning simples où :

Il est également utilisé comme référence pour comparer d’autres algorithmes plus complexes.

Fonctionnement de KNN

Concept des voisins les plus proches (Nearest Neighbors)

L’algorithme KNN fonctionne en suivant ces étapes essentielles :

  1. Choix de la distance : KNN mesure la distance entre le point cible (l’entrée pour laquelle on souhaite prédire une valeur ou une classe) et les points existants dans l’ensemble des données. Les distances les plus couramment utilisées sont :
  1. Sélection des K voisins les plus proches : Une fois que la distance est calculée, KNN sélectionne les K voisins les plus proches du point cible. La valeur de K est un hyperparamètre crucial et doit être choisi avec soin.

  2. Classification / Régression :

Exemple classification

Dans notre image agrumes plus haut, on va essayer le classer un citron vert. Plaçons le sur notre graphe et regardons qui sont ses voisons les plus proches. Prennons la distance euclidienne et K=3.

Pasted image 20241208113425.png

On remarque que le citron vert est proche du kiwi, citron jaune et clémentine. On regarde quel est la classe des éléments les plus proches. On trouve 2 agrumes et 1 autre (kiwi). On peut donc en déduire que le citron vert est un agrume.

Les étapes de l’implémentation de KNN

Préparation des Données

Avant de passer à l’implémentation, il est nécessaire de préparer vos données. Cela inclut :

  1. Nettoyage des Données : Assurez-vous qu’il n’y a pas de valeurs manquantes ou de bruit dans vos données.
  2. Normalisation / Standardisation : Les algorithmes de distance comme KNN sont sensibles aux échelles des variables. C’est pourquoi, il est souvent nécessaire de normaliser les valeurs (par exemple, en utilisant MinMaxScaler).

Normalisation MinMax :

\[ X_{norm}= \frac{X - X_{min}}{X_{max} - X_{min}} \]

Cela permet de garder toutes les valeurs sur la même échelle.

Sélection des Paramètres K

Le choix de la valeur de K est crucial. Trop petit, K peut rendre l’algorithme sensible au bruit, tandis que trop grand, K risque de lisser excessivement les décisions.

Implémentation simple en Python

Voici un exemple basique pour implémenter KNN avec la bibliothèque scikit-learn en Python :

                
from sklearn.neighbors import KNeighborsClassifier
import numpy as np
                    
# Exemple de données
X = np.array([[1, 2], [2, 3], [3, 4], [6, 7]])
y = np.array(['chat', 'chien', 'oiseau', 'poisson'])
                    
# Création du modèle KNN
knn = KNeighborsClassifier(n_neighbors=3)
                    
# Entraînement du modèle
knn.fit(X, y)
                    
# Prédiction sur un nouvel exemple
nouvelle_donnée = np.array([[2, 2]])
prediction = knn.predict(nouvelle_donnée)
print("Classe prédite :", prediction)
                
            

Avantages et limites de l’algorithme KNN

Avantages

Inconvénients


K-Means: clustering

Introduction

L’algorithme K-Means est l’un des algorithmes de clustering les plus utilisés en machine learning. Contrairement à KNN qui est une méthode supervisée (classification/régression), K-Means appartient aux algorithmes non supervisés. Il est principalement utilisé pour segmentation des données, classification implicite, et analyse exploratoire des données.

K-Means est basé sur l’idée simple de partitionner les données en plusieurs groupes (ou clusters) afin de regrouper des points similaires ensemble tout en maintenant une certaine distance entre les groupes. Chaque cluster est défini par son centre, appelé centroid, qui représente la moyenne des points dans ce groupe.

Par exemple, imaginez un ensemble de clients pour une entreprise. En utilisant K-Means, vous pouvez segmenter ces clients en groupes homogènes en fonction de leurs comportements d’achat, facilitant ainsi une meilleure personnalisation des services.

Pourquoi utiliser K-Means ?

K-Means est souvent utilisé dans les tâches suivantes :

Fonctionnement de l’algorithme K-Means

L’algorithme K-Means fonctionne en suivant une série d’étapes itératives simples.

1. Initialisation des Centroids

La première étape consiste à choisir un nombre K, qui représente le nombre de groupes (clusters) que l’on souhaite créer. Une fois que K est défini :

2. Attribution des points aux Centroids

Une fois les centroids initialisés :

Chaque point est donc assigné au cluster où il se trouve le plus proche du centroid.

3. Mise à jour des Centroids

Après avoir attribué tous les points :

Cela permet de raffiner la position des centroids afin qu’ils représentent au mieux les points regroupés dans leurs clusters respectifs.

4. Répétition jusqu’à convergence

Les étapes 2 et 3 sont répétées jusqu’à ce que l’algorithme atteigne un critère d’arrêt, comme :

Résumé en un GIF:

kmeans.gif Ici on voit les centroids (petites étoiles noires), placé aléatoirement à la première itération (on voit surtout le vert en bas à droite qui est mal placé). Puis au fur et à mesure que l’on itère, on les voit se rapprocher de clusters différents (rouge, bleu, vert). Une fois que les centroids ne bougent plus, il n’y a plus d’interêt à continuer, le programme ne fait plus aucun changement.

Formules clés dans K-Means

La mise à jour des centroids repose sur la formule suivante pour calculer la position moyenne des points dans chaque cluster :

Calcul du centroid \(C_{k}\) pour un cluster \(k\) :

Pour un ensemble de points \(X1,X2,...,XnX_1, X_2, ..., X_n\) appartenant à un même cluster, le centroid \(C_{k}\) est :

\[ C_{k}= \frac{\sum_{i=1}^n X_i}{n} \]

\(n\) est le nombre de points dans ce cluster.

Les étapes de l’implémentation de K-Means

1. Préparation des Données

Avant d’appliquer l’algorithme K-Means, il est nécessaire de préparer correctement vos données :

  1. Nettoyage des Données :

    • Vérifiez et traitez les valeurs manquantes.
    • Éliminez les anomalies et les valeurs aberrantes qui peuvent fausser le clustering.
  2. Normalisation des Données :

    • K-Means est sensible à l’échelle des variables.
    • Par conséquent, il est recommandé de normaliser vos caractéristiques (utilisez des méthodes comme StandardScaler ou MinMaxScaler).

Normalisation MinMax :

\[ X_{norm}= \frac{X - X_{min}}{X_{max} - X_{min}} \]

2. Choix du nombre de clusters KK

La valeur de KK doit être sélectionnée avec soin.

Il existe plusieurs méthodes pour choisir un bon KK :

  1. La Méthode du Coude (Elbow Method) :

    • Tracez une courbe de l’erreur intra-cluster (sum of squared errors) en fonction de différents KK.
    • Identifiez le point où l’augmentation des clusters ne diminue plus significativement l’erreur.
  2. Silhouette Score :

    • Cette métrique analyse la cohérence des clusters en comparant la distance intra-cluster et la distance inter-cluster.

3. Implémentation simple en Python

Vous pouvez facilement implémenter K-Means en utilisant la bibliothèque scikit-learn.

Exemple basique de K-Means :

                
from sklearn.cluster import KMeans
import numpy as np
import matplotlib.pyplot as plt
                    
# Exemple de données
X = np.array([[1, 2], [2, 2], [4, 5], [8, 8], [5, 6]])
                    
# Application de l'algorithme K-Means pour K=2 clusters
kmeans = KMeans(n_clusters=2, random_state=42)
kmeans.fit(X)
                    
# Centroids
centroids = kmeans.cluster_centers_
labels = kmeans.labels_
                    
# Visualisation des clusters
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap=plt.cm.Spectral)
plt.scatter(centroids[:, 0], centroids[:, 1], c='black', marker='X', s=200)
plt.title('K-Means Clusters')
plt.show()
                
            

Avantages et limites de l’algorithme K-Means

Avantages

Conclusion

En résumé, les algorithmes K-Nearest Neighbors (KNN) et K-Means sont des outils essentiels en machine learning, chacun avec ses objectifs et son domaine d’application. Bien que KNN soit principalement utilisé pour des tâches de classification et de régression, tandis que K-Means est une méthode de clustering non supervisé, ils partagent des concepts fondamentaux basés sur les relations entre les points dans l’espace des caractéristiques.

KNN est une méthode intuitive et simple qui détermine la classe ou la valeur d’un point en se basant sur la proximité des voisins. Il offre des résultats souvent précis sans nécessiter beaucoup de prétraitement des données. Cependant, sa complexité computationnelle peut devenir un problème pour de grands ensembles de données, et le choix du paramètre K joue un rôle crucial dans ses performances.

De l’autre côté, K-Means, en tant qu’algorithme de clustering, vise à partitionner un ensemble de données en groupes homogènes. C’est une méthode puissante pour détecter des structures internes, explorer des motifs et comprendre les relations entre les caractéristiques sans avoir besoin d’étiquettes prédéfinies. Toutefois, il nécessite une bonne sélection du nombre de clusters (K) et peut être sensible aux valeurs aberrantes et à l’initialisation des centres de clusters.

Les deux algorithmes nécessitent souvent des étapes cruciales de préparation des données, comme la normalisation ou le nettoyage, afin d’obtenir des résultats optimaux. KNN et K-Means peuvent également être combinés à d’autres méthodes plus avancées (par exemple, K-Means++ pour le clustering ou des optimisations de KNN) pour améliorer leurs performances.

En fin de compte, KNN et K-Means sont des piliers en machine learning qui offrent des solutions efficaces, simples à comprendre, et souvent de bonnes performances, tout en servant de référence solide pour tester et comparer d’autres algorithmes plus sophistiqués.

Vous voulez apprendre l'IA en autonomie ?

Si vous êtes nouveau sur mon site, je vous invite à aller voir ma page sur Roadmap IA qui regroupe tous mes articles dans l'ordre pour vous facilitez l'apprentissage.