Menu
CoddyTech

Récapitulatif : réparations de skateboard

Fait partie de la section Apprentissage supervisé du Journey Machine Learning de Coddy. Leçon 40 sur 58.

challenge icon

Défi

Moyen

Le bureau de location d’un skatepark veut un modèle qui repère les planches retournées nécessitant une réparation. Le programme lit la plus grande valeur de k à essayer.

  1. Réserve 25 % des lignes pour le test (random_state=0).
  2. Pour chaque k dans ks, effectue une validation croisée de k-NN sur les lignes d’entraînement (cv=5). Représente les moyennes sous forme de barres et affiche le meilleur k.
  3. Effectue une recherche par grille sur max_depth d’un arbre parmi les valeurs de depths (cv=5, random_state=0) et affiche la meilleure valeur.
  4. La moyenne la plus élevée l’emporte : affiche Winner: k-NN ou Winner: tree avec sa précision sur l’ensemble de test.

Pour un autre parc et 13 :

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

Coddy décrit ensuite ton graphique. Le sien ressemble à ceci :

Barres intitulées Réparations de skateboards : précision en fonction de k, une par valeur de k de 1 à 13, axe de 0.6 à 0.9. Elles oscillent autour de 0.72 pour les petites valeurs de k, puis montent jusqu’à 0.785 pour k = 13

Essayez vous-même

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

# La plus grande valeur de k à tester, par exemple 15
max_k = int(input())

# Une ligne par skateboard rendu : nombre de locations depuis son dernier entretien, scores d’usure de 0 à 10
# et fissures dans la planche ; 1 dans repair signifie qu’il est passé à l’atelier
boards = pd.read_csv("skateboards.csv")
features = ["rentals", "wheel_wear", "bearing_noise", "grip_wear", "truck_wobble", "deck_cracks"]
X = boards[features]
y = boards["repair"]
# Chaque caractéristique est un petit nombre ou un score, donc k-NN n’a pas besoin de normalisation ici
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)  # commence à 0.6 pour faire ressortir les petites différences

# Écrivez votre code ci-dessous

Toutes les leçons de Apprentissage supervisé

Entraînez-vous par vous-même : Compilateur Python en ligne