Travaux Pratiques : Algorithme des K Plus Proches Voisins (KNN)
Objectif
L'objectif de ce TP est de mettre en pratique l'algorithme des K Plus Proches Voisins (KNN) sur un petit ensemble de données.
Exercice 1 : Douceur d'un fruit
Contexte
Imaginons que nous ayons des données sur des fruits, caractérisés par leur douceur (sur une échelle de 1 à 10) et leur acidité (sur une échelle de 1 à 10). Nous voulons prédire si un nouveau fruit est une "Pomme" ou une "Orange".
Nos données d'entraînement sont :
| Fruit | Douceur | Acidité | Type |
|---|---|---|---|
| Fruit 1 | 7 | 3 | Pomme |
| Fruit 2 | 8 | 2 | Pomme |
| Fruit 3 | 3 | 7 | Orange |
| Fruit 4 | 4 | 8 | Orange |
| Fruit 5 | 6 | 4 | Pomme |
| Fruit 6 | 2 | 6 | Orange |
Nouveau fruit à classifier : Fruit X (Douceur = 5, Acidité = 5)
À réaliser
-
Représenter les données : Créer une liste de dictionnaires pour stocker les données d'entraînement.
-
Calculer la distance euclidienne : Écrire une fonction
distance_euclidienne(point1, point2)qui prend deux points (chacun étant un tuple ou une liste de coordonnées, par exemple(douceur, acidite)et retourne leur distance euclidienne). Rappel :d = √((x2-x1)² + (y2-y1)²) -
Trouver les K voisins : Écrire une fonction
trouver_voisins(donnees_entrainement, point_test, k)qui :- Calcule la distance entre
point_testet chaque point dansdonnees_entrainement. - Stocke ces distances avec les types de fruits correspondants.
- Trie les voisins par distance croissante.
- Retourne les
kpremiers voisins (les plus proches).
- Calcule la distance entre
-
Prédire la classe : Écrire une fonction
predire_classe(voisins)qui prend la liste deskvoisins et retourne la classe majoritaire parmi eux. -
Mettre tout ensemble : Utiliser les fonctions précédentes pour prédire la classe du Fruit X avec K=3.
Exercice 2 : Classification de fleurs Iris (simplifié)
Contexte
Nous allons appliquer l'algorithme KNN à un ensemble de données simplifié de fleurs Iris, caractérisées par la longueur de leurs sépales et de leurs pétales. Nous voulons distinguer deux types de fleurs : Setosa et Versicolor.
Nos données d'entraînement sont :
| Fleur | Longueur Sépale | Longueur Pétale | Type |
|---|---|---|---|
| Fleur A | 5.1 | 1.4 | Setosa |
| Fleur B | 4.9 | 1.4 | Setosa |
| Fleur C | 6.0 | 5.1 | Versicolor |
| Fleur D | 5.5 | 4.0 | Versicolor |
| Fleur E | 5.2 | 1.5 | Setosa |
| Fleur F | 6.3 | 4.8 | Versicolor |
Nouvelle fleur à classifier : Fleur Y (Longueur Sépale = 5.8, Longueur Pétale = 3.5)
À réaliser
-
Représenter les données : Créer une liste de dictionnaires pour stocker les données d'entraînement, incluant les mesures et le type de fleur.
-
Calculer la distance euclidienne : Écrire la fonction
distance_euclidiennede l'Exercice 1 pour calculer la distance entre deux points (ici,(longueur_sepale, longueur_petale)). -
Trouver les K voisins : Écrire la fonction
trouver_voisinspour trouver les K voisins les plus proches de la Fleur Y dans les données d'entraînement. -
Prédire la classe : Écrire la fonction
predire_classepour déterminer la classe majoritaire parmi les K voisins. -
Mettre tout ensemble : Utiliser les fonctions précédentes pour prédire la classe de la Fleur Y avec K=5.
Exercice 3 : Détection de spam (conceptuel)
Contexte
Imaginons un système simplifié de détection de spam basé sur KNN. Nous caractérisons les emails par deux mesures : le nombre de mots clés suspects (comme "gratuit", "offre", "gagner") et la longueur de l'email (en nombre de caractères, normalisée sur une échelle de 1 à 10).
Nos données d'entraînement sont :
| Mots clés suspects | Longueur Email | Type | |
|---|---|---|---|
| Email 1 | 8 | 9 | Spam |
| Email 2 | 2 | 3 | Non-Spam |
| Email 3 | 7 | 8 | Spam |
| Email 4 | 1 | 2 | Non-Spam |
| Email 5 | 9 | 7 | Spam |
| Email 6 | 3 | 4 | Non-Spam |
Nouvel email à classifier : Email Z (Mots clés suspects = 6, Longueur Email = 6)
À réaliser
-
Représenter les données : Créer une liste de dictionnaires pour stocker les données d'entraînement, incluant les mesures et le type d'email.
-
Calculer la distance euclidienne : Écrire une fonction
distance_euclidiennepour calculer la distance entre deux points (ici,(mots_cles_suspects, longueur_email)). -
Trouver les K voisins : Écrire une fonction
trouver_voisinspour trouver les K voisins les plus proches de l'Email Z dans les données d'entraînement. -
Prédire la classe : Écrire une fonction
predire_classepour déterminer la classe majoritaire parmi les K voisins. -
Mettre tout ensemble : Utiliser les fonctions précédentes pour prédire la classe de l'Email Z avec K=3.