Entscheidungsgrenzen
Teil des Abschnitts Überwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 8 von 58.
Eine Entscheidungsgrenze ist der Bereich, in dem sich die Antwort eines Modells ändert. Um sie zu sehen, frage das Modell an jeder Stelle des Diagramms, das als Raster angeordnet ist:
np.meshgrid paart jedes x mit jedem y. Flache die Paare zu Zeilen ab, sage sie alle voraus und forme die Antworten wieder in die Form des Rasters um:
xx, yy = np.meshgrid(np.linspace(2, 16, 100), np.linspace(0.5, 6.5, 100))
grid = np.column_stack([xx.flatten(), yy.flatten()])
zz = model.predict(grid).reshape(xx.shape)
ax.contourf(xx, yy, zz, levels=[-0.5, 0.5, 1.5], colors=["C0", "C1"], alpha=0.3)contourf füllt den Bereich jedes Klassencodes: levels setzt die Grenzen auf halbem Weg zwischen den Codes, colors stimmt mit den Punkten überein. Zeichne die Punkte danach darüber.
Aufgabe
EinfachEin Verkaufsautomat sortiert Münzen nach Größe und Gewicht. Der Startcode passt k-NN an coins.csv an (Klassencodes 0 bis 2); draw_coins(ax) zeichnet sie.
- Erstelle ein 100-mal-100-Raster
xx,yy: 18 bis 26 mm in horizontaler Richtung, 3 bis 9 g in vertikaler Richtung. - Sage für jeden Punkt den Wert voraus und speichere ihn in
zz, mit derselben Form wie das Raster. - Fülle die Karte mit den Farben C0 bis C2, zeichne dann die Münzen und zeige sie an.
So etwa:
Münzen aus einem anderen Land, also andere Bereiche.
Coddy beschreibt deine Karte.
Probier es selbst
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
# Eine Zeile pro von der Maschine gemessener Münze: Durchmesser (mm), Gewicht (g), Wert in Cent
coins = pd.read_csv("coins.csv")
X = np.column_stack([coins["diameter_mm"], coins["weight_g"]])
# Klassencodes: 0 für 10c, 1 für 20c, 2 für 50c
y = coins["value_c"].map({10: 0, 20: 1, 50: 2})
names = ["10c", "20c", "50c"]
model = KNeighborsClassifier(n_neighbors=5)
model.fit(X, y)
# Zeichnet die Münzen auf ax, eine Farbe pro Klasse: C0, C1, C2
def draw_coins(ax):
for code in range(3):
ax.scatter(X[y == code, 0], X[y == code, 1], s=20, label=names[code])
ax.legend()
fig, ax = plt.subplots()
ax.set_title("Coin Sorter Map")
ax.set_xlabel("Diameter (mm)")
ax.set_ylabel("Weight (g)")
# Schreibe deinen Code unten
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Überwachtes Lernen
1Dein erstes Modell
Aus Beispielen lernenTrainings- und TestdatensätzeAnpassen und VorhersagenEin Modell bewertenRückblick: Saatgutsortierer4Logistische Regression
Ja-Nein-VorhersagenDie EntscheidungsschwelleGewichte als IndizienMehrere KlassenRückblick: Spamfilter2Nächste Nachbarn
So entscheidet k-NNk wählenEntscheidungsgrenzenSkalierung für NachbarnRückblick: Wein-Nachbarn5Klassifikatoren bewerten
Die KonfusionsmatrixPräzision und TrefferquoteDer F1-ScoreUnausgewogene KlassenROC-KurvenRückblick: Screeningtest3Lineare Regression
Zahlen vorhersagenMehrere MerkmaleFehler messenResiduenplotsZusammenfassung: Fahrradverleih6Entscheidungsbäume
Bäume stellen FragenEinen Baum lesenBaumtiefeMerkmalswichtigkeitRückblick: Kreditentscheidungen9Ensembleverfahren
Random ForestsWarum Random Forests funktionierenGradient BoostingRückblick: Förster des Waldes12Abschließende Herausforderungen
Diabetes-FortschrittKreditgenehmigungHandgeschriebene ZiffernKundenabwanderungÜbe selbstständig: Online-Python-Compiler