Menu
CoddyTech

Podsumowanie: naprawa deskorolki

Część sekcji Uczenie nadzorowane ścieżki Machine Learning w Coddy. Lekcja 40 z 58.

challenge icon

Wyzwanie

Średni

Punkt wypożyczeń w skateparku chce modelu, który wykrywa zwrócone deski wymagające naprawy. Program odczytuje największą wartość k do sprawdzenia.

  1. Odłóż 25% wierszy na testy (random_state=0).
  2. Dla każdej wartości k w ks przeprowadź walidację krzyżową k-NN na wierszach treningowych (cv=5). Przedstaw średnie za pomocą słupków i wypisz najlepszą wartość k.
  3. Przeprowadź wyszukiwanie siatką dla drzewa po max_depth w depths (cv=5, random_state=0) i wypisz najlepszy wynik.
  4. Wygrywa wyższa średnia: wypisz Winner: k-NN lub Winner: tree wraz z dokładnością na zbiorze testowym.

Dla innego parku i wartości 13:

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

Następnie Coddy opisze twój wykres. Ich wykres wygląda tak:

Słupki zatytułowane „Naprawy deskorolek: dokładność według k”, po jednym dla każdej wartości k od 1 do 13, oś od 0.6 do 0.9. Dla małych wartości k oscylują w pobliżu 0.72, a następnie rosną do 0.785 przy k = 13

Spróbuj swoich sił

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

# Największa wartość k do wypróbowania, na przykład 15
max_k = int(input())

# Jeden wiersz na każdą zwróconą deskorolkę: liczba wypożyczeń od ostatniego serwisu, oceny zużycia od 0 do 10
# oraz pęknięcia blatu; 1 w repair oznacza, że deskorolka trafiła do warsztatu
boards = pd.read_csv("skateboards.csv")
features = ["rentals", "wheel_wear", "bearing_noise", "grip_wear", "truck_wobble", "deck_cracks"]
X = boards[features]
y = boards["repair"]
# Każda cecha jest niewielką liczbą lub oceną, więc k-NN nie wymaga tu skalowania
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)  # zaczyna się od 0.6, aby było widać niewielkie różnice

# Napisz swój kod poniżej

Wszystkie lekcje w sekcji Uczenie nadzorowane

Poćwicz samodzielnie: Kompilator Python online