Informatik

k-Nächste-Nachbarn-Algorithmus einfach erklärt

k-Nächste-Nachbarn-Algorithmus einfach erklärt
k-Nächste-Nachbarn-Algorithmus einfach erklärt
Für Quiz, Lückentext, Lernkarten und Fortschritt ist JavaScript nötig. Alle Inhalte und Lösungen bleiben direkt lesbar.

Der k-Nächste-Nachbarn-Algorithmus, kurz kNN, sagt für einen neuen Datenpunkt ein Ergebnis voraus, indem er die $k$ ähnlichsten bekannten Datenpunkte betrachtet. Bei einer Klassifikation gewinnt die am häufigsten vertretene Klasse; bei einer Regression wird meist der Mittelwert der Nachbarwerte verwendet.

Auf dieser Seite lernst du, eine kNN-Vorhersage selbst durchzuführen, den Einfluss von $k$ zu erklären und die Qualität des Verfahrens zu prüfen.

Deine Lernziele

Hake ab, was du schon kannst — und komm am Ende hierher zurück!

Wie erzeugt kNN eine Vorhersage?

Stell dir bekannte Früchte vor, zu denen Größe, Masse und Obstart gespeichert sind. Für eine neue Frucht sucht kNN nach bekannten Früchten mit ähnlichen Merkmalen. Deren Ergebnisse bilden die Grundlage der Vorhersage.

Definition

Trainingsdaten

Trainingsdaten sind bekannte Beispiele. Jedes Beispiel besitzt Merkmale, etwa Größe und Masse, sowie eine vorgegebene richtige Ausgabe. Bei einer Klassifikation heißt diese Ausgabe Klasse oder Label.

Weil die richtigen Ausgaben der Trainingsdaten bekannt sind, gehört kNN zum überwachten Lernen. Es ist kein Clustering-Verfahren: Beim Clustering werden Gruppen ohne vorgegebene Klassen gesucht.

kNN wird außerdem instanzbasiert und Lazy Learning genannt. Das Verfahren speichert die Trainingsdaten, erstellt aber keine umfangreiche Modellformel. Die eigentliche Rechenarbeit findet erst statt, wenn eine Vorhersage benötigt wird.

Der Ablauf in fünf Schritten

  1. Lege $k$ und ein geeignetes Distanzmaß fest.
  2. Berechne den Abstand des neuen Punkts zu jedem Trainingspunkt.
  3. Sortiere die Trainingspunkte nach ihrem Abstand.
  4. Wähle die ersten $k$ Punkte aus.
  5. Bestimme aus diesen Nachbarn die Vorhersage.

Bei einer Klassifikation gewinnt die Klasse mit den meisten Stimmen. Bei mehr als zwei Klassen ist das genauer eine Pluralität: Die größte Stimmenzahl reicht aus, auch wenn sie nicht mehr als die Hälfte aller Stimmen umfasst.

Bei einer Regression wird ein Zahlenwert vorhergesagt. Dafür verwendet man typischerweise den Mittelwert der Zielwerte der Nachbarn.

Beispiel

Unter den fünf nächsten Nachbarn eines neuen Punkts tragen drei das Label A, einer das Label B und einer das Label C. A besitzt mit drei Stimmen die Pluralität. Der neue Punkt wird deshalb als A klassifiziert.

Bei einer Regression haben drei Nachbarn die Zielwerte 240, 260 und 280. Dann lautet die Vorhersage:

$$\frac{240+260+280}{3}=260$$

Teste dich
Frage 1 von 2LeichtWelche Information muss für eine überwachte kNN-Klassifikation in den Trainingsdaten vorhanden sein?
Lösung: Zu jedem Trainingspunkt gehört ein bekanntes Label. — kNN benötigt beschriftete Beispiele, speichert sie und leitet die Vorhersage erst bei der Abfrage aus ihren Nachbarschaften ab.
Frage 2 von 2MittelUnter sieben Nachbarn gehören drei zu A, zwei zu B und zwei zu C. Welche Klasse erhält der neue Punkt?
Lösung: Klasse A — A besitzt mit drei Stimmen die Pluralität und wird deshalb ausgewählt.
Wie werden die nächsten Nachbarn gefunden?

„Ähnlich“ muss als Abstand zwischen den Merkmalen messbar gemacht werden. Für zwei numerische Merkmale verwendet man häufig die euklidische Distanz, also die direkte Verbindung zwischen zwei Punkten.

Für $P=(x_1,y_1)$ und $Q=(x_2,y_2)$ gilt:

$$d(P,Q)=\sqrt{(x_2-x_1)^2+(y_2-y_1)^2}$$

Die Manhattan-Distanz addiert dagegen die absoluten Koordinatendifferenzen:

$$d_M(P,Q)=|x_2-x_1|+|y_2-y_1|$$

Sie passt zu Situationen, in denen Wege nur entlang eines Rasters verlaufen. Die Hamming-Distanz zählt bei gleich langen Zeichenfolgen oder binären Vektoren die Positionen mit unterschiedlichen Einträgen. Welches Distanzmaß sinnvoll ist, hängt daher von der Art der Merkmale ab.

Vollständiges Klassifikationsbeispiel

Der neue Punkt ist $Q=(4,5)$. Vier Trainingspunkte sind bekannt:

PunktKoordinatenKlasseQuadrierter Abstand zu Q
P1$(1,1)$Rot$3^2+4^2=25$
P2$(4,4)$Blau$0^2+1^2=1$
P3$(6,5)$Blau$2^2+0^2=4$
P4$(2,6)$Rot$2^2+1^2=5$

Zum Sortieren reichen hier die quadrierten Abstände. Das Ziehen der Quadratwurzel würde ihre Reihenfolge nicht verändern. Die Reihenfolge lautet daher P2, P3, P4, P1.

Für $k=3$ sind P2, P3 und P4 die nächsten Nachbarn. Blau erhält zwei Stimmen, Rot eine Stimme. Die Vorhersage lautet Blau.

Merke

Zuerst bestimmst du die Nachbarschaft mit einem Distanzmaß. Erst danach wertest du die Klassen oder Zielwerte der ausgewählten Nachbarn aus.

Warum die Skalierung wichtig ist

Angenommen, ein Merkmal liegt ungefähr zwischen 0 und 10, ein anderes zwischen 0 und 100000. Ohne Anpassung kann das zweite Merkmal den Abstand fast vollständig bestimmen, nur weil seine Zahlen größer sind.

Durch Normalisierung oder Standardisierung werden Merkmale auf vergleichbare Größenordnungen gebracht. Das macht sie nicht automatisch gleich wichtig, verhindert aber eine unbeabsichtigte Gewichtung allein durch unterschiedliche Skalen.

Teste dich
Frage 1 von 2MittelDer Abstand zu einem Punkt beträgt 1, zu einem zweiten 4 und zu einem dritten 5. Welcher Punkt steht in der Nachbarschaftsrangfolge zuerst?
Lösung: Der Punkt mit Abstand 1 — Die Nachbarn werden nach aufsteigendem Abstand sortiert.
Frage 2 von 2SchwerZwei Merkmale messen Alter in Jahren und Einkommen in Euro. Warum kann eine Skalierung vor der euklidischen Distanz nötig sein?
Lösung: Die viel größeren Eurozahlen könnten den Abstand unbeabsichtigt dominieren. — Vergleichbare Skalen sorgen dafür, dass nicht allein die verwendeten Zahlenbereiche über die Nachbarschaft entscheiden.
Wie wählst du einen sinnvollen Wert für k?

$k$ legt fest, wie viele Nachbarn Einfluss erhalten. Es gibt keinen Wert, der für alle Datensätze optimal ist.

  • Bei $k=1$ übernimmt der neue Punkt das Ergebnis seines einzigen nächsten Nachbarn. Ein Ausreißer oder ein fehlerhaftes Label kann die Vorhersage stark beeinflussen.
  • Ein kleines $k$ reagiert empfindlich auf lokale Besonderheiten und Rauschen. Das kann zu Überanpassung führen: Das Verfahren passt sehr gut zu den Trainingsdaten, verallgemeinert aber schlecht.
  • Ein großes $k$ glättet lokale Muster. Ist $k$ zu groß, kann Unteranpassung entstehen, weil wichtige Unterschiede verschwinden.

Ein ungerades $k$ verringert bei zwei Klassen die Gefahr eines Gleichstands. Bei mehreren Klassen kann trotzdem ein Gleichstand um die größte Stimmenzahl auftreten. Eine vorher festgelegte Regel muss dann entscheiden, wie damit umgegangen wird.

Beispiel

Ein einzelner ungewöhnlicher Trainingspunkt liegt mitten in einem Gebiet der Klasse Blau, trägt aber das Label Rot. Bei $k=1$ kann er einen nahe gelegenen neuen Punkt als Rot einstufen. Bei $k=5$ können vier blaue Nachbarn seinen Einfluss überstimmen.

Das bedeutet nicht, dass $k=5$ immer besser ist. In einem kleinen, tatsächlich roten Teilgebiet könnte ein großes $k$ wiederum zu viele weiter entfernte blaue Punkte einbeziehen.

k mit Validierungsdaten auswählen

Teile die vorhandenen beschrifteten Daten in Trainings- und Validierungsdaten. Probiere mehrere Werte für $k$ aus und miss für jeden Wert, wie oft die Validierungspunkte richtig vorhergesagt werden. Ein Wert mit guter Validierungsleistung ist ein Kandidat für das endgültige Verfahren.

Bei kleinen Datensätzen ist Leave-One-Out möglich:

  1. Nimm einen Trainingspunkt vorübergehend heraus.
  2. Klassifiziere ihn mit allen übrigen Punkten.
  3. Wiederhole das für jeden Punkt und mehrere Werte von $k$.
  4. Vergleiche die Trefferquoten.
  5. Lege anschließend alle Punkte wieder in den Trainingsbestand zurück.
Lückentext

Wähle in jeder Lücke die passende Form und prüfe anschließend deine Antworten.

Ein sehr $k$ reagiert besonders stark auf einzelne Punkte. Ein zu $k$ kann lokale Muster übermäßig glätten. Einen geeigneten Wert vergleichst du mit . Ein ungerades $k$ kann bei zwei Klassen verringern.

Lösungen: Lücke 1: kleines; Lücke 2: großes; Lücke 3: Validierungsdaten; Lücke 4: Gleichstände. Die Wahl von $k$ ist ein Ausgleich: Kleine Werte sind empfindlich, große Werte glätten. Entscheidend ist die Leistung auf Daten, die nicht zur jeweiligen Nachbarschaftsvorhersage als bekannte Lösung verwendet werden.
Wie prüfst du die Qualität des Verfahrens?

Nach der Wahl von Distanzmaß, Skalierung und $k$ wird das fertige Verfahren an separaten Testdaten geprüft. Diese Daten dürfen nicht schon zur Auswahl von $k$ gedient haben. Sonst wäre die Bewertung zu optimistisch.

Eine Konfusionsmatrix stellt für jede Klasse gegenüber, welches Label erwartet und welches vorhergesagt wurde. So erkennst du nicht nur die Gesamtzahl der Fehler, sondern auch, welche Klassen häufig verwechselt werden.

Die Genauigkeit berechnet sich als

$$\text{Genauigkeit}=\frac{\text{korrekte Testvorhersagen}}{\text{alle Testvorhersagen}}$$

Beispiel

Von 20 Testpunkten werden 17 richtig klassifiziert:

$$\text{Genauigkeit}=\frac{17}{20}=0{,}85=85\,\%$$

Die Zahl beschreibt die Leistung auf diesen Testdaten. Sie erklärt noch nicht, welche Klassen verwechselt wurden. Dafür ist die Konfusionsmatrix hilfreicher.

Wo liegen die Grenzen von kNN?

  • Vorhersagezeit: Für eine Abfrage müssen Abstände zu vielen gespeicherten Punkten berechnet werden. Große Datensätze können das Verfahren langsam machen.
  • Speicherbedarf: Die Trainingsdaten müssen gespeichert bleiben.
  • Viele Merkmale: In hohen Dimensionen werden Abstände oft weniger aussagekräftig. Für zuverlässige Nachbarschaften werden dann meist mehr Daten benötigt.
  • Rauschen und Ausreißer: Besonders kleine Werte von $k$ reagieren empfindlich darauf.
  • Unpassende Merkmale: Ein mathematisch kleiner Abstand ist nur dann sinnvoll, wenn die Merkmale tatsächlich relevante Ähnlichkeit ausdrücken.
Teste dich
Frage 1 von 2MittelEin Team wählt $k$ anhand der Validierungsdaten. Wofür werden anschließend separate Testdaten verwendet?
Lösung: Für eine möglichst unabhängige Bewertung des fertig festgelegten Verfahrens — Validierungsdaten helfen bei Entscheidungen wie der Wahl von $k$. Testdaten bewerten erst danach die Generalisierung des festgelegten Verfahrens.
Frage 2 von 2SchwerEin kNN-Modell ist auf den Trainingsdaten fast fehlerfrei, schneidet auf unbekannten Testdaten aber deutlich schlechter ab. Was ist eine plausible Erklärung?
Lösung: Das Modell könnte überangepasst sein. — Eine große Lücke zwischen Trainings- und Testleistung ist ein Warnzeichen für Überanpassung, besonders bei einem sehr kleinen $k$.
Karteikasten
Karteikasten

Überlege zuerst selbst und drehe die Karte anschließend zum Prüfen um.

Alles auf einen Blick
Mindmap
  • k-Nächste-Nachbarn-Algorithmus
    • Grundlage: beschriftete Trainingsdaten
    • Nachbarschaft: Distanz berechnen und Punkte sortieren
    • Klassifikation: häufigste Klasse auswählen
    • Regression: Mittelwert der Zielwerte bilden
    • Einstellungen: Distanzmaß, Skalierung und k
    • Bewertung: Validierung, Testdaten und Genauigkeit
    • Grenzen: Rechenaufwand, viele Merkmale und Rauschen
Abschluss-Check
Teste dich
Frage 1 von 3LeichtWas bezeichnet $k$ beim k-Nächste-Nachbarn-Algorithmus?
Lösung: Die Anzahl der berücksichtigten Nachbarn — Nach der Abstandsberechnung werden genau die $k$ nächsten Trainingspunkte ausgewählt.
Frage 2 von 3MittelDie drei nächsten Nachbarn einer Regressionsabfrage haben die Zielwerte 12, 15 und 18. Welche Vorhersage ergibt die übliche Mittelwertregel?
Lösung: 15 — Der Mittelwert ist $(12+15+18)/3=45/3=15$.
Frage 3 von 3SchwerEin neues Merkmal mit sehr großem Zahlenbereich verschlechtert die Testleistung. Welche Untersuchung ist am sinnvollsten?
Lösung: Prüfen, ob das Merkmal relevant ist und ob die Merkmale passend skaliert wurden — kNN hängt direkt von den gemessenen Abständen ab. Deshalb solltest du sowohl die fachliche Bedeutung des Merkmals als auch seine Skala prüfen und Änderungen anschließend mit Validierungsdaten vergleichen.

Wenn du kNN beurteilst, frage immer in dieser Reihenfolge: Welche Merkmale beschreiben Ähnlichkeit? Wie wird Abstand gemessen? Welches $k$ bewährt sich bei der Validierung? Wie gut funktioniert die festgelegte Variante auf unbekannten Testdaten?

Passend dazu

Ausprobieren