Menu
CoddyTech

Głębokość drzewa

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

Drzewo może pytać dalej, aż każdy wiersz treningowy będzie miał własną odpowiedź. Wtedy zapamiętało, a nie nauczyło się:

Dokładność na zbiorze treningowym i testowym dla drzew o głębokości od 1 do 12 na zaszumionych danych w kształcie półksiężyców. Dokładność na zbiorze treningowym rośnie do 1.0 przy głębokości 8, co oznaczono jako zapamiętywanie. Dokładność na zbiorze testowym osiąga maksimum 0.907 przy głębokości 6, zaznaczonej linią przerywaną, a następnie spada do około 0.87

Głębokie drzewa uczą się szumu z własnych wierszy treningowych, więc dokładność na zbiorze testowym osiąga szczyt, a potem spada. Wypróbuj kilka głębokości:

train = []
test = []
for d in range(1, 13):
    tree = DecisionTreeClassifier(max_depth=d, random_state=0)
    tree.fit(X_train, y_train)
    train.append(tree.score(X_train, y_train))
    test.append(tree.score(X_test, y_test))

Na tych księżycach głębokość 6 najlepiej sprawdza się na nowych wierszach: na razie ją zachowaj. Przy głębokości 8 drzewo doskonale radzi sobie z zapamiętanymi wierszami, a gorzej z pozostałymi.

challenge icon

Wyzwanie

Średni

Przegląd teleskopowy klasyfikuje obiekty na niebie jako gwiazdy i galaktyki. Kod startowy dzieli je na zbiory i przygotowuje wykres.

  1. Dla każdej głębokości w depths wytrenuj drzewo (random_state=0) i zachowaj dokładność dla obu zbiorów.
  2. Wypisz głębokość z najlepszą dokładnością testową, jak poniżej.
  3. Narysuj obie linie, oznaczone etykietami train i test, zaznacz najlepszą głębokość przerywaną linią ax.axvline, dodaj legendę i wyświetl wykres.

Dla sortera mango:

Best depth: 5, test accuracy 0.867

Następnie Coddy opisze twój wykres. Ich wykres wygląda tak:

Wykres zatytułowany Dojrzałe czy nie? z głębokością drzewa od 1 do 10: niebieska linia train rośnie do około 0.98, pomarańczowa linia test osiąga szczyt w pobliżu 0.87 przy głębokości 5, a tam znajduje się przerywana linia pionowa; widoczna jest legenda

Spróbuj swoich sił

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

# Jeden wiersz na każdy obiekt niebieski w przeglądzie teleskopowym: 1 w galaxy oznacza galaktykę, a 0 gwiazdę
sky = pd.read_csv("sky.csv")
features = ["brightness_mag", "size_arcsec", "roundness", "color_index"]
X_train, X_test, y_train, y_test = train_test_split(sky[features], sky["galaxy"], test_size=0.25, random_state=0)
depths = range(1, 11)

fig, ax = plt.subplots()
ax.set_title("Star or Galaxy?")
ax.set_xlabel("Tree depth")
ax.set_ylabel("Accuracy")

# 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