Tworzenie drzewa decyzyjnego

W tej sekcji użyjesz funkcji YDF (Yggdrasil) Decision Forest) trenowania i interpretowania modelu decyzyjnego.

Inspiracją dla tej części tej części była 🧭 YDF – pierwsze kroki aplikacji Google Web Designer.

Eliminacje

Zanim zaczniesz analizować zbiór danych, wykonaj te czynności:

  1. Utwórz nową usługę w Colab
  2. Zainstaluj bibliotekę YDF, umieszczając i wykonując następujący wiersz kodu w nowym notatniku Colab:
    !pip install ydf -U
    
  3. Zaimportuj te biblioteki:
    import ydf
    import numpy as np
    import pandas as pd
    

Zbiór danych dla pingwinów Palmer

Ta funkcja w Colab używa Zbiór danych Palmer Penguins, który zawiera pomiary rozmiarów 3 z nich gatunki pingwinów:

  • Pas do podbródka
  • gentoo
  • Adelie

Jest to problem klasyfikacyjny, którego celem jest przewidywanie gatunków na podstawie danych ze zbioru danych Penguins firmy Palmer. Oto pingwiny:

3 różne pingwiny
gatunek.

Rysunek 16. Trzy różne gatunki pingwinów. Autor obrazu @allisonhorst

 

Ten kod wywołuje pandy do wczytywania zbioru danych pingwinów Palmer do pamięci:

path = "https://storage.googleapis.com/download.tensorflow.org/data/palmer_penguins/penguins.csv"
dataset = pd.read_csv(path)
label = "species"

# Display the first 3 examples.
dataset.head(3)

W tabeli poniżej podano pierwsze 3 przykłady pingwinów palmowych zbiór danych:

Tabela 3. Pierwsze 3 przykłady u pingwinów Palmer .

gatunek wyspa bill_length_mm bill_depth_mm flipper_length_mm body_mass_g seks rok
0 Adelie Torgersen 39,1 18,7 181,0 3750,0 mężczyźni 2007
1 Adelie Torgersen 39,5 17,4 186,0 3800,0 kobiety 2007
2 Adelie Torgersen 40,3 18,0 195,0 3250,0 kobiety 2007

Pełny zbiór danych zawiera kombinację liczb (np. bill_depth_mm), według kategorii (np. island) i brakujących cech. W przeciwieństwie do struktury neuronowej sieci, lasy decyzyjne natywnie obsługują wszystkie te typy funkcji, nie musisz używać kodu „jeden-gorący”, „normalizacji” ani „dodatkowej funkcji is_present”.

Ta komórka kodu dzieli zbiór danych na zbiór treningowy i testowy ustaw:

# Use the ~20% of the examples as the testing set
# and the remaining ~80% of the examples as the training set.
np.random.seed(1)
is_test = np.random.rand(len(dataset)) < 0.2

train_dataset = dataset[~is_test]
test_dataset = dataset[is_test]

print("Training examples: ", len(train_dataset))
# >> Training examples: 272

print("Testing examples: ", len(test_dataset))
# >> Testing examples: 72

Trenowanie drzew decyzyjnych z użyciem hiperparametrów domyślnych

Pierwsze drzewo decyzyjne można wytrenować za pomocą systemu CART (klasyfikacji i algorytm uczenia się drzewa regresji (zwanego też uczniem) bez określania żadnego za pomocą hiperparametrów. Dzieje się tak, ponieważ uczniowie ydf.CartLearner zapewniają dobre wartości domyślne wartości hiperparametrów. Więcej informacji o tym, jak działa ten typ modelu w dalszej części szkolenia.

model = ydf.CartLearner(label=label).train(train_dataset)

Poprzednie wywołanie nie określało kolumn do użycia jako cech wejściowych. Dlatego używana jest każda kolumna w zbiorze treningowym. Rozmowa nie określił też semantyki (np. liczba, kategoria, tekst). cech wejściowych. W związku z tym semantyka cech jest określana automatycznie.

Wywołaj funkcję model.plot_tree(), aby wyświetlić drzewo decyzyjne wynikające z tego ustawienia:

model.plot_tree()

W Colab możesz za pomocą myszy wyświetlić szczegóły konkretnych elementów, takich jak zgodnie z rozkładem klas w każdym węźle.

Drzewo decyzyjne wytrenowane z użyciem domyślnego
za pomocą hiperparametrów.

Rysunek 17. Drzewo decyzyjne wytrenowane z użyciem domyślnych hiperparametrów. .

Colab pokazuje, że warunek główny zawiera 243 przykłady. Możesz jednak pamiętaj, że zbiór danych treningowych zawierał 272 przykłady. Pozostałe 29 Przykłady zostały automatycznie zarezerwowane na potrzeby walidacji i przycinania drzew.

Pierwszy warunek sprawdza wartość bill_depth_mm. Tabele 4 i 5 pokazują prawdopodobieństwo występowania różnych gatunków w zależności od wyniku pierwszego warunku.

Tabela 4. Prawdopodobieństwo występowania różnych gatunków, jeśli bill_depth_mm ≥ 42.3 .

Gatunek Prawdopodobieństwo
Adelie (czerwony) 8%
Gentoo (niebieski) O 58%
Pas do podbródka (zielony) 36%

 

Tabela 5. Prawdopodobieństwo występowania różnych gatunków, jeśli bill_depth_mm < 42.3 .

Gatunek Prawdopodobieństwo
Adelie (czerwony) O 97%
Gentoo (niebieski) 2%
Pas do podbródka (zielony) 0%

bill_depth_mm to funkcja liczbowa. W związku z tym znaleziono wartość 42, 3 przy użyciu dzielenia dokładnego do klasyfikacji binarnej przy użyciu funkcji liczbowych algorytmem konfiguracji.

Jeśli bill_depth_mm ≥ 42.3 ma wartość Prawda, sprawdź, czy flipper_length_mm ≥ 207.5 może niemal idealnie oddzielić Gentoos i z Gentoos+Adelie.

Ten kod zapewnia dokładność trenowania i testowania modelu:

train_evaluation = model.evaluate(train_dataset)
print("train accuracy:", train_evaluation.accuracy)
# >> train accuracy:  0.9338

test_evaluation = model.evaluate(test_dataset)
print("test accuracy:", test_evaluation.accuracy)
# >> test accuracy:  0.9167

Zdarza się, że dokładność testu jest większa niż dokładności. W takim przypadku zbiór testowy może się różnić od zbioru treningowego. Jednak w tym przypadku tak nie jest, ponieważ test został podzielony losowo. Bardziej prawdopodobne jest to, że testowy zbiór danych jest bardzo mały (tylko 72 przykłady), więc oszacowanie dokładności może być niedokładne.

W praktyce przy tak małym zbiorze danych za pomocą funkcji weryfikacja krzyżowa jest lepszym rozwiązaniem, ponieważ pozwoliłoby to uzyskać dokładniejsze wartości wskaźników oceny. Jednak w tym przykładzie prowadzimy szkolenie przeprowadzanie testów w celu .

Ulepszanie hiperparametrów modelu

Model jest drzewem decyzyjnym wytrenowanym z użyciem domyślnego hiperparametru . Aby uzyskać dokładniejsze prognozy, możesz:

  1. Możesz korzystać z bardziej zaawansowanych narzędzi edukacyjnych, takich jak losowy las lub drzewa z motywem gradientu model atrybucji. Algorytmy uczenia się zostaną objaśnione na następnej stronie.

  2. Należy zoptymalizować hiperparametr, korzystając ze swoich obserwacji i intuicji. przewodnik po ulepszaniu modelu może być pomocna.

  3. Używaj dostrajania hiperparametrów do automatycznego testowania dużej liczby możliwych hiperparametrów.

Nie udało nam się jeszcze zobaczyć drzew losowych i gradientowych drzew a ponieważ liczba przykładów jest zbyt mała, aby automatycznie przeprowadzić dostrajania hiperparametrów poprawisz model ręcznie.

Drzewo decyzyjne widoczne powyżej jest małe, a liść z przykładem 61 zawiera z wytwórni Adelie i Chinstrap. Dlaczego algorytm nie podzielił tego liścia dalej? Są dwie możliwe przyczyny takiej sytuacji:

  • Minimalna liczba próbek na liść (domyślnie min_examples=5) może mieć osiągnięto cel.
  • Drzewo mogło zostać podzielone, a następnie przycięte, aby uniknąć nadmiernego dopasowania.

Zmniejsz minimalną liczbę przykładów do 1, aby zobaczyć wyniki:

model = ydf.CartLearner(label=label, min_examples=1).train(train_dataset)
model.plot_tree()

Drzewo decyzyjne wytrenowane z użyciem
min_examples=1.

Rysunek 18. Drzewo decyzyjne wytrenowane z użyciem parametru min_examples=1. .

 

Węzeł liści zawierający 61 przykładów został dalej podzielony przez kilka razy.

Aby określić, czy dalsze dzielenie węzła jest wartościowe, oceniamy jakość ten nowy model w testowym zbiorze danych:

print(model.evaluate(test_dataset).accuracy)
# >> 0.97222

Jakość modelu wzrosła z dokładnością testu z 0,9167 do 0,97222. Zmiana hiperparametru była dobrym pomysłem.

Poprzednie decyzje dotyczące lasów decyzyjnych

Ulepszając hiperparametry, prawdopodobnie uda nam się uzyskać dokładności. Jednak zamiast ręcznego wykonywania tych czynności możemy trenować skuteczniejszą metodę np. losowy las i sprawdzić, czy działa lepiej.

model = ydf.RandomForestLearner(label=label).train(pandas_train_dataset)
print("Test accuracy: ", model.evaluate(pandas_test_dataset).accuracy)
# >> Test accuracy: 0.986111

Dokładność lasu losowego jest lepsza niż naszego prostego drzewa. Ty na kolejnych stronach dowiesz się, dlaczego.

Wykorzystanie i ograniczenia

Jak już wspomnieliśmy, jeden schemat decyzyjny często ma niższą jakość niż nowoczesny. za pomocą uczenia maszynowego, np. losowych lasów, drzew z ulepszoną gradientem sieci. Drzewa decyzyjne przydają się jednak w tych przypadkach:

  • To prosta, niedroga podstawa do oceny bardziej złożonych metod.
  • Gdy występuje kompromis między jakością modelu a interpretowalnością.
  • Jako pośrednik interpretacji modelu lasów decyzyjnych, który ale ten temat zostanie omówiony w dalszej części szkolenia.