Krzywe uczenia
Część sekcji Uczenie nadzorowane ścieżki Machine Learning w Coddy. Lekcja 33 z 58.
Czy większa ilość danych poprawiłaby Twój model? Pokazuje to krzywa uczenia: dokładność testowa w miarę zwiększania zbioru treningowego. Tutaj: głębokie drzewo na danych two-moons:
Drzewo zapamiętuje każdy zbiór treningowy, a jednak każdy dodatkowy wiersz uczy je czegoś prawdziwego. Elastyczne modele zyskują najwięcej dzięki danym.
Trenuj na pierwszych n wierszach treningowych, a następnie za każdym razem oceniaj na tych samych wierszach testowych:
sizes = [25, 50, 100, 200, 400, 800]
test_scores = []
for n in sizes:
tree = DecisionTreeClassifier(random_state=0)
tree.fit(X_train[:n], y_train[:n])
test_scores.append(tree.score(X_test, y_test))
ax.plot(sizes, test_scores, marker="o")Nadal wspinasz się przy prawej krawędzi? Więcej danych pomoże.
Wyzwanie
ŚredniCzy większa liczba nagrań pomoże odróżnić od siebie dwa gatunki sów? Kod startowy dzieli 600 odgłosów i przygotowuje oba modele oraz wykres.
- Dla każdego
nzsizesdopasuj oba modele do pierwszychnwierszy treningowych; zachowaj ich dokładności na zbiorze testowym. - Wypisz przyrost dla każdego modelu: ostatni wynik minus pierwszy, z dokładnością do 3 miejsc po przecinku.
- Narysuj oba modele względem
sizes, używającmarker="o", z etykietamilogisticitreeoraz legendą.
Sowy z innego lasu wypisują:
Logistic gains 0.053 from more data
Tree gains 0.160 from more datai rysują ten wykres. Następnie Coddy opisze Twój wykres.
Spróbuj swoich sił
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
# Nie zmieniaj poniższych wierszy: 600 głosów sów, wysokość dźwięku (Hz) i czas trwania (s)
rng = np.random.default_rng(23)
pitch = np.round(rng.uniform(300, 900, 600))
length = np.round(rng.uniform(0.2, 2.0, 600), 2)
# Gatunek 1, puszczyk zwyczajny, wydaje głosy dłuższe, niż wynikałoby z ich wysokości; kilka notatek terenowych jest błędnych
longer = length > 0.5 + 6.4 * ((pitch - 600) / 600) ** 2
wrong_note = rng.random(600) < 0.05
species = np.where(longer != wrong_note, 1, 0)
X = np.column_stack([pitch, length])
X_train, X_test, y_train, y_test = train_test_split(X, species, test_size=0.25, random_state=0)
sizes = [25, 50, 100, 200, 400]
logistic = LogisticRegression(max_iter=1000)
tree = DecisionTreeClassifier(random_state=0)
fig, ax = plt.subplots()
ax.set_title("Owl Calls: Learning Curves")
ax.set_xlabel("Training rows")
ax.set_ylabel("Test accuracy")
# Napisz 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 spamu7Przeuczenie
Niedouczenie i przeuczenieKrzywe uczeniaRegularyzacjaZbiory walidacyjnePodsumowanie: dostrajanie drzewa2Najbliż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