Drzewa decyzyjne

Drzewa decyzyjne to jedna z najbardziej intuicyjnych i wszechstronnych technik analizy danych, stosowanych zarówno w statystyce, jak i uczeniu maszynowym. Niezwykła w swojej prostocie metoda potrafi dostarczyć potężnych wyników. W tym wpisie zajmiemy się podstawami drzew decyzyjnych oraz przyjrzymy się, jak można je wykorzystać.

Wzory i przykładowe wyliczenia miar używanych podczas podziału zostały opisane w poście: https://thedatagame.tech/?p=738.

Teoria

Wyobraź sobie drzewo z korzeniem, rozgałęzieniami i liśćmi. Korzeń to zbiór danych – podstawa, na której budujemy algorytm, gałęzie reprezentują podejmowane decyzje – ścieżki, którymi podąża każdy rozpatrywany przykład, liście zaś to pogrupowane przykłady. Proces tworzenia drzewa decyzyjnego opiera się więc na podziale zestawu danych na segmenty (gałęzie), aż do osiągnięcia segmentów, które są na tyle jednorodne, że można je sklasyfikować (liście). Wybór cechy do podziału oraz punktu podziału jest zazwyczaj optymalizowany, aby zminimalizować pewien miernik złożoności, entropię lub indeks Giniego.

W procesie budowy i użycia drzewa decyzyjnego, wyróżnić można zatem następujące etapy:

1. Inicjalizacja: tworzy się korzeń drzewa, reprezentujący cały zbiór danych.
2. Wybór zmiennej decyzyjnej: dla każdej dostępnej zmiennej, dla każdej jej wartości, oblicza się jej związek z zmienną celu (np. Gini, entropia – dla problemu klasyfikacji) i wybiera się tą, która pozwala na dokonanie najlepszego podziału.
3. Podział zbioru danych: zbiór jest dzielony na mniejsze podzbiory na podstawie wartości wybranej zmiennej decyzyjnej.
4. Tworzenie węzłów: dla każdego z utworzonych podzbiorów danych tworzy się nowy węzeł, który jest powiązany z węzłem macierzystym (poprzednim) przez warunek podziału.

Rekurencja: powyższe kroki są powtarzane dla każdego nowo utworzonego węzła, aż do osiągnięcia warunku stopu (np. zadanej głębokości drzewa, brak redukcji niejednoznaczności itp.).

Klasyfikacja: gdy drzewo jest już gotowe, można sklasyfikować nowy przypadek, przemieszczając się po nim od korzenia do liści i stosując warunki podziału dla każdego węzła. Ostatecznie, przypadek zostanie przypisany do klasy reprezentowanej przez liść, do którego trafi.

Wady i zalety drzew decyzyjnych:

Zalety drzew decyzyjnych:

1. Interpretowalność: Drzewa decyzyjne są łatwe do zrozumienia i interpretacji, co czyni je przydatnym narzędziem w procesie podejmowania decyzji. Możesz w prosty sposób zrozumieć, dlaczego konkretna decyzja została podjęta, przeglądając strukturę drzewa.
2. Dobrze radzą sobie z danymi kategorycznymi i numerycznymi: Drzewa decyzyjne mogą obsługiwać zarówno dane kategoryczne, jak i numeryczne, co czyni je wszechstronnym narzędziem.
3. Skalowalność: Są stosunkowo szybkie w uczeniu się na małych i średnich zbiorach danych. Dodatkowo, drzewa mogą być rozbudowywane, co pozwala na tworzenie bardziej złożonych modeli.
4. Odporność na brakujące dane: Drzewa potrafią obsłużyć przypadki brakujących danych, co nie zawsze jest możliwe w innych algorytmach uczenia maszynowego.

Wady drzew decyzyjnych:

1. Overfitting: Drzewa decyzyjne mogą łatwo dopasować się do szumu w danych treningowych, co prowadzi do zjawiska overfittingu. Dla dużych, zbyt rozbudowanych drzew, model może być zbyt dopasowany do danych treningowych i słabo generalizować na nowe dane.
2. Brak stabilności: Małe zmiany w danych treningowych mogą prowadzić do znaczących zmian w strukturze drzewa, co czyni je niestabilnymi.
3. Bias: Drzewa decyzyjne mogą być podatne na przesunięcie (bias) w kierunku większościowej klasy, szczególnie w przypadku niezbalansowanych zbiorów danych.
4. Niedokładność: Drzewa mogą osiągać niższą dokładność niż niektóre bardziej zaawansowane algorytmy, szczególnie w zadaniach o dużej złożoności.
5. Trudność w modelowaniu pewnych problemów: Niektóre problemy, takie jak problem XOR, są trudne do rozwiązania za pomocą pojedynczego drzewa decyzyjnego, ponieważ wymagają skomplikowanych struktur decyzyjnych.

Przykład

Spróbujmy stworzyć proste drzewo decyzyjne w pythonie. W tym celu skorzystamy z popularnego zbioru Breast Cancer. Zbiór ten zawiera zestaw cech opisujących komórki nowotworowe wyodrębnione z badań mammograficznych. Te cechy obejmują m.in. średnicę komórek, symetrię jądra, teksturę i wiele innych. Każda próbka jest przypisana do jednej z dwóch klas: nowotwór złośliwy (malignant) lub nowotwór łagodny (benign). Jest to stosunkowo niewielki zbiór danych, co czyni go odpowiednim do eksperymentów i nauki algorytmów klasyfikacji.

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

from sklearn.datasets import load_breast_cancer
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix

# Wczytanie zestawu danych Breast Cancer:
data = load_breast_cancer()
X = pd.DataFrame(data.data, columns=data.feature_names) 
y = data.target 

# Podział danych na zestawy treningowy testowy:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

X_train.head()

Fragment wczytanego df’a:

Wytrenujmy i wyświetlmy drzewo:

# Stworzenie i wytrenowanie modelu:
clf = DecisionTreeClassifier(max_depth=3)
clf.fit(X_train, y_train)

# Wyświetlenie drzewa za pomocą plot_tree:
plt.figure(figsize=(16, 10))  # Zwiększ rozmiar wykresu
plot_tree(clf, 
          feature_names=list(X.columns), 
          class_names=list(data.target_names), 
          filled=True, 
          rounded=True, 
          fontsize=10,  # Zmniejsz rozmiar czcionki
          impurity=True)  # Wyświetl miarę nieczystości dla każdego węzła

plt.show()

A następnie oceńmy dokładność predykcji:

y_pred = clf.predict(X_test)

conf_matrix = confusion_matrix(y_test, y_pred)

plt.figure(figsize=(6, 4))
sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues', 
            xticklabels=data.target_names, 
            yticklabels=data.target_names)
plt.xlabel('Predicted')
plt.ylabel('True')
plt.title('Confusion Matrix')
plt.show()

Na koniec warto wspomnieć jeszcze o najważniejszych parametrach, które możemy ustawić podczas budowy modelu:

criterion: określa metrykę używaną do oceny jakości podziału w węźle. Dwa popularne kryteria to “gini” (indeks Gini) i “entropy” (entropia).
max_depth: maksymalna głębokość drzewa. Ograniczenie głębokości może pomóc w zapobieganiu overfittingowi.
min_samples_split: minimalna liczba próbek wymagana do podziału węzła. Ograniczenie tego parametru może pomóc w kontrolowaniu złożoności drzewa.
min_samples_leaf: minimalna liczba próbek w liściu. Ograniczenie tego parametru może pomóc w zapobieganiu overfittingowi.
max_features: określa liczbę cech branych pod uwagę podczas poszukiwania najlepszego podziału.

Zobacz także:

  • Piotr Szymański

    Kategoria:

    Hejka naklejka! Google przeprowadza restrukturyzację swojego zespołu finansowego, kładąc większy nacisk na inwestycje w sztuczną inteligencję. Zmiany, o których poinformowała główna dyrektor finansowa Google, Ruth Porat, obejmują zwolnienia oraz przeniesienia pracowników i są odpowiedzią na spowolnienie wzrostu przychodów z reklam, jednocześnie stawiając na rosnącą rolę AI. CFO zaznaczyła, że restrukturyzacja jest częścią szerszej strategii przystosowania […]
  • Piotr Szymański

    Kategoria:

    Cześć! Zapraszam do podsumowania minionych 2 tygodni, wiadomości, które zaciekawiły mnie podczas surfowania po sieci telekomunikacyjnej Internet. Sekretarz Sił Powietrznych USA Frank Kendall ogłosił plany lotu myśliwcem F-16 sterowanym przez sztuczną inteligencję. Próba ma odbyć się wiosną tego roku i ma na celu zaprezentowanie potencjału sztucznej inteligencji w walce powietrznej, podkreślając przejście wojska w kierunku […]
  • Piotr Szymański

    Kategoria:

    Hejka naklejka! Świat jest podzielony. Jak zawsze, można by rzec. Wiecznie żywa reguła „dziel i rządź”, można by rzec. Świat podzielony na zwolenników sernika z rodzynkami, jak i bez rodzynków; wielbicieli sałatki jarzynowej jak i ludzi pozbawionych gustu; ludzi jeżdżących BMW, jak i masochistów, i tak dalej, i tym podobne. Przychodzę tu jednak ponad pewnymi […]
  • Piotr Szymański

    Kategoria:

    Siemson sportowe świry! Dumni po zwycięstwie, wierni po porażce. Tym razem jednak bez wstydu, hańby i kompromitacji. Nie podejrzewam naszego sztabu szkoleniowego o klasyczną inspirację rozwiązaniem stosowanym w Liverpoolu, natomiast nie miał bym nic przeciwko. We współpracy z Google DeepMind powstał bowiem TacticAI, model predykcyjny wspomagający wysiłki trenerów. Już w 2021 potrafił zgadnąć gdzie piłkarz […]
  • Piotr Szymański

    Kategoria:

    Hæ vinir! Dinozaury. Kto z nas nie byłby na pewnym etapie życia zafascynowany tymi uroczymi gadami. Nawet nie wiecie, ile Nas z nimi łączy! Nie tylko tak samo jesteśmy owodniowcami, ale i wyginiemy. Może nawet całkiem niedługo. Mrocznie się zrobiło, nie? Ale może zakończymy jakimś przyjemnym akcentem, więc bądźcie nastrojeni. Raport, stworzony przez Gladstone AI […]