Übungen: Maschinelles Lernen - Klassifikation
Übungsaufgaben zum Supervised-Learning-Workflow am Titanic-Beispiel: ML-Definition, Klassifikation vs. Regression, Datenanalyse und Vorverarbeitung, Entscheidungsbaum-Aufbau mit Entropie und Entropieverlust sowie der scikit-learn-Ablauf - vom Grundwissen bis zum Klausur-Niveau.
Beginner
Aufgabe 1 (Beginner) - Was ist Machine Learning?
Welche Aussage trifft die Kerndefinition von Machine Learning aus der Vorlesung am besten?
a) Ein Programm, dessen Regeln ein Entwickler vollständig von Hand programmiert. b) Erzeugen eines Modells aus Eingabedaten (Training) und Nutzung des Modells für Vorhersagen; das Modell wird nicht explizit programmiert. c) Das manuelle Sortieren von Daten in Tabellen. d) Eine Datenbank, die alle möglichen Antworten fest gespeichert hat.
Lösung anzeigen
Korrekt ist b).
Die Folien definieren ML als "Erzeugen eines Modells, basierend auf Eingaben ('Training') und die Nutzung des Modells für Vorhersagen ('produktive Anwendung')". Der zentrale Punkt: Das Modell wird gelernt, nicht von Hand programmiert.
Warum die anderen falsch sind:
- a) beschreibt klassische, explizit programmierte Software - das Gegenteil von ML.
- c) und d) sind reine Datenhaltung/-verarbeitung ohne gelerntes Modell.
Tipp: Zwei Phasen immer parat haben: Training (Modell erzeugen, "Fitting") und produktive Anwendung (Vorhersagen für neue, unbekannte Daten).
Siehe EKI02.
Aufgabe 2 (Beginner) - Klassifikation vs. Regression
Erklären Sie den Unterschied zwischen Klassifikation und Regression und geben Sie zu jeder ein Beispiel aus der Vorlesung.
Lösung anzeigen
Klassifikation sagt eine Kategorie (Klasse) voraus.
- Gegeben: Datensätze, die in zwei oder mehr Klassen eingeteilt sind.
- Ziel: neue, unbekannte Datensätze einer Klasse zuordnen.
- Beispiele: Spam-Filter, Fraud-Detection, Titanic (überlebt/gestorben).
Regression sagt einen numerischen Wert voraus.
- Gegeben: Datensätze mit einem numerischen Ausgabewert.
- Ziel: für neue Datensätze den Ausgabewert vorhersagen.
- Beispiel: Aktienkurs-Vorhersage.
Lösungsweg: Die entscheidende Frage lautet: Ist die Ausgabe eine Kategorie (dann Klassifikation) oder eine kontinuierliche Zahl (dann Regression)? Beide gehören zum Supervised Learning.
Falle: "Zahl als Ausgabe" heißt nicht automatisch Regression. Bei Titanic ist die Ausgabe 0/1 - das sind kodierte Kategorien (gestorben/überlebt), also Klassifikation, keine Regression.
Siehe EKI02.
Aufgabe 3 (Beginner) - Features und Label beim Titanic-Datensatz
Beim Titanic-Datensatz: (a) Welche Spalte ist das Label? (b) Warum ist PassengerId kein Feature? (c) Welche der Spalten Sex, Age, Pclass sind Features?
Lösung anzeigen
(a) Das Label ist Survived (ML-Ausgabe: 0 = Gestorben, 1 = Überlebt) - binäre Klassifikation.
(b) PassengerId ist eine eindeutige ID ohne inhaltlichen Zusammenhang zum Überleben. Sie trägt keine Information, die die Klassifikation stützt, und wird daher nicht als Feature benutzt.
(c) Sex, Age und Pclass sind alle Features (ML-Eingaben).
Lösungsweg: Features sind die Eingaben (X), aus denen das Modell lernt; das Label ist die Zielgröße (y), die vorhergesagt wird. Eine reine Identifikationsnummer wie PassengerId ist beides nicht - sie ist nur ein Schlüssel.
Tipp: Namenskonvention aus der Mathematik: Features als Matrix
X(Großbuchstabe), Label als Vektory(Kleinbuchstabe). Ein Spaltenname liefert einen Vektor, eine Liste von Spaltennamen eine Matrix.
Siehe EKI02.
Fortgeschritten
Aufgabe 4 (Fortgeschritten) - Entropie berechnen
Eine Datenmenge enthält 6 Datensätze der Klasse A und 2 der Klasse B (8 insgesamt). Berechnen Sie die Entropie Schritt für Schritt. Ist diese Menge eher "rein" oder eher "gemischt"?
Lösung anzeigen
Formel: mit den relativen Klassenanteilen .
Schritt 1 - Anteile: , .
Schritt 2 - einsetzen:
Schritt 3 - Logarithmen: , .
Schritt 4 - ausrechnen:
Ergebnis: . Die Menge ist eher gemischt (Wert deutlich über 0), aber nicht maximal gemischt: Bei 50/50 wäre , bei einer reinen Klasse .
Tipp: ist für immer negativ, das Minuszeichen in der Formel macht positiv. Wer keinen Taschenrechner hat (Klausur!): und auswendig kennen.
Siehe EKI02.
Aufgabe 5 (Fortgeschritten) - scikit-learn-Workflow ordnen
Bringen Sie die folgenden Schritte des Titanic-Workflows in die richtige Reihenfolge und nennen Sie zu jedem die zentrale Funktion/den Aufruf:
(1) model.fit(X, y) (2) pd.read_csv(...) (3) DecisionTreeClassifier() (4) model.predict(X_test) (5) fehlende Werte auffüllen und Spalten wählen (6) output.to_csv(...)
Lösung anzeigen
Richtige Reihenfolge:
- (2) Daten laden -
pd.read_csv('data/train.csv') - (5) Vorverarbeiten - Spalten wählen (
X = train_data[features]), fehlende Werte auffüllen (fillna/SimpleImputer) - (3) Modell erzeugen -
model = DecisionTreeClassifier() - (1) Trainieren -
model.fit(X, y) - (4) Vorhersagen -
predictions = model.predict(X_test) - (6) Einreichung schreiben -
output.to_csv('data/submission.csv', index=False)
(Dazwischen gehört das Analysieren des Datensatzes - Features, Label, Datentypen, NaN erkennen - vor der Vorverarbeitung.)
Lösungsweg: Der Ablauf folgt der Logik laden -> verstehen -> aufbereiten -> Modell bauen -> anlernen -> anwenden -> ausgeben. Ohne Vorverarbeitung kein sinnvolles Training; ohne Training keine Vorhersage.
Falle: Der Testdatensatz muss genau so vorverarbeitet werden wie der Trainingsdatensatz (gleiche Spaltenauswahl, gleiches Auffüllen). Sonst passen Eingabeformat und Modell nicht zusammen.
Siehe EKI02.
Aufgabe 6 (Fortgeschritten) - Fehlende Werte auffüllen
Der Titanic-Datensatz hat fehlende Werte in Age, Fare, Cabin und Embarked. (a) Nennen Sie die zwei in der Vorlesung gezeigten Strategien mit Code-Beispiel. (b) Warum muss man data['Embarked'] = data['Embarked'].fillna('S') mit Zuweisung schreiben?
Lösung anzeigen
(a) Zwei Strategien:
- Fester Wert mit
fillna:
data['Embarked'] = data['Embarked'].fillna('S')
- Mittelwert mit
SimpleImputer(scikit-learn):
import numpy as np
from sklearn.impute import SimpleImputer
imp = SimpleImputer(missing_values=np.nan, strategy='mean')
data['Age'] = imp.fit_transform(data[['Age']])
(b) Warum Zuweisung? DataFrame.fillna liefert einen modifizierten (neuen) DataFrame zurück und verändert das Original nicht. Ohne Zuweisung (data['Embarked'].fillna('S') allein) würde das Ergebnis verworfen und die fehlenden Werte blieben bestehen. Die Zuweisung überschreibt die Spalte mit dem aufgefüllten Ergebnis.
Lösungsweg: fillna eignet sich für kategoriale Spalten mit einem sinnvollen Standardwert (Embarked -> 'S'), SimpleImputer(strategy='mean') für numerische Spalten wie Age. Beides verhindert, dass NaN-Werte das Training stören.
Tipp:
SimpleImputererwartet eine 2D-Struktur, daherdata[['Age']]mit doppelten eckigen Klammern (Liste von Spalten -> Matrix), nichtdata['Age'](ein Name -> Vektor).
Siehe EKI02.
Anspruchsvoll
Aufgabe 7 (Anspruchsvoll) - Zwei Splits vergleichen (Information Gain)
Eine Menge mit 10 Datensätzen (5x A, 5x B) hat die Entropie . Zwei Splits werden getestet:
- Split S1: = 5 Sätze (4x A, 1x B), = 5 Sätze (1x A, 4x B).
- Split S2: = 6 Sätze (5x A, 1x B), = 4 Sätze (0x A, 4x B).
Berechnen Sie für beide den Entropieverlust und entscheiden Sie, welcher Split gewählt wird. (; .)
Lösung anzeigen
Formel:
Split S1: Beide Teilmengen haben (Verteilung 4:1 bzw. 1:4 ist symmetrisch).
Split S2: ; (reine Klasse A).
Entscheidung: - es wird Split S2 gewählt, weil er den größeren Entropieverlust liefert.
Lösungsweg: Man gewichtet die Teilmengen-Entropien mit ihrem Anteil an der Gesamtmenge und zieht sie von ab. S2 punktet, weil er eine reine Teilmenge () erzeugt - ein Zweig wird sofort zum Blatt.
Tipp: Eine reine Teilmenge () ist immer wertvoll, weil sie den gewichteten Restterm verkleinert. Splits, die eine Klasse sauber abtrennen, gewinnen meist.
Siehe EKI02.
Aufgabe 8 (Anspruchsvoll) - Entscheidungsbaum interpretieren und vorhersagen
Gegeben der Titanic-Entscheidungsbaum aus der Vorlesung:
flowchart TD
A["is sex male?"] -->|"yes"| B["is age > 9.5?"]
A -->|"no"| C["survived (0.73, 36%)"]
B -->|"yes"| D["died (0.17, 61%)"]
B -->|"no"| E["is sibsp > 2.5?"]
E -->|"yes"| F["died (0.05, 2%)"]
E -->|"no"| G["survived (0.89, 2%)"]
Sagen Sie für folgende Passagiere die Klasse voraus und geben Sie den Pfad an: (a) weiblich, 30 Jahre; (b) männlich, 40 Jahre; (c) männlich, 5 Jahre, SibSp = 1.
Lösung anzeigen
(a) Weiblich, 30 Jahre: "is sex male?" -> no -> Blatt survived (0.73, 36%). Vorhersage: überlebt.
(b) Männlich, 40 Jahre: "is sex male?" -> yes -> "is age > 9.5?" -> yes -> Blatt died (0.17, 61%). Vorhersage: gestorben.
(c) Männlich, 5 Jahre, SibSp = 1: "is sex male?" -> yes -> "is age > 9.5?" -> no (5 < 9.5) -> "is sibsp > 2.5?" -> no (1 < 2.5) -> Blatt survived (0.89, 2%). Vorhersage: überlebt.
Lösungsweg: Man startet an der Wurzel und folgt bei jedem inneren Knoten der Kante, deren Bedingung zutrifft, bis man ein Blatt (Klasse) erreicht. Die Klassen stehen in den Blättern, die Entscheidungen in den inneren Knoten, die Werte (yes/no) an den Kanten.
Tipp: Die Zahlen im Blatt bedeuten (vorhergesagte Überlebenswahrscheinlichkeit, Anteil der Fälle). "survived (0.89, 2%)" heißt: dieses Blatt sagt "überlebt" mit hoher Sicherheit, betrifft aber nur 2 % der Fälle. Das Muster spiegelt "Frauen und Kinder zuerst" wider.
Siehe EKI02.
Aufgabe 9 (Anspruchsvoll) - Wann ML einsetzen, wann nicht?
(Mini-Test: "Wann soll man ML benutzen, wann nicht?") Ein Team überlegt für zwei Aufgaben, ob ML sinnvoll ist. Begründen Sie jeweils.
(a) E-Mails automatisch in Spam / kein Spam einteilen, wobei ständig neue Spam-Varianten auftauchen. (b) Die Mehrwertsteuer (19 %) auf einen Nettobetrag aufschlagen.
Lösung anzeigen
(a) ML ist sinnvoll. Spam-Erkennung ist ein Klassifikationsproblem mit vielen Beispielen und sich ständig ändernden Mustern. Eine feste Regelmenge von Hand wäre kaum wartbar; ein Modell lernt aus manuell klassifizierten Beispielen und verbessert sich über Nutzerkorrekturen (Rückkopplungskreislauf: Training input -> Klassifikation -> Corrections -> zurück ins Training). Genau dieser Fall wird in der Vorlesung als ML-Anwendung gezeigt.
(b) ML ist nicht sinnvoll. Die Regel ist exakt bekannt und trivial: . Hier braucht man kein gelerntes Modell - eine explizit programmierte Formel ist exakt, schneller und fehlerfrei. ML lohnt sich nur, wenn die Regel unbekannt/komplex ist und genügend Daten vorliegen.
Lösungsweg: Faustregel aus der ML-Definition: ML einsetzen, wenn das Modell aus Daten gelernt werden muss, weil es nicht praktikabel explizit programmierbar ist. Ist die Lösung eine bekannte, exakte Regel, ist klassische Programmierung besser.
Falle: ML ist kein Selbstzweck. Für deterministische, exakt beschreibbare Aufgaben ist es überflüssig und sogar schlechter (ungenau, aufwändig, Datenbedarf).
Siehe EKI02.
Klausur-Niveau
Aufgabe 10 (Klausur-Niveau) - Besten ersten Split bestimmen
Eine Trainingsmenge hat 12 Datensätze (6x A, 6x B), also . Drei Kandidaten-Splits werden getestet:
| Split | ||
|---|---|---|
| S1 | 6 Sätze (5A, 1B) | 6 Sätze (1A, 5B) |
| S2 | 4 Sätze (4A, 0B) | 8 Sätze (2A, 6B) |
| S3 | 3 Sätze (3A, 0B) | 9 Sätze (3A, 6B) |
Berechnen Sie den Entropieverlust jedes Splits und wählen Sie den ersten Split. Nutzen Sie: ; ; ; .
Lösung anzeigen
Formel: , mit und .
S1: beide Teilmengen
S2: (rein),
S3: (rein),
Entscheidung: Der größte Entropieverlust gehört zu S2 (0,459). Dieser Split wird als erster gewählt.
Lösungsweg: Beim Aufbau wählt man an jedem Knoten das Feature/Wert-Paar mit dem maximalen Entropieverlust. Obwohl S3 ebenfalls eine reine Teilmenge liefert, ist diese sehr klein (3 Sätze) und der große Restzweig bleibt stark gemischt (). S2 trennt mehr sauber ab und senkt die Restentropie stärker.
Falle: Nicht nur schauen, ob eine reine Teilmenge entsteht - die Gewichtung mit der Teilmengengröße entscheidet. Eine kleine reine Teilmenge (S3) bringt weniger als eine größere, die den Rest deutlicher entmischt (S2).
Alternative Betrachtung: Man könnte auch das Verfahren aus der Folie 2.38-2.43 heranziehen, wo genauso f4 < 809.1 als Gewinner mit 0,334 aus fünf Kandidaten hervorging - dasselbe Prinzip "größter Entropieverlust gewinnt".
Siehe EKI02.
Aufgabe 11 (Klausur-Niveau) - Wie baut man einen Entscheidungsbaum auf?
(Mini-Test: "Wie baut man einen Entscheidungsbaum auf?") Beschreiben Sie den Aufbau eines Entscheidungsbaums vollständig. Gehen Sie ein auf: Aufbau des Baums (Knoten, Kanten, Blätter), die Rolle von Entropie und Entropieverlust sowie die Rekursion und das Abbruchkriterium.
Lösung anzeigen
Musterantwort:
1. Struktur: Ein Entscheidungsbaum hat die Klassen als Blätter (z.B. überlebt/gestorben), Entscheidungen in den inneren Knoten (z.B. "männlich?") und die Werte an den Kanten (z.B. Ja/Nein).
2. Ziel jedes Splits: An jedem Knoten wird ein Feature und ein Wert gewählt, so dass ein möglichst großer Entropieverlust entsteht. Ein Split "Feature < Wert" teilt die Menge in (Bedingung erfüllt) und (nicht erfüllt).
3. Entropie misst, wie "gemischt" eine Menge bezüglich der Klassen ist:
Sie ist maximal bei ausgeglichener Verteilung (50/50) und 0, wenn alle Elemente derselben Klasse angehören.
4. Entropieverlust (Information Gain) bewertet einen Split:
Man testet mehrere Feature/Wert-Kandidaten und wählt den mit dem größten Gewinn.
5. Rekursion + Abbruch: Teilmengen, die noch gemischt sind (), werden rekursiv nach demselben Verfahren weiter aufgeteilt. Erreicht eine Teilmenge Entropie 0 (nur noch eine Klasse), wird sie zum Blatt dieser Klasse. Beispiel aus der Folie: Nach dem ersten Split hat mit 6 Fällen (alle "A") und wird Blatt "A"; mit wird weiter aufgeteilt.
Lösungsweg: Der Algorithmus ist greedy und top-down: an jedem Knoten lokal den besten Split (max. Entropieverlust) wählen, dann für die entstandenen Teilmengen rekursiv wiederholen, bis die Blätter rein sind.
Tipp: In scikit-learn erledigt das der
DecisionTreeClassifier();model.fit(X, y)baut den Baum automatisch aus Features und Labels auf.
Siehe EKI02.
Aufgabe 12 (Klausur-Niveau) - Kaggle und Vorhersage neuer Fälle
(Mini-Test: "Was ist Kaggle?" und "Wie sagt man neue Fälle vor?") (a) Was ist Kaggle und welche zwei Dateien lädt man für den Titanic-Wettbewerb herunter, worin unterscheiden sie sich? (b) Beschreiben Sie den Code-Ablauf, um Vorhersagen zu erzeugen und einzureichen. (c) Worauf muss man beim Testdatensatz unbedingt achten?
Lösung anzeigen
(a) Kaggle ist eine Community-Plattform mit Datensätzen, Wettbewerben etc. Für Titanic lädt man:
train.csv- Trainingsdaten mit bekanntem LabelSurvived.test.csv- der Einreichungs-Datensatz ohne Labels; für ihn werden die Vorhersagen erzeugt und eingereicht.
Der Unterschied: nur train.csv enthält das Label zum Lernen; test.csv ist unbeschriftet. Es ist kein lokal beschrifteter Hold-out-Testsatz - die Bewertung erfolgt extern über das Kaggle-Leaderboard.
(b) Ablauf:
# Vorhersagen für den (gleich vorverarbeiteten) Testdatensatz
predictions = model.predict(X_test)
# Einreichung mit zwei Spalten erzeugen
output = pd.DataFrame({'PassengerId': test_data.PassengerId, 'Survived': predictions})
output.to_csv('data/submission.csv', index=False)
Danach submission.csv bei Kaggle einreichen und Position im Leaderboard prüfen.
(c) Achtung: Der Testdatensatz muss genau so wie der Trainingsdatensatz vorverarbeitet werden - gleiche Spaltenauswahl, gleiches Auffüllen fehlender Werte etc. Sonst passt das Eingabeformat nicht zum trainierten Modell.
Lösungsweg: model.predict(X_test) wendet das im Training gelernte Modell auf neue, unbekannte Fälle an. Die Ausgabe wird zusammen mit PassengerId in die von Kaggle geforderte CSV geschrieben.
Falle: Da
test.csvkein Label hat, kann man mit ihm lokal keine Genauigkeit messen. Eine lokale Gütemessung (Accuracy, Train/Validation/Test-Split, Kreuzvalidierung) zeigt das Deck nicht - die Bewertung läuft nur über das Leaderboard.
Siehe EKI02.