Was lernst du in diesem Kapitel?

KNN ordnet neue Fälle über Ähnlichkeit ein

Du siehst, wie Distanz, Nachbarschaft und die Wahl von k zusammenhängen. Außerdem trainierst du den Unterschied zwischen Klassifikation und Regression mit derselben Methode.

AlltagWohnungssuche statt abstrakter Punktwolken
DidaktikErst Intuition, dann Demo, dann Python
TransferBrücke zu Tuning, Distanzmetriken und Scaling
Aktiver Abschnitt Schritt 1 startet hier
← Zurück zu Feature Engineering
0 Prozent abgeschlossen Rang: Nachbarschafts-Neuling
Schritt 1 · Die Idee

Was macht KNN überhaupt?

KNN entscheidet nicht über eine feste Formel, sondern fragt: Welche bekannten Fälle liegen dem neuen Fall am nächsten?

Noch offen. Ordne die Alltagsszene ein und prüfe danach die zwei Aussagen.

Alltagsszene

Stell dir vor, du suchst eine neue Wohnung. Eine freie Wohnung ist 68 m² groß, hat einen Balkon und liegt acht Minuten von der Bahn entfernt. Du fragst dich: Gehört sie eher in die Gruppe 'eher teuer' oder 'eher bezahlbar'?

KNN schaut nicht zuerst auf eine Gleichung, sondern auf ähnliche Wohnungen, die du schon kennst. Es nimmt also Nachbarschaft als Abkürzung für Entscheidung.

ML-Sprache

Die Merkmale sind zum Beispiel Größe, Balkon und Entfernung. Die Zielvariable ist hier die Klasse 'teuer' oder 'bezahlbar'. KNN vergleicht den neuen Punkt mit vorhandenen Trainingspunkten.

gibt an, wie viele dieser Nachbarn mitzählen.

Mini-Interaktion

Welche Beschreibung passt am besten zu KNN?

Wähle eine Aussage. Du bekommst sofort Feedback und kannst falsche Antworten direkt korrigieren.

🏋️ Übung: Ein KNN-Modell mit sklearn vorbereiten

Dieser Startercode basiert auf dem KNN-sklearn-Notebook. Ergänze die Modellzeile so, dass ein Klassifikator mit fünf Nachbarn erstellt wird.

📓 Öffne dein Jupyter Notebook oder Google Colab und probiere es selbst aus.

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

data = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(
    data.data, data.target, random_state=1
)
knn = # ??? DEINE LÖSUNG ???
💡 Tipp anzeigen

Im Notebook heißt die Klasse genau wie das Verfahren. Nur die Zahl der Nachbarn musst du hier setzen.

✅ Lösung anzeigen
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

data = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(
    data.data, data.target, random_state=1
)
knn = KNeighborsClassifier(n_neighbors=5)

Erwartete Ausgabe: `KNeighborsClassifier()`

Was nimmst du mit?

KNN lebt von Ähnlichkeit. Das Modell braucht keine globale Formel, sondern gute Vergleichsfälle.

Schritt 2 · Distanz

Wer ist dem neuen Fall am nächsten?

Die Wahl der Nachbarn hängt von der Distanz ab. Im ersten KNN-Schritt musst du deshalb sehen, welche Punkte wirklich nah sind.

Noch offen. Verschiebe den Zielpunkt und finde die drei nächsten Nachbarn.

Interaktive Nachbarschaft

Bordeaux = eher teuer Blau = eher bezahlbar Grün = neuer Fall

Steuerung

Nächster NachbarB-03
Mittlere Nähe8.2
HinweisNah an der Grenze
Beobachte, wie sich die drei hervorgehobenen Nachbarn ändern, wenn du den grünen Punkt verschiebst.

Formel in Alltagssprache

d = √((x₁ - x₂)² + (y₁ - y₂)²)

Die Distanz sagt: Wie weit liegen zwei Wohnungen im Merkmalsraum auseinander? Je kleiner der Abstand, desto stärker zählt ein Fall als Nachbar. Wichtig: Merkmalsraum heißt hier nicht echter Stadtplan, sondern der Zahlenraum deiner Eingabemerkmale.

🏋️ Übung: Manhattan-Distanz aus dem Notebook

Die KNN-Notebooks arbeiten zuerst mit einfachen Distanzbeispielen. Ergänze die fehlende Zeile, damit die Manhattan-Distanz zwischen zwei Punkten berechnet wird.

📓 Öffne dein Jupyter Notebook oder Google Colab und probiere es selbst aus.

point_1 = (2, 3, 5)
point_2 = (1, -1, 3)
manhattan_distance = 0

for i in range(3):
    manhattan_distance += # ??? DEINE LÖSUNG ???

print(manhattan_distance)
💡 Tipp anzeigen

Bei Manhattan zählst du pro Dimension die absolute Differenz und addierst alles auf.

✅ Lösung anzeigen
point_1 = (2, 3, 5)
point_2 = (1, -1, 3)
manhattan_distance = 0

for i in range(3):
    manhattan_distance += abs(point_1[i] - point_2[i])

print(manhattan_distance)

Erwartete Ausgabe: `7`

Schritt 3 · Entscheidung

Was macht k mit der Vorhersage?

Mit kleinem k zählt die unmittelbare Umgebung stark. Mit größerem k wird die Entscheidung ruhiger, aber oft auch grober.

Noch offen. Vergleiche k = 1, 3 und 7 und beantworte danach die Quizfrage.

Mehrheitsentscheid

Bei der Klassifikation entscheidet meist der . Das ist einfach gesagt die Klasse, die unter den k Nachbarn am häufigsten vorkommt.

Bei KNN-Regression wird statt einer Klasse ein Mittelwert aus den Zielwerten der Nachbarn gebildet. Derselbe Mechanismus, aber andere Ausgabe: einmal Kategorie, einmal Zahl.

k live ändern

k3
Prognoseeher teuer
Mehrheit2 zu 1
Starte mit k = 3. Danach beobachte, wie die Entscheidung bei k = 1 nervöser und bei k = 7 grober wird.

Quiz

Was ist der häufigste Grund, warum k = 1 besonders empfindlich ist?
Wähle eine Antwort. Du kannst direkt erneut prüfen.
Schritt 4 · Regression

KNN kann auch Zahlen vorhersagen

Dieselbe Nachbarschaftsidee funktioniert nicht nur für Klassen, sondern auch für stetige Zielwerte wie Preis, Stromverbrauch oder Eisverkauf.

Noch offen. Wechsle zwischen Klassifikation und Regression und erkläre den Unterschied.

Alltagsszene

In einer Eisdiele willst du nicht nur wissen, ob morgen 'viel' oder 'wenig' los ist. Oft willst du eine Zahl: etwa 320 verkaufte Kugeln. Dann ist KNN-Regresssion praktisch.

Modus wechseln

EntscheidungsregelModus
Ausgabeeher teuer
BedeutungKlasse
Klassifikation gibt eine Klasse aus. Regression gibt einen Mittelwert aus.

Reflexionsfrage

Wann passt KNN-Regression besser als KNN-Klassifikation?
Wähle eine Antwort und lies die Begründung.
Schritt 5 · Python

Der sklearn-Workflow aus dem Notebook

Jetzt verbindest du die Idee mit echtem Python-Code. Der Ablauf ist derselbe wie in den Notebooks: Daten laden, splitten, Modell fitten, vorhersagen, auswerten.

Noch offen. Lies das Codebeispiel und ergänze danach die Vorhersagezeile in der Übung.

Code-Beispiel

from sklearn.datasets import load_breast_cancer
from sklearn.metrics import accuracy_score, recall_score
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

data = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(
    data.data, data.target, random_state=1
)

knn = KNeighborsClassifier(n_neighbors=5, metric="euclidean")
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)

print("Accuracy:", round(accuracy_score(y_test, y_pred), 2))
print("Recall:", round(recall_score(y_test, y_pred), 2))

Was passiert hier?

Das Beispiel stammt aus dem sklearn-KNN-Notebook und ist auf den Kern gekürzt. Neu ist hier vor allem die Modellzeile: Dort werden die Anzahl der Nachbarn und die Distanzmetrik festgelegt.

Danach läuft KNN wie andere sklearn-Modelle: fit(), predict(), dann eine Metrik wie Accuracy oder Recall. Bei KNN bedeutet fit() aber vor allem: Trainingsdaten speichern und für Nachbarschaftssuchen vorbereiten, nicht eine explizite Formel lernen.

🏋️ Übung: Vorhersage aus dem Notebook ergänzen

Die Trainingsphase ist schon erledigt. Ergänze jetzt die Zeile, die Vorhersagen für den Testsatz berechnet.

📓 Öffne dein Jupyter Notebook oder Google Colab und probiere es selbst aus.

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

data = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(
    data.data, data.target, random_state=1
)
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
y_pred = # ??? DEINE LÖSUNG ???
💡 Tipp anzeigen

In sklearn fragt die Vorhersage immer das trainierte Modell nach neuen Daten.

✅ Lösung anzeigen
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

data = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(
    data.data, data.target, random_state=1
)
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)

Erwartete Ausgabe: ein Array mit Klassen 0 und 1

Kurz-Check

Wenn dir der sklearn-Ablauf klar ist, bestätige das hier. Damit wird das Modul abgeschlossen.

Bestätige den Ablauf, wenn fit, predict und Auswertung für dich zusammenpassen.
Schritt 6 · Grenzen & Übergang

Wann wird KNN schwierig?

KNN wirkt intuitiv, hat aber drei klassische Stolperstellen: falsches k, ungeeignete Distanzmetrik und unskalierte Merkmale.

Noch offen. Löse das Abschlussquiz vollständig, um das Kapitel sicher abzuschließen.

Drei typische Grenzen

  • Zu kleines k: Das Modell reagiert zu nervös auf einzelne Ausreißer.
  • Zu großes k: Das Modell mittelt zu stark und verliert lokale Struktur.
  • Unskalierte Merkmale: Eine große Skala dominiert dann die Distanz unfairly.

Zusatzregel für die Praxis: Bei zwei Klassen nimmt man oft ein ungerades k, damit Gleichstände seltener auftreten.

Brücke zum nächsten Kapitel

Als Nächstes geht es genau um diese Stellschrauben: Wie wählst du k systematisch? Wann hilft Distanzgewichtung? Und wie erkennst du Overfitting bei KNN?

Abschlussquiz

Was nimmst du mit?

KNN ist stark, wenn Ähnlichkeit eine gute Abkürzung ist. Damit es in der Praxis sauber funktioniert, musst du als Nächstes k, Distanz und Gewichtung bewusst abstimmen.