Pielęgnowanie drzew decyzyjnych

Podobnie jak wszystkie nadzorowane modele systemów uczących się, drzewa decyzyjne są trenowane tak, wyjaśnić zbiór przykładów treningowych. Optymalne trenowanie drzewa decyzyjnego to ze sporym problemem NP. Dlatego trenowanie odbywa się zwykle przy użyciu heurystyki – łatwy do utworzenia algorytm uczenia się, który nie jest optymalny, ale zapewnia jako optymalny schemat decyzyjny.

Większość algorytmów używanych do trenowania drzew decyzyjnych działa z niechęcią różnicą zwycięzcy. Algorytm zaczyna od utworzenia pojedynczego węzła (głównego), rekurencyjnie i zachłannie rozwija drzewo decyzyjne.

W każdym węźle oceniane są wszystkie możliwe warunki i są oceniane. algorytm wybiera „najlepszy”, czyli warunek o najwyższym Jak. Na razie pamiętaj, że wynik to wskaźnik skorelowany z i określone są warunki, które pozwalają zmaksymalizować ten wskaźnik.

Na przykład w Pingwiny (który zawiera przykłady kodu w dalszej części tego kursu), większość Adelie i Chinstrap pingwiny mierzą ponad 16 mm, pingwiny mają mniejsze dzioby. Dlatego warunek bill_length_mm ≥ 16 zapewnia niemal idealne prognozy Pingwiny gentoo, które nie są w stanie rozróżnić między Adelies a Chinstraps. Algorytm prawdopodobnie wybierze ten warunek.

Jeden schorzenie prowadzące do dwóch liści. Warunek to „bill_length_mm >= 16”.
Jeśli tak, to liść to „Adelie lub Chinstrap”.  Jeśli nie, liść
jest „Gentoo”.

Rysunek 7. Pierwszy krok do hodowli drzewa. .

 

Algorytm powtarza się następnie rekurencyjnie i niezależnie w obu węzłach podrzędnych. Jeśli nie zostaną znalezione spełnione warunki, węzeł zmieni się w liść. Liść prognoza jest w przykładach określana jako najbardziej reprezentatywna wartość etykiety.

Algorytm ten wygląda tak:

def train_decision_tree(training_examples):
  root = create_root() # Create a decision tree with a single empty root.
  grow_tree(root, training_examples) # Grow the root node.
  return root

def grow_tree(node, examples):
  condition = find_best_condition(examples) # Find the best condition.

  if condition is None:
    # No satisfying conditions were found, therefore the grow of the branch stops.
    set_leaf_prediction(node, examples)
    return

  # Create two childrens for the node.
  positive_child, negative_child = split_node(node, condition)

  # List the training examples used by each children.
  negative_examples = [example for example in examples if not condition(example)]
  positive_examples = [example for example in examples if condition(example)]

  # Continue the growth of the children.
  grow_tree(negative_child, negative_examples)
  grow_tree(positive_child, positive_examples)

Omówmy kroki trenowania określonego drzewa decyzyjnego czyli projektom.

Krok 1. Utwórz pierwiastek główny:

Węzeł ze znakiem zapytania.

Krok 2. Powiększ węzeł nr 1. Warunek „x1 ≥ 1” został znaleziony. Tworzone są 2 węzły podrzędne:

Węzeł główny
   co prowadzi do 2 niezdefiniowanych węzłów.

Krok 3. Powiększ węzeł nr 2. Nie znaleziono spełniających warunków. Niech węzeł w liść:

Pierwiastek
   i prowadzi do 2 niezdefiniowanych węzłów.

Krok 4. Powiększ węzeł nr 3. Warunek „x2 ≥ 0,5” został znaleziony. 2 dzieci gdy zostaną utworzone węzły.

Węzeł główny,
i trzy liście.

Istnieją też inne metody rozwijania drzew decyzyjnych. Popularną alternatywą jest globalną optymalizację węzłów, zamiast stosować strategię dzielenia i pozyskiwania.

Kod YDF
W YDF drzewa decyzyjne są uprawiane w ramach „chciwego podziału i pokonywania”. opisanym domyślnie powyżej. Możesz też włączyć globalny za pomocą parametru growing_strategy="BEST_FIRST_GLOBAL". Zobacz zapoznaj się z dokumentacją.

W zależności od liczby i typu cech wejściowych liczba możliwe warunki dla danego węzła mogą być ogromne i zwykle nieskończone. Na przykład w przypadku warunku progowego $\mathrm{feature}_i \geq t$ kombinacji wszystkich funkcji możliwe wartości progowych dla Funkcja $t \in \mathbb{R}$ jest nieskończona.

Rutyna odpowiedzialna za znalezienie najlepszego stanu to tzw. splitter. Ponieważ musi przetestować wiele możliwych warunków, to wąskie gardło w trenowaniu drzewa decyzyjnego.

Wynik zmaksymalizowany przez operatora podziału zależy od zadania. Przykład:

  • Zdobywanie informacji i Gini (zarówno omówione później) są powszechnie używane do klasyfikacji.
  • Do regresji często stosuje się błąd średniokwadratowy.

Istnieje wiele algorytmów podziału, a każdy z nich obsługuje:

  • typ cech, np. liczbowe, kategorialne, tekstowe
  • zadanie; na przykład klasyfikacja binarna, wieloklasowa klasyfikacja, regresja
  • typ warunku; np. próg, warunek w zestawie, warunek skośny
  • kryteria regularyzacji; na przykład dokładne lub przybliżone podziały dla warunków progu

Istnieją również równoważne warianty rozdzielacza o różnych kompromisach. dotyczące wykorzystania pamięci, wykorzystania procesora, dystrybucji obliczeń itd.

Kod YDF
W YDF podziały są wybierane domyślnie z wykrytego automatycznie (albo ręcznie określonych) typu cechy, hiperparametrów oraz szacowanej wartości prędkość każdego rozdzielacza (podczas trenowania YDF uruchamia mały model, aby przewidzieć szybkości każdego możliwego podziału).