![]() |
Decision Trees |
Manche Daten sind nicht linear aber trotzdem simpel.
Bsp: Skifahrregionen und Zeiten
Einfache Klassifikation mit Entscheidungsbaum
Wie konstruieren wir den Entscheidungsbaum?
Wenn wir in Region $R_p$ sind suchen wir einen Split $S_p$:
\[ S_p(j, t) = (R_1, R_2) = \\( \{ x | x_j \leq t, x \in R_p \},\\ \{ x | x_j > t, x \in R_p \}) \]
Welche Klasse sagen wir für eine Region vorher?
Immer die, welche die Mehrheit an Beispielen dort hat.
Wie entscheiden wir was ein guter Split ist?
Idee: Loss Funktion $L(R)$ je Region.
Ein guter Split maximiert
$L(R_p) - \frac{|R_1|}{|R_p|} L(R_1) - \frac{|R_2|}{|R_p|} L(R_2)$
Was ist ein guter Loss?
Idee: Cross Entropy Loss
$$ L_\text{cross} (R)= - \sum_c \hat p_c \log \hat p_c $$
$0 \leq \hat p_c \leq 1$ ist der Anteil an Beispielen in Klasse $c$.
Ähnlich wie bei logistischer Regression
$-\hat p_c \log \hat p_c$
$-\hat p_c \log \hat p_c - (1-\hat p_c) \log (1-\hat p_c)$
Gini Loss: $L_\text{gini} = \sum_c \hat p_c (1- \hat p_c)$
Regression Trees
In jedem Blatt des Entscheidungsbaums sagen wir den Durchschnitt der Elemente in der Region vorher: \[ \hat y_R = \frac{\sum_{i \in R} y_i}{|R|} \]
Loss Funktion für Regression Trees: \[ L_\text{squared}(R) = \frac{\sum_{i \in R} (y_i - \hat y_R)^2}{|R|} \]
Training des Entscheidungsbaums:
Training von Entscheidungsbäumen kann effizient implementiert werden.
Mit $m$ Beispielen, $n$ Features und Baumtiefe $d$:
In der Praxis meistens sehr effizient.
Für kategorische Features lassen sich spezielle Splits implementieren
Beispiel: $x_i$ kann ein Element aus $\{\text{rot}, \text{grün}, \text{gelb}, \text{blau}, \text{türkis}\}$ sein.
Entscheidungsknoten $x_i \in \{\text{grün}, \text{türkis}\}$
Mit $q$ Kategorien gibt es $2^q$ mögliche Teilmengen - wir können also nur alle ausprobieren, wenn es wenige gibt.
Decision Trees
Vorteile
Nachteile
Manche Daten sind schlecht für Decision Trees geeignet
Decision Trees haben hohe Varianz
Regularisierung
In sklearn:
sklearn.tree.DecisionTreeClassifier
Auch mit Regularisierung sind einzelne Decision Trees meistens recht schlechte Classifier.
![]() |
Ensemble Models |
Angenommen wir haben $n$ unabhängige, identisch verteilte Zufallsvariablen $X_i$, $\text{Var}(X_i) = \sigma^2$.
$\text{Var}(\bar X) = \text{Var}(\frac{1}{n}\sum X_i) = \frac{\sigma^2}{n}$
Viele unabhängige Informationsquellen verringern die Unsicherheit meiner Schätzung.
$\Rightarrow$ | ||
$n=1$ | $n=100$ |
Intelligenz der Masse
Francis Galton ließ 800 Leute das Gewicht eines Ochsen schätzen.
Was, wenn die $X_i$ nicht unabhängig sind?
Korrelation $0 \leq \rho \leq 1$.
$\text{Var}(\bar X) = \rho \sigma^2 + \frac{1 - \rho}{n} \sigma^2$
$\rho = 0 \Rightarrow$ $\text{Var}(\bar X) = \frac{1}{n} \sigma^2$ |
$\rho = 1 \Rightarrow$ $\text{Var}(\bar X) = \sigma^2$ |
Für eine gute Vorhersage wollen wir:
Wie kommen wir zu möglichst unabhängigen Ensembles?
Idee: Verschiedene Klassifikationsalgorithmen verwenden.
Nachteil: Schwierig 100 verschiedene Algorithmen zu finden.
Bagging (Bootstrap Aggregation)
Idee: Wähle zufällige Teilmenge der Trainingsdaten
Ziehe Menge $Z$ aus $\mathcal{D}_\text{train}$ (mit zurücklegen).
(Bootstrap Sample)
Ziehe, z.B. bis $|Z| \geq \frac{2}{3} |\mathcal{D}_\text{train}|$
Wir ziehen insgesamt $M$ verschiedene Samples $Z_1, \ldots, Z_M$.
Auf jedem Sample $Z_i$ trainieren wir einen Classifier $h_i$.
Vorhersage ist das Ensemble Modell $$h(x) = \frac{1}{M} \sum_{i=1}^M h_i(x)$$
Durch die Bootstrap Samples wird das $\rho$ kleiner
(ohne bekämen wir immer das gleiche Modell)
$\rho \sigma^2 + \underbrace{\frac{1-\rho}{M} \sigma^2}_{\to 0}$
Durch ein großes $M$ bekommen wir weniger Varianz, aber etwas mehr Bias, da jedes Modell weniger Trainingsdaten hat.
Meistens ein guter Tradeoff
Decision Trees + Bagging
Decision Trees sind "low bias" und "high variance". Daher profitieren sie besonders von diesem Tradeoff.
Wie können wir $\rho$ weiter verringern?
Idee: Für jeden Split betrachten wir nur eine zufällige Teilmenge der Features als mögliche Kriterien.
Dadurch haben wir noch etwas mehr Zufall in jedem einzelnen Decision Tree und weniger Korrelation zwischen verschiedenen.
Decision Trees + Bagging + Zufällige Feature Sets = Random Forest
Random Forests sind häufig die stärksten Modelle für tabellarische Daten.
In sklearn:
sklearn.ensemble.RandomForestClassifier