Menu
CoddyTech

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:

Dokładność w zależności od liczby wierszy treningowych, od 25 do 800. Linia treningowa przez cały czas wynosi 1.0; linia testowa rośnie z 0.80 do 0.94

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.

challenge icon

Wyzwanie

Średni

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

  1. Dla każdego n z sizes dopasuj oba modele do pierwszych n wierszy treningowych; zachowaj ich dokładności na zbiorze testowym.
  2. Wypisz przyrost dla każdego modelu: ostatni wynik minus pierwszy, z dokładnością do 3 miejsc po przecinku.
  3. Narysuj oba modele względem sizes, używając marker="o", z etykietami logistic i tree oraz legendą.

Sowy z innego lasu wypisują:

Logistic gains 0.053 from more data
Tree gains 0.160 from more data

i rysują ten wykres. Następnie Coddy opisze Twój wykres.

Odgłosy sów: krzywe uczenia. Linia logistic wzrasta z 0.64 do około 0.69, a następnie pozostaje płaska; linia tree stale rośnie z 0.67 do 0.83

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