Menu
CoddyTech

Granice decyzyjne

Część sekcji Uczenie nadzorowane ścieżki Machine Learning w Coddy. Lekcja 8 z 58.

Granica decyzyjna to miejsce, w którym zmienia się odpowiedź modelu. Aby ją zobaczyć, zapytaj model o odpowiedź w każdym punkcie wykresu, rozmieszczonym w formie siatki:

80 papryczek chili na siatce małych kropek. Każda kropka jest pokolorowana zgodnie z odpowiedzią modelu w tym miejscu: pomarańczowe oznaczają ostre po lewej stronie, niebieskie łagodne po prawej, a między nimi biegnie schodkowa linia

np.meshgrid łączy każdą wartość x z każdą wartością y. Spłaszcz pary do wierszy, przewidź je wszystkie i przywróć wyniki do kształtu siatki:

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 wypełnia obszar kodu każdej klasy: levels umieszcza granice w połowie odległości między kodami, a colors dopasowuje kolory kropek. Narysuj kropki po nim, na wierzchu.

challenge icon

Wyzwanie

Łatwy

Automat sprzedający sortuje monety według rozmiaru i wagi. Kod początkowy dopasowuje k-NN do coins.csv (kody klas od 0 do 2); draw_coins(ax) rysuje monety.

  1. Utwórz siatkę 100 na 100 xx, yy: od 18 do 26 mm wszerz i od 3 do 9 g wzwyż.
  2. Przewidź klasę każdego punktu i zapisz wyniki w zz, o kształcie takim jak siatka.
  3. Wypełnij mapę kolorami od C0 do C2, następnie narysuj monety i wyświetl wynik.

Na przykład tak:

Mapa sortowania monet: trzy łagodne obszary, niebieski dla 10c w lewym dolnym rogu, pomarańczowy dla 5c pośrodku, zielony dla 25c po prawej, każdy z monetami na wierzchu i legendą

Monety z innego kraju, więc obszary są inne.

Coddy opisze twoją mapę.

Spróbuj swoich sił

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier

# Jeden wiersz na każdą monetę zmierzoną przez maszynę: średnica (mm), masa (g), wartość w centach
coins = pd.read_csv("coins.csv")
X = np.column_stack([coins["diameter_mm"], coins["weight_g"]])
# Kody klas: 0 dla 10c, 1 dla 20c, 2 dla 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)


# Rysuje monety na ax, jednym kolorem dla każdej klasy: 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)")

# Wpisz swój kod poniżej
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Uczenie nadzorowane

Poćwicz samodzielnie: Kompilator Python online