Menu
CoddyTech

Riepilogo: riparazioni di skateboard

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

challenge icon

Sfida

Medio

Il banco noleggi di uno skate park vuole un modello che individui le tavole restituite che necessitano di riparazioni. Il programma legge il valore massimo di k da provare.

  1. Separa il 25% dei dati come righe di test (random_state=0).
  2. Per ogni k in ks, esegui la convalida incrociata di k-NN sulle righe di training (cv=5). Disegna le medie come barre e stampa il valore migliore di k.
  3. Con una ricerca a griglia, cerca il valore migliore di max_depth per un albero tra i valori di depths (cv=5, random_state=0).
  4. Vince la media più alta: stampa Winner: k-NN oppure Winner: tree con la relativa accuratezza sul test.

Per un altro parco e con 13:

Best k: 13 (mean 0.785)
Best depth: 5 (mean 0.763)
Winner: k-NN, test accuracy 0.822

Coddy poi descrive il tuo grafico. Il loro è simile a questo:

Barre intitolate Riparazioni skateboard: accuratezza in base a k, una per ogni k da 1 a 13, asse da 0.6 a 0.9. Oscillano intorno a 0.72 per i valori piccoli di k, poi salgono a 0.785 con k = 13

Provalo tu

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split, cross_val_score, GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier

# Il valore massimo di k da provare, ad esempio 15
max_k = int(input())

# Una riga per ogni skateboard restituito: noleggi dall'ultima manutenzione, punteggi di usura da 0 a 10
# e crepe nella tavola; 1 in repair indica che è stato portato in officina
boards = pd.read_csv("skateboards.csv")
features = ["rentals", "wheel_wear", "bearing_noise", "grip_wear", "truck_wobble", "deck_cracks"]
X = boards[features]
y = boards["repair"]
# Ogni caratteristica è un conteggio o un punteggio basso, quindi qui k-NN non richiede uno scaler
ks = list(range(1, max_k + 1, 2))
depths = [2, 3, 4, 5, 6, 7, 8]

fig, ax = plt.subplots()
ax.set_title("Skateboard Repairs: Accuracy by k")
ax.set_xlabel("k (neighbors)")
ax.set_ylabel("Mean CV accuracy")
ax.set_xticks(ks)
ax.set_ylim(0.6, 0.9)  # parte da 0.6 per rendere visibili le piccole differenze

# Scrivi il tuo codice qui sotto

Tutte le lezioni di Apprendimento supervisionato

Esercitati da solo: Compilatore Python online