Rozhodovacie stromy: Jednoduchý úvod do strojového učenia
Rozhodovacie stromy sú jedným z najjednoduchších a najintuitívnejších algoritmov strojového učenia. Narozdiel od iných metód v tomto prípade nepoužívame zložité matematické výpočty a algoritmus je ľahko pochopiteľný aj pre začiatočníkov. V tomto článku si ukážeme, ako vytvoriť jednoduchý strom a využiť ho v praxi.
Čo je to rozhodovací strom
Predstavme si, že plánujeme program na víkend. Zisťujeme vlastnosti počasia a na ich základe vyberáme vhodnú aktivitu. Podľa týchto podmienok vieme rozhodnúť sa, čo budeme robiť – tento proces nazývame klasifikácia.

Toto je jednoduchý rozhodovací strom. Podľa jedného atribútu vieme rozhodnúť o výsledku. Avšak tento strom nie je veľmi užitočný v reálnych situáciách. Môžeme mať viac aktivít a viac podmienok. Komplexnejší strom by mohol vyzerať takto:

Ako si môžeme všimnúť, strom sa vie rozšíriť podľa potreby. V reálnom svete majú stromy stovky až tisíce vetiev a vedia pracovať s numerickými aj kategorickými atribútmi.
Základné pojmy
Node (uzol) – každá otázka v strome predstavuje uzol Root node (koreňový uzol) – prvý uzol na vrchole stromu Leaf nodes (listové uzly) – koncové body stromu, ktoré určujú výsledok Internal nodes (vnútorné uzly) – uzly medzi koreňom a listami, ktoré testujú atribúty
Algoritmus vždy pokračuje, až kým nedôjde k leaf node, ktorý poskytne finálne rozhodnutie.
Ako funguje výber najlepších otázok
Výber pozície jednotlivých uzlov sa realizuje pomocou information gain (informačný zisk). Ten sa vypočítava z entropie.
Entropia predstavuje stav neznáma alebo neistoty v dátach. Tento koncept pochádza z fyziky a informatiky.
Entrópiu si vieme predstaviť pomocou sáčku s cukríkmi:
- Ak vieme, že všetky cukríky sú červené, entropia je 0 (vieme so 100% istotou určiť farbu)
- Ak v sáčku sú cukríky červenej a modrej farby v pomere 1:1, entropia je 1 – nevieme presne určiť, aký cukrík vytiahneme
- Cieľom je mať entrópiu čo najnižšiu
Pomocou entropie sa vypočítava informačný zisk, ktorý určuje, ktorá otázka najlepšie rozdelí dáta.
Praktická ukážka v Pythone
V reálnom svete nepíšeme celú funkcionalitu od začiatku. V prostredí Python nájdeme vynikajúcu knižnicu Scikit-learn, ktorá nám umožňuje vytvoriť rozhodovací strom pomocou niekoľkých riadkov kódu.
Kompletný príklad
from sklearn.tree import DecisionTreeClassifier, export_graphviz
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import pandas as pd
# Načítanie dát
data = load_iris()
X, y = data.data, data.target
# Rozdelenie na trénovacie a testovacie dáta
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Vytvorenie a trénovanie modelu
clf = DecisionTreeClassifier(random_state=42, criterion="entropy", max_depth=3)
tree = clf.fit(X_train, y_train)
# Predikcia na testovacích dátach
y_pred = tree.predict(X_test)
# Vyhodnotenie presnosti
accuracy = accuracy_score(y_test, y_pred)
print(f"Presnosť modelu: {accuracy:.2f}")
# Export stromu do súboru
export_graphviz(tree, out_file='out.dot',
feature_names=data.feature_names,
class_names=data.target_names,
filled=True, rounded=True)
Vysvetlenie kódu
Import knižníc
from sklearn.tree import DecisionTreeClassifier, export_graphviz
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
Dáta a ich rozdelenie Scikit-learn má v sebe zabudované populárne datasety. Iris dataset obsahuje merania rôznych druhov kosatcov (kvetov).
data = load_iris()
X, y = data.data, data.target
Dáta rozdelíme na X (vlastnosti/atribúty) a y (výsledok/trieda). Na základe X sa vytvorí strom, ktorý predpovedá y.
Rozdelenie na trénovacie a testovacie dáta
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
Vytvorenie a trénovanie modelu
clf = DecisionTreeClassifier(random_state=42, criterion="entropy", max_depth=3)
tree = clf.fit(X_train, y_train)
Parametre:
criterion="entropy"– používa entrópiu na výpočet informačného ziskumax_depth=3– obmedzuje hĺbku stromu, aby sme predišli pretrénovaniurandom_state=42– zabezpečuje reprodukovateľnosť výsledkov, vo sfére umelej inteliencie je populárne používať číslo 42
Graf
Taktiež vieme vygenerovať graf. Uložíme ho ako súbor out.dot. Na vizualizáciu vieme využiť Graphviz.
export_graphviz(tree, out_file='out.dot',
feature_names=data.feature_names,
class_names=data.target_names,
filled=True, rounded=True)

Záver
Verím že sme si algoritmus rozhodovacích stromov trocha priblížili. Taktiež vieme využiť rozhodovacie stromy aj na regresiu (predpovedanie numerických hodnôt). Náhodne stromy sa využívaju v bankovníctve, ecommerce odvetví, zdravotníctve a finančom odvetví. Taktiež sa používa veľmi populárný algoritmus náhodne stromy založený na rozhodovacích stromoch, ktorý rieší niektoré jeho nedostatky.

Pridaj komentár
Prepáčte, ale pred zanechaním komentára sa musíte prihlásiť.