Confini decisionali
Fa parte della sezione Apprendimento supervisionato del percorso Machine Learning di Coddy. Lezione 8 di 58.
Un confine decisionale è il punto in cui cambia la risposta di un modello. Per vederlo, chiedi al modello la risposta in ogni punto del grafico, disposto come una griglia:
np.meshgrid abbina ogni x a ogni y. Appiattisci le coppie in righe, fai previsioni per tutte e ripiega i risultati nella forma della griglia:
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 riempie l'area di ciascun codice di classe: levels posiziona i bordi a metà tra i codici, colors corrisponde ai punti. Disegna i punti dopo, sopra.
Sfida
FacileUna macchinetta automatica smista le monete in base alla dimensione e al peso. Il codice iniziale adatta k-NN a coins.csv (codici di classe da 0 a 2); draw_coins(ax) le disegna.
- Crea una griglia di 100 per 100 punti
xx,yy: da 18 a 26 mm in orizzontale, da 3 a 9 g in verticale. - Predici ogni punto e salvalo in
zz, con la stessa forma della griglia. - Riempi la mappa con i colori da C0 a C2, poi disegna le monete e visualizza il grafico.
Come questa:
Monete di un altro paese, quindi aree diverse.
Coddy descrive la tua mappa.
Provalo tu
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
# Una riga per ogni moneta misurata dalla macchina: diametro (mm), peso (g), valore in centesimi
coins = pd.read_csv("coins.csv")
X = np.column_stack([coins["diameter_mm"], coins["weight_g"]])
# Codici delle classi: 0 per 10c, 1 per 20c, 2 per 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)
# Disegna le monete su ax, un colore per 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)")
# Scrivi il tuo codice qui sotto
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Apprendimento supervisionato
1Il tuo primo modello
Imparare dagli esempiInsiemi di addestramento e testAdattare e prevedereValutare un modelloRiepilogo: Ordinatore di semi4Regressione logistica
Previsioni sì o noLa soglia decisionaleI pesi come evidenzePiù classiRiepilogo: filtro antispam2Vicini più prossimi
Come decide k-NNScegliere kConfini decisionaliNormalizzare le scale per i viciniRiepilogo: vicini del vino5Misurare i classificatori
La matrice di confusionePrecisione e richiamoIl punteggio F1Classi sbilanciateCurve ROCRiepilogo: test di screening8Convalida incrociata
Validazione K-foldConfronto equo tra modelliRicerca a grigliaRiepilogo: riparazioni di skateboard11Progetto: specie di pinguini
Incontra i pinguiniPrepara i datiScegli un modelloOttimizza il miglioreDistribuisci il modello3Regressione lineare
Prevedere numeriPiù caratteristicheMisurare gli erroriGrafici dei residuiRiepilogo: noleggio di biciclette6Alberi decisionali
Gli alberi fanno domandeLeggere un alberoProfondità dell’alberoImportanza delle caratteristicheRiepilogo: decisioni sui prestitiEsercitati da solo: Compilatore Python online