Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Einen Punkt nach seinen Nachbarn einordnen (kNN)

Nach dieser Lektion: Ich kann einen Punkt nach seinen Nachbarn einordnen und messen, wie oft das stimmt.

Lektion, 55 Min.2 BefehleJupyterLab-Lab für Data Science: pandas, Matplotlib und scikit-learn im Browser

Eine zweite Aushilfe rufen oder nicht?

Jeden Morgen entscheidet der Verleih, ob er eine zweite Aushilfe ruft. Eine genaue Zahl braucht er nicht. Er braucht ein Wort: voll oder ruhig.

Eine gute Schätzung: Man sucht die Tage, die heute am ähnlichsten sind, und sieht nach, wie sie waren. Das ist die ganze Idee dieser Lektion.

Am Ende dieser Lektion

Notiz

Ich kann einen Punkt nach seinen Nachbarn einordnen und messen, wie oft das stimmt.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Klassifikationeiner Zeile ein Etikett zuordnen
Etikettdie Antwort, die ein Modell vorhersagtvoll
Merkmaleine Eingabe, nach der ein Modell entscheidettemp_c
Nächste Nachbarndie Trainingszeilen, die einem neuen Punkt am nächsten liegen
Genauigkeitder Anteil der richtigen Schätzungen
Konfusionsmatrixeine Tabelle aus wahren Etiketten und Schätzungen

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Die Nachbarn stimmen über das Etikett ab

Jeder Tag ist ein Punkt, gesetzt nach seinen Merkmalen, hier Temperatur und Regen. Der Abstand zweier Tage ist die gerade Strecke zwischen ihren Punkten.

Für einen neuen Tag suchen Sie die k Trainingstage, die ihm am nächsten liegen. Jeder stimmt mit seinem Etikett ab, die meisten Stimmen gewinnen. Bei zwei Etiketten verhindert ein ungerades k jeden Gleichstand.

Beispiel: 12 Grad und 4 mm

TrainingstagEtikettAbstandUnter dem nächsten 1?Unter den nächsten 3?
11 Grad, 6 mmruhig2,24JaJa
13 Grad, 1 mmvoll3,16NeinJa
16 Grad, 0 mmvoll5,66NeinJa
7 Grad, 0 mmruhig6,40NeinNein
9 Grad, 10 mmruhig6,71NeinNein

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Abstände und Abstimmung von Hand

Code: python
# Ein neuer Tag: 12 Grad und 4 mm Regen.
neu = [12.0, 4.0]
tage = [[11.0, 6.0, "ruhig"], [13.0, 1.0, "voll"], [16.0, 0.0, "voll"],
        [7.0, 0.0, "ruhig"], [9.0, 10.0, "ruhig"]]
for tag in tage:
    abstand = ((tag[0] - neu[0]) ** 2 + (tag[1] - neu[1]) ** 2) ** 0.5
    print(tag[2], round(abstand, 2))
# Die drei kleinsten Abstände stimmen ab. Welches Etikett gewinnt?
# Setzen Sie neu auf [8.0, 1.0] und stimmen Sie erneut ab.

Im Notebook eingeben: die ähnlichsten Tage

Code: python
import pandas as pd

ausleihen = pd.read_csv("hires.csv")
tag = ausleihen.loc[194, ["temp_c", "rain_mm"]]
# Der Abstand vom 14. Juli zu jedem Tag des Jahres.
abstand = ((ausleihen[["temp_c", "rain_mm"]] - tag) ** 2).sum(axis=1) ** 0.5
ausleihen.assign(abstand=abstand).sort_values("abstand").head(6)

Genauigkeit braucht etwas zum Schlagen

knn.py nennt einen Tag ab 300 Ausleihen busy, sonst quiet. Es lernt an drei Vierteln des Jahres und schätzt den Rest mit k = 5.

Die Genauigkeit ist der Anteil richtiger Schätzungen. Allein sagt sie wenig. Deshalb gibt das Skript auch das Ergebnis einer faulen Regel aus, die immer „ruhig“ sagt. Ein Modell nützt nur, wenn es diese Regel schlägt.

Die zurückgehaltenen Tage einordnen

Befehl
docker exec jupyter python3 steps/knn.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Eine Konfusionsmatrix zeigt, welche Fehler

Zwei Modelle mit gleicher Genauigkeit können verschiedene Fehler machen. Eine Konfusionsmatrix zählt jedes Paar aus Wahrheit und Schätzung.

In knn.py sind die Zeilen die Wahrheit und die Spalten die Schätzung, voll zuerst. Ein voller Tag, der als ruhig gilt, lässt eine Person allein vor einer Schlange. Ein ruhiger Tag, der als voll gilt, bezahlt jemanden fürs Warten. Für den Verleih ist das ein Unterschied.

Beispiel: die Matrix aus knn.py

Geschätzt vollGeschätzt ruhigSumme
Wirklich voll231033
Wirklich ruhig75259
Summe306292

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein häufiger Fehler

Warnung

Viele denken, eine hohe Genauigkeit heiße ein gutes Modell. Ist ein Etikett häufig, schneidet schon das ständige Raten dieses Etiketts gut ab: hier 0,641, ganz ohne Können. Vergleichen Sie immer mit diesem faulen Wert und lesen Sie in der Matrix die teuersten Fehler.

k wählen

Mit k = 1 kopiert das Modell den einen nächsten Tag, samt allem Zufall. Auf den Lerntagen sieht es fast perfekt aus, an neuen Tagen schlechter.

Ein großes k glättet den Zufall. Ist es zu groß, rutscht jede Schätzung zum häufigen Etikett. knnk.py probiert sechs Werte für k und bewertet jeden auf beiden Mengen.

Sechs Werte für k probieren

Befehl
docker exec jupyter python3 steps/knnk.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Weiterführend: Merkmale skalieren

Geben Sie dem kNN in Ihrem Notebook ein Merkmal wochenende aus 1 und 0. Bewerten Sie es mit derselben Teilung wie knn.py. Skalieren Sie dann alle Merkmale zuerst mit StandardScaler und bewerten Sie erneut.

Erklären Sie, warum das Skalieren für kNN wichtig sein kann. Hinweis: Das Wochenende verschiebt einen Punkt höchstens um 1, die Temperatur um bis zu 26.

Über dieses Lab und seinen Quellcode: JupyterLab-Lab für Data Science: pandas, Matplotlib und scikit-learn im Browser

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.