Menu
CoddyTech

So entscheidet k-NN

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

In diesem Kapitel nehmen wir k-NN auseinander. Am Ende kannst du seine Karte für beliebige Daten zeichnen, wie diese für milde und scharfe Chilischoten:

80 Chilischoten nach Länge und Wanddicke auf einer schattierten Karte: links ein orangefarbener Bereich, in dem das Modell sie als scharf einstuft, und rechts ein blauer Bereich, in dem es sie als mild einstuft

Um eine neue Chili zu klassifizieren, sucht k-nächste Nachbarn die k Trainings-Chilis, die ihr am nächsten sind, und diese stimmen ab:

Nahaufnahme der Chilis mit einem schwarzen Stern für eine neue Chili. Graue Linien verbinden sie mit ihren 5 nächsten Chilis: 3 scharfe und 2 milde, also gewinnt scharf

„Closest“ bedeutet den kleinsten Abstand, dem du in Abschnitt 2 begegnet bist. Du wählst k:

model = KNeighborsClassifier(n_neighbors=5)

n_neighbors ist k, standardmäßig 5, sofern du nichts anderes angibst. Bei zwei Klassen kann es bei einem ungeraden k niemals zu einem Gleichstand kommen.

challenge icon

Aufgabe

Einfach

Ein Astronomieclub ordnet die Sterne in stars.csv anhand von Temperatur und Magnitude Zwergen und Riesen zu. Das Starterprogramm liest einen neuen Stern und k ein.

  1. Finde von Hand die k nächsten Sterne: Füge eine Spalte distance hinzu und sortiere dann.
  2. Gib an, wie viele davon Riesen sind, und danach den Gewinner der Abstimmung.
  3. Überprüfe das Ergebnis mit einem k-NN-Modell mit diesem k, das mit allen Sternen trainiert wurde.

Für den Stern und k = 5 eines anderen Clubs:

Giants among the nearest 5: 4
By hand: giant
Model: giant

Probier es selbst

import numpy as np
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier

# Eine Zeile pro Stern: Temperatur in Tausend Kelvin, Magnitude (kleiner bedeutet heller), Zwerg oder Riese
stars = pd.read_csv("stars.csv")
X = stars[["temp_kK", "magnitude"]]
y = stars["type"]

# Der neue Stern und k
temp = float(input())
mag = float(input())
k = int(input())
new_star = pd.DataFrame({"temp_kK": [temp], "magnitude": [mag]})

# 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