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:
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.
Wyzwanie
ŁatwyAutomat 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.
- Utwórz siatkę 100 na 100
xx,yy: od 18 do 26 mm wszerz i od 3 do 9 g wzwyż. - Przewidź klasę każdego punktu i zapisz wyniki w
zz, o kształcie takim jak siatka. - Wypełnij mapę kolorami od C0 do C2, następnie narysuj monety i wyświetl wynik.
Na przykład tak:
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
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Uczenie nadzorowane
1Twój pierwszy model
Uczenie się na przykładachZbiory treningowe i testoweDopasowywanie i przewidywanieOcena modeluPodsumowanie: Sortownik nasion4Regresja logistyczna
Przewidywanie „tak” lub „nie”Próg decyzyjnyWagi jako dowodyWiele klasPodsumowanie: filtr spamu2Najbliżsi sąsiedzi
Jak działa k-NNWybór kGranice decyzyjneSkalowanie dla sąsiadówPodsumowanie: sąsiedzi w zbiorze Wine5Ocena klasyfikatorów
Macierz pomyłekPrecyzja i czułośćWynik F1Niezrównoważone klasyKrzywe ROCPodsumowanie: test przesiewowy8Walidacja krzyżowa
Walidacja k-krotnaUczciwe porównywanie modeliPrzeszukiwanie siatkiPodsumowanie: naprawa deskorolki11Projekt: Gatunki pingwinów
Poznaj pingwinyPrzygotuj daneWybierz modelDopracuj zwycięski modelWdróż modelPoćwicz samodzielnie: Kompilator Python online