Menu
CoddyTech

Rückblick: Skateboard-Reparaturen

Teil des Abschnitts Überwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 40 von 58.

challenge icon

Aufgabe

Mittel

Der Verleih eines Skateparks möchte ein Modell, das zurückgegebene Boards erkennt, die repariert werden müssen. Das Programm liest das größte auszuprobierende k ein.

  1. 25 % als Testzeilen abspalten (random_state=0).
  2. Für jedes k in ks k-NN anhand der Trainingszeilen kreuzvalidieren (cv=5). Die Mittelwerte als Balken darstellen und das beste k ausgeben.
  3. Für einen Baum eine Gittersuche über max_depth und depths durchführen (cv=5, random_state=0) und das beste Ergebnis ausgeben.
  4. Der höhere Mittelwert gewinnt: Winner: k-NN oder Winner: tree mit der jeweiligen Testgenauigkeit ausgeben.

Für einen anderen Park und 13:

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

Coddy beschreibt dann dein Diagramm. Das von Coddy sieht so aus:

Balken mit dem Titel Skateboard-Reparaturen: Genauigkeit nach k, je ein Balken für k von 1 bis 13, Achse von 0.6 bis 0.9. Sie schwanken bei kleinen k um 0.72 und steigen dann bei k = 13 auf 0.785

Probier es selbst

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

# Der größte auszuprobierende k-Wert, zum Beispiel 15
max_k = int(input())

# Eine Zeile pro zurückgegebenem Skateboard: Ausleihen seit der letzten Wartung, Verschleißwerte von 0 bis 10
# und Risse im Deck; 1 in repair bedeutet, dass es in die Werkstatt kam
boards = pd.read_csv("skateboards.csv")
features = ["rentals", "wheel_wear", "bearing_noise", "grip_wear", "truck_wobble", "deck_cracks"]
X = boards[features]
y = boards["repair"]
# Jedes Feature ist eine kleine Anzahl oder ein Bewertungswert, daher braucht k-NN hier keine Skalierung
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)  # beginnt bei 0.6, damit kleine Unterschiede sichtbar werden

# Schreibe deinen Code unten

Alle Lektionen in Überwachtes Lernen

Übe selbstständig: Online-Python-Compiler