Programming lesson
Maximum-Likelihood-Schätzung und Entscheidungsbäume: Ein Tutorial zu CM146
Lerne die Grundlagen der Maximum-Likelihood-Schätzung und Entscheidungsbäume anhand praktischer Beispiele. Dieses Tutorial erklärt die Konzepte hinter CM146 Problem Set 1-5 und zeigt, wie du sie in Python anwendest.
Einführung in die Maximum-Likelihood-Schätzung
Die Maximum-Likelihood-Schätzung (MLE) ist eine der grundlegenden Methoden der Statistik und des maschinellen Lernens. Sie wird verwendet, um die Parameter einer Wahrscheinlichkeitsverteilung zu schätzen, basierend auf beobachteten Daten. In diesem Tutorial gehen wir auf die MLE für Bernoulli-Verteilungen ein, wie sie in CM146 Problem Set 1 behandelt wird. Stell dir vor, du analysierst die Klickrate einer neuen App – ähnlich wie bei einer Münze, die entweder Erfolg (1) oder Misserfolg (0) anzeigt. Die MLE hilft dir, die wahre Erfolgswahrscheinlichkeit zu schätzen.
Die Likelihood-Funktion
Angenommen, wir beobachten n unabhängige Zufallsvariablen X1, …, Xn, die alle einer Bernoulli-Verteilung mit Parameter θ folgen. Die Likelihood-Funktion ist die Wahrscheinlichkeit, genau diese Daten zu sehen, gegeben einen bestimmten Wert von θ. Sie ist definiert als:
L(θ) = ∏_{i=1}^{n} θ^{x_i} (1-θ)^{1-x_i}Diese Funktion hängt nicht von der Reihenfolge der Beobachtungen ab, da die Multiplikation kommutativ ist. Das ist wichtig, denn bei echten Daten, wie etwa den Überlebensdaten der Titanic (siehe CM146 Problem Set 4), spielt die Reihenfolge keine Rolle.
Log-Likelihood und Ableitung
Da der Logarithmus eine monotone Funktion ist, maximieren wir oft die Log-Likelihood:
ℓ(θ) = log L(θ) = (∑ x_i) log θ + (n - ∑ x_i) log(1-θ)Die erste Ableitung ist:
dℓ/dθ = (∑ x_i)/θ - (n - ∑ x_i)/(1-θ)Setzt man diese gleich Null, erhält man den MLE-Schätzer:
θ̂_MLE = (1/n) ∑ x_iDas ist einfach der Anteil der Einsen in den Daten. Für ein Beispiel mit 6 Einsen und 4 Nullen (n=10) ergibt sich θ̂ = 0,6. Die zweite Ableitung ist negativ, was bestätigt, dass es sich um ein Maximum handelt.
Visualisierung der Likelihood-Funktion
Mit Python und Matplotlib kannst du die Likelihood-Funktion plotten. Für n=10, 6 Einsen, sieht der Code so aus:
import numpy as np
import matplotlib.pyplot as plt
theta = np.linspace(0, 1, 101)
likelihood = theta**6 * (1-theta)**4
plt.plot(theta, likelihood)
plt.xlabel('θ')
plt.ylabel('L(θ)')
plt.axvline(x=0.6, color='r', linestyle='--')
plt.show()Der Plot zeigt ein Maximum bei θ=0,6, genau wie die geschlossene Form. Für andere Datensätze (z.B. n=100, 60 Einsen) wird die Kurve schmaler, was die höhere Sicherheit widerspiegelt.
Entscheidungsbäume und Split-Heuristiken
Entscheidungsbäume sind ein beliebtes Werkzeug im maschinellen Lernen. Der ID3-Algorithmus wählt Splits, die die Entropie maximieren (Informationsgewinn). In CM146 Problem Set 2 wird gezeigt, warum die Reduktion des Fehlers allein nicht ausreicht. Stell dir vor, du entwickelst eine KI für ein Spiel wie Fortnite – der Entscheidungsbaum könnte lernen, wann ein Spieler angreifen oder sich verstecken sollte, basierend auf Merkmalen wie Gesundheit oder Gegnerdistanz.
Fehlerreduktion vs. Entropiereduktion
Betrachten wir eine boolesche Funktion f(X) = X1 ∨ X2 ∨ X3 mit n≥4. Ein Baum ohne Split (1 Blatt) sagt für alle Beispiele die Mehrheitsklasse voraus. Da es 2n Beispiele gibt, wobei 7/8 der Beispiele die Klasse 1 haben (da nur bei X1=X2=X3=0 die Klasse 0 ist), macht der Baum 2n/8 Fehler. Ein Split nach X4 (oder einem irrelevanten Merkmal) reduziert den Fehler nicht, da die Verteilung der Zielvariable in den Kindern gleich bleibt. Die Entropie hingegen sinkt beim Split nach X1, X2 oder X3, da die Kinder reiner werden. Das zeigt, dass die Entropie ein besserer Indikator für nützliche Splits ist.
Entropie und Informationsgewinn
Die Entropie einer Menge S mit p positiven und n negativen Beispielen ist H(S) = B(p/(p+n)), wobei B(q) = -q log q - (1-q) log(1-q). Wenn ein Split in k Teilmengen erfolgt, bei denen das Verhältnis pk/(pk+nk) für alle k gleich ist, dann ist der Informationsgewinn null. Das passiert bei irrelevanten Merkmalen.
Praktische Anwendung: Titanic-Überlebensvorhersage
In CM146 Problem Set 4 wendest du Entscheidungsbäume auf den Titanic-Datensatz an. Ziel ist es, das Überleben von Passagieren vorherzusagen. Mit scikit-learn kannst du einen Entscheidungsbaum trainieren:
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import pandas as pd
data = pd.read_csv('titanic_train.csv')
X = data[['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare']]
X = pd.get_dummies(X, columns=['Sex'])
X['Age'].fillna(X['Age'].median(), inplace=True)
y = data['Survived']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
clf = DecisionTreeClassifier(max_depth=3)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
print('Genauigkeit:', accuracy_score(y_test, y_pred))Dieses Beispiel zeigt, wie du mit einfachen Features eine Genauigkeit von etwa 80% erreichst. Die Entscheidungsbäume lernen, dass Frauen und Kinder aus der ersten Klasse eine höhere Überlebenschance hatten – ein historisches Muster, das auch in der heutigen Datenanalyse relevant ist.
Fazit
Dieses Tutorial hat die Kernkonzepte der Maximum-Likelihood-Schätzung und Entscheidungsbäume behandelt, wie sie in CM146 Problem Set 1-5 vorkommen. Mit diesen Werkzeugen kannst du nicht nur akademische Probleme lösen, sondern auch reale Daten analysieren – sei es für KI-Anwendungen, Finanzprognosen oder Spieleentwicklung. Übe die Konzepte, indem du eigene Datensätze ausprobierst, und du wirst die Macht der statistischen Modellierung verstehen.