Menu
CoddyTech

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:

Die 80 Chilis über einem Raster aus kleinen Punkten. Jeder Punkt ist entsprechend der Antwort des Modells an dieser Stelle eingefärbt: links orange für scharf, rechts blau für mild, dazwischen verläuft eine treppenförmige Linie

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.

challenge icon

Aufgabe

Einfach

Ein 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.

  1. Erstelle ein 100-mal-100-Raster xx, yy: 18 bis 26 mm in horizontaler Richtung, 3 bis 9 g in vertikaler Richtung.
  2. Sage für jeden Punkt den Wert voraus und speichere ihn in zz, mit derselben Form wie das Raster.
  3. Fülle die Karte mit den Farben C0 bis C2, zeichne dann die Münzen und zeige sie an.

So etwa:

Eine Münzsortierkarte: drei sanfte Bereiche, blau für 10c unten links, orange für 5c in der Mitte, grün für 25c rechts, jeweils mit den Münzen darüber und einer Legende

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
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