Frontières de décision
Fait partie de la section Apprentissage supervisé du Journey Machine Learning de Coddy. Leçon 8 sur 58.
Une frontière de décision est l’endroit où la réponse d’un modèle change. Pour la visualiser, demande la réponse du modèle en chaque point du graphique, disposé sous forme de grille :
np.meshgrid associe chaque x à chaque y. Aplatissez les paires en lignes, prédisez-les toutes, puis remettez les réponses dans la forme de la grille :
xx, yy = np.meshgrid(np.linspace(2, 16, 100), np.linspace(0.5, 6.5, 100))
grid = np.column_stack([xx.flatten(), yy.flatten()])
zz = model.predict(grid).reshape(xx.shape)
ax.contourf(xx, yy, zz, levels=[-0.5, 0.5, 1.5], colors=["C0", "C1"], alpha=0.3)contourf remplit la zone de chaque code de classe : levels place les bordures à mi-chemin entre les codes, colors assortit les couleurs aux points. Tracez les points après, par-dessus.
Défi
FacileUn distributeur automatique trie les pièces selon leur taille et leur poids. Le code de départ entraîne un modèle k-NN sur coins.csv (codes de classe de 0 à 2) ; draw_coins(ax) les dessine.
- Crée une grille de 100 par 100
xx,yy: de 18 à 26 mm en largeur, de 3 à 9 g en hauteur. - Prédisez chaque point dans
zz, avec la même forme que la grille. - Remplis la carte avec les couleurs C0 à C2, puis dessine les pièces et affiche le résultat.
Comme celle-ci :
Les pièces d’un autre pays, donc des zones différentes.
Coddy décrit ta carte.
Essayez vous-même
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
# Une ligne par pièce mesurée par la machine : diamètre (mm), poids (g), valeur en centimes
coins = pd.read_csv("coins.csv")
X = np.column_stack([coins["diameter_mm"], coins["weight_g"]])
# Codes des classes : 0 pour 10c, 1 pour 20c, 2 pour 50c
y = coins["value_c"].map({10: 0, 20: 1, 50: 2})
names = ["10c", "20c", "50c"]
model = KNeighborsClassifier(n_neighbors=5)
model.fit(X, y)
# Trace les pièces sur ax, avec une couleur par classe : C0, C1, C2
def draw_coins(ax):
for code in range(3):
ax.scatter(X[y == code, 0], X[y == code, 1], s=20, label=names[code])
ax.legend()
fig, ax = plt.subplots()
ax.set_title("Coin Sorter Map")
ax.set_xlabel("Diameter (mm)")
ax.set_ylabel("Weight (g)")
# Écrivez votre code ci-dessous
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Apprentissage supervisé
1Votre premier modèle
Apprendre à partir d’exemplesJeux d’entraînement et de testAjuster et prédireÉvaluer un modèleRécapitulatif : trieur de graines4Régression logistique
Prédictions oui ou nonLe seuil de décisionLes poids comme indicesPlusieurs classesRécapitulatif : filtre anti-spam2Plus proches voisins
Comment k-NN prend ses décisionsChoisir kFrontières de décisionMettre les voisins à l’échelleRécapitulatif : voisins et vin5Évaluer les classificateurs
La matrice de confusionPrécision et rappelLe score F1Classes déséquilibréesCourbes ROCRécapitulatif : test de dépistage8Validation croisée
Validation K-foldComparer les modèles équitablementRecherche par grilleRécapitulatif : réparations de skateboard11Projet : espèces de manchots
À la rencontre des manchotsPréparer les donnéesChoisir un modèleOptimiser le modèle gagnantDéployer le modèle3Régression linéaire
Prédire des nombresPlusieurs caractéristiquesMesurer les erreursGraphiques des résidusRécapitulatif : locations de vélos6Arbres de décision
Les arbres posent des questionsLire un arbreProfondeur de l’arbreImportance des caractéristiquesRécapitulatif : décisions de prêtEntraînez-vous par vous-même : Compilateur Python en ligne