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
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Klassifikation | einer Zeile ein Etikett zuordnen | |
| Etikett | die Antwort, die ein Modell vorhersagt | voll |
| Merkmal | eine Eingabe, nach der ein Modell entscheidet | temp_c |
| Nächste Nachbarn | die Trainingszeilen, die einem neuen Punkt am nächsten liegen | |
| Genauigkeit | der Anteil der richtigen Schätzungen | |
| Konfusionsmatrix | eine 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
| Trainingstag | Etikett | Abstand | Unter dem nächsten 1? | Unter den nächsten 3? |
|---|---|---|---|---|
| 11 Grad, 6 mm | ruhig | 2,24 | Ja | Ja |
| 13 Grad, 1 mm | voll | 3,16 | Nein | Ja |
| 16 Grad, 0 mm | voll | 5,66 | Nein | Ja |
| 7 Grad, 0 mm | ruhig | 6,40 | Nein | Nein |
| 9 Grad, 10 mm | ruhig | 6,71 | Nein | Nein |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Abstände und Abstimmung von Hand
# 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
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
docker exec jupyter python3 steps/knn.pyHier 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 voll | Geschätzt ruhig | Summe | |
|---|---|---|---|
| Wirklich voll | 23 | 10 | 33 |
| Wirklich ruhig | 7 | 52 | 59 |
| Summe | 30 | 62 | 92 |
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
docker exec jupyter python3 steps/knnk.pyHier 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.