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.
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.
Aufgabe
EinfachEin 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.
- Trainiere für jedes k ein Modell und speichere seine Trainings- und Testgenauigkeit.
- Gib das beste k anhand der Testgenauigkeit aus, wie unten gezeigt.
- Zeichne beide Listen gegen
ks, beschriftet mittrainundtest, und füge eine Legende hinzu.
Für einen anderen Verein:
Best k: 9 (test accuracy 0.783)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
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Überwachtes Lernen
1Dein erstes Modell
Aus Beispielen lernenTrainings- und TestdatensätzeAnpassen und VorhersagenEin Modell bewertenRückblick: Saatgutsortierer4Logistische Regression
Ja-Nein-VorhersagenDie EntscheidungsschwelleGewichte als IndizienMehrere KlassenRückblick: Spamfilter2Nächste Nachbarn
So entscheidet k-NNk wählenEntscheidungsgrenzenSkalierung für NachbarnRückblick: Wein-Nachbarn5Klassifikatoren bewerten
Die KonfusionsmatrixPräzision und TrefferquoteDer F1-ScoreUnausgewogene KlassenROC-KurvenRückblick: Screeningtest3Lineare Regression
Zahlen vorhersagenMehrere MerkmaleFehler messenResiduenplotsZusammenfassung: Fahrradverleih6Entscheidungsbäume
Bäume stellen FragenEinen Baum lesenBaumtiefeMerkmalswichtigkeitRückblick: Kreditentscheidungen9Ensembleverfahren
Random ForestsWarum Random Forests funktionierenGradient BoostingRückblick: Förster des Waldes12Abschließende Herausforderungen
Diabetes-FortschrittKreditgenehmigungHandgeschriebene ZiffernKundenabwanderungÜbe selbstständig: Online-Python-Compiler