Menu
CoddyTech

Scegliere k

Fa parte della sezione Apprendimento supervisionato del percorso Machine Learning di Coddy. Lezione 7 di 58.

Quale k è adatto ai peperoncini? Prova diversi valori e valuta ciascun modello due volte: sulle righe che ha studiato, accuratezza di addestramento, e su quelle nascoste, accuratezza di test.

Accuratezza in base a k per i peperoncini, due linee. L'accuratezza di addestramento parte da 1.0 per k = 1 e diminuisce. L'accuratezza di test parte da 0.8, raggiunge il picco di 0.92 per k = 13, ed entrambe le linee scendono a circa 0.7 oltre k = 80

Con k = 1, ogni peperoncino è il suo vicino più prossimo, quindi il modello memorizza: è perfetto sui suoi dati, ma peggiora su quelli nuovi. Un k molto grande sfuma i gruppi.

ks = range(1, 120, 6)
train_acc = []
test_acc = []
for k in ks:
    model = KNeighborsClassifier(n_neighbors=k)
    model.fit(X_train, y_train)
    train_acc.append(model.score(X_train, y_train))
    test_acc.append(model.score(X_test, y_test))

Scegli il valore di k in corrispondenza del quale la precisione sul test raggiunge il picco, per ora: il capitolo 7 mostra un giudice più equo.

challenge icon

Sfida

Facile

Un club di calcio registra i tiri in shots.csv: distanza, angolo e goal o miss. Quale k fa le previsioni migliori? Il codice iniziale divide i dati, elenca i valori di ks ed etichetta il grafico.

  1. Per ogni k, addestra un modello e conserva la sua accuratezza sul set di addestramento e sul set di test.
  2. Stampa il valore di k migliore in base all’accuratezza sul set di test, come sotto.
  3. Disegna entrambi gli elenchi rispetto a ks, con le etichette train e test e una legenda.

Per un altro club:

Best k: 9 (test accuracy 0.783)

Tiri di un altro club: accuratezza in base a k da 1 a 41. L’accuratezza di addestramento scende da 0.99 con k = 1 a circa 0.71. L’accuratezza di test sale da 0.68 fino a un picco di 0.78 con k = 9, poi scende a 0.7

Coddy descriverà poi il tuo grafico.

Provalo tu

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

# Una riga per ogni tiro: distanza dalla porta (m), angolo rispetto allo specchio della porta (gradi), gol o tiro sbagliato
shots = pd.read_csv("shots.csv")
X = shots[["distance_m", "angle_deg"]]
y = shots["result"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
ks = range(1, 42, 4)  # k = 1, 5, 9, ..., 41

fig, ax = plt.subplots()
ax.set_title("Shots: Accuracy by k")
ax.set_xlabel("k (neighbors)")
ax.set_ylabel("Accuracy")

# 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