Menu
CoddyTech

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:

Gli 80 peperoncini su una griglia di piccoli punti. Ogni punto è colorato in base alla risposta del modello in quel punto: arancione per i piccanti a sinistra, blu per i delicati a destra, congiunti lungo una linea a gradini

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.

challenge icon

Sfida

Facile

Una 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.

  1. Crea una griglia di 100 per 100 punti xx, yy: da 18 a 26 mm in orizzontale, da 3 a 9 g in verticale.
  2. Predici ogni punto e salvalo in zz, con la stessa forma della griglia.
  3. Riempi la mappa con i colori da C0 a C2, poi disegna le monete e visualizza il grafico.

Come questa:

Una mappa dello smistamento delle monete: tre aree dai colori tenui, blu per 10c in basso a sinistra, arancione per 5c al centro, verde per 25c a destra, ciascuna con le proprie monete sovrapposte e una legenda

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
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Apprendimento supervisionato

Esercitati da solo: Compilatore Python online