Menu
CoddyTech

k wählen

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

Welches k eignet sich für die Chilischoten? Probiere mehrere aus und bewerte jedes Modell zweimal: anhand der Zeilen, mit denen es trainiert wurde, der Trainingsgenauigkeit, und anhand der unbekannten Zeilen, der Testgenauigkeit.

Genauigkeit in Abhängigkeit von k für die Chilischoten, zwei Linien. Die Trainingsgenauigkeit beginnt bei k = 1 bei 1.0 und fällt. Die Testgenauigkeit beginnt bei 0.8, erreicht bei k = 13 mit 0.92 ihren Höchstwert, und beide Linien fallen bei k > 80 auf etwa 0.7

Bei k = 1 ist jede Chili ihr eigener nächster Nachbar, daher merkt sich das Modell die Daten: perfekte Ergebnisse bei den Trainingsdaten, schlechtere bei neuen Daten. Ein sehr großes k verwischt die Gruppen.

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))

Wähle vorerst das k, bei dem die Testgenauigkeit am höchsten ist: Kapitel 7 zeigt einen faireren Vergleich.

challenge icon

Aufgabe

Einfach

Ein Fußballverein protokolliert Schüsse in shots.csv: Entfernung, Winkel und goal oder miss. Welches k sagt am besten voraus? Das Starterprogramm teilt sie auf, listet die ks auf und beschriftet das Diagramm.

  1. Trainiere für jedes k ein Modell und speichere seine Trainings- und Testgenauigkeit.
  2. Gib das beste k anhand der Testgenauigkeit aus, wie unten gezeigt.
  3. Zeichne beide Listen gegen ks, beschriftet mit train und test, und füge eine Legende hinzu.

Für einen anderen Verein:

Best k: 9 (test accuracy 0.783)

Schüsse eines anderen Vereins: Genauigkeit für k von 1 bis 41. Die Trainingsgenauigkeit fällt von 0.99 bei k = 1 auf etwa 0.71. Die Testgenauigkeit steigt von 0.68 auf einen Höchstwert von 0.78 bei k = 9 und fällt dann auf 0.7

Coddy beschreibt dann dein Diagramm.

Probier es selbst

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

# Eine Zeile pro Schuss: Entfernung zum Tor (m), Winkel zur Toröffnung (Grad), Treffer oder Fehlschuss
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")

# Schreibe deinen Code unten
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Überwachtes Lernen

Übe selbstständig: Online-Python-Compiler