Übungen: Maschinelles Lernen - Regression
Übungen zu EKI03: Klassifikation vs. Regression, Konfusionsmatrix und ihre Gütemasse (Accuracy, Precision, Recall, F-Score), Regressionsmasse (MAE, MSE, RMSE), k-fache Kreuzvalidierung und der scikit-learn-Workflow. Alle Aufgaben basieren ausschliesslich auf dem Kapitelinhalt.
Beginner
Aufgabe 1 (Beginner) - Klassifikation oder Regression?
Welche Aussage beschreibt den zentralen Unterschied zwischen Klassifikation und Regression korrekt?
a) Klassifikation braucht Trainingsdaten, Regression nicht. b) Klassifikation sagt eine Kategorie (diskret) voraus, Regression sagt eine Zahl (kontinuierlich) voraus. c) Regression ist unüberwachtes Lernen, Klassifikation ist überwachtes Lernen. d) Klassifikation sagt einen numerischen Wert voraus, Regression eine Kategorie.
Lösung anzeigen
Richtig ist b).
Beide sind Aufgaben des überwachten Lernens (supervised learning). Der Unterschied liegt allein in der Art des Ausgabewerts:
- Klassifikation: diskrete Kategorie (z.B. Spam-Filter, Fraud-Detection).
- Regression: kontinuierlicher / numerischer Wert (z.B. Aktienkurs-Vorhersage).
Merksatz aus den Folien: "Klassifikation sagt eine Kategorie voraus, Regression sagt eine Zahl voraus."
- a) ist falsch - beide brauchen Trainingsdaten mit bekannten Ausgabewerten.
- c) ist falsch - beide sind überwachtes Lernen.
- d) verwechselt die beiden.
Falle: "Aktienkurs-Vorhersage" klingt nach Finanz-Klassifikation, ist aber Regression, weil ein numerischer Wert (Kurs) vorhergesagt wird. Frage dich immer: kommt eine Zahl oder eine Kategorie heraus?
Siehe EKI03.
Aufgabe 2 (Beginner) - Die Konfusionsmatrix beschriften
Ordne die vier Felder einer binären Konfusionsmatrix (TP, FP, FN, TN) den folgenden Situationen bei einer Krankheitsdiagnose zu und gib an, welche Felder Type I Error bzw. Type II Error heissen:
- Vorhersage KRANK, Person ist tatsächlich krank.
- Vorhersage KRANK, Person ist tatsächlich gesund.
- Vorhersage GESUND, Person ist tatsächlich krank.
- Vorhersage GESUND, Person ist tatsächlich gesund.
Lösung anzeigen
| Situation | Feld | Bezeichnung |
|---|---|---|
| 1. KRANK vorhergesagt, ist krank | TP (True Positive) | korrekt als krank erkannt |
| 2. KRANK vorhergesagt, ist gesund | FP (False Positive) | Type I Error |
| 3. GESUND vorhergesagt, ist krank | FN (False Negative) | Type II Error |
| 4. GESUND vorhergesagt, ist gesund | TN (True Negative) | korrekt als gesund erkannt |
In der Konfusionsmatrix stehen die Vorhersagen in den Zeilen und der tatsächliche Zustand in den Spalten.
Tipp: Eselsbrücke - False Positive ist ein "Fehlalarm" (Type I), False Negative ist ein "Übersehen" (Type II). Die Ziffer folgt der Buchstabenreihenfolge: FP = I, FN = II.
Siehe EKI03.
Aufgabe 3 (Beginner) - Defaults von cross_val_score
Der Aufruf scores = cross_val_score(model, X, y) wird ohne weitere Argumente verwendet. Welche Standardwerte gelten laut Kapitel?
a) scoring='rmse', k = 10
b) scoring='accuracy', k = 5
c) scoring='neg_root_mean_squared_error', k = 3
d) scoring='f1', k = 5
Lösung anzeigen
Richtig ist b).
Laut Kapitel gilt als Default scoring='accuracy' und k = 5. cross_val_score führt damit eine 5-fache Kreuzvalidierung durch und scores.mean() gibt den Mittelwert der Scores aus.
Für Regression muss man das Scoring aktiv umstellen, z.B. auf scoring='neg_root_mean_squared_error' (Antwort c nennt zwar dieses Scoring, aber nicht als Default und mit falschem k).
Falle: Accuracy ist ein Klassifikationsmass. Vergisst man bei einem Regressionsproblem,
scoringumzustellen, versucht scikit-learn ein unpassendes Mass anzuwenden. Für Regressionscoring='neg_root_mean_squared_error'setzen.
Siehe EKI03.
Fortgeschritten
Aufgabe 4 (Fortgeschritten) - Klassifikationsmasse berechnen
Ein Klassifikator liefert auf einem Testdatensatz folgende Konfusionsmatrix:
Berechne Schritt für Schritt Accuracy, Precision, Recall und F-Score.
Lösung anzeigen
Accuracy (Treffergenauigkeit):
Precision:
Recall:
F-Score (harmonisches Mittel von Precision und Recall):
Ergebnis: Accuracy = 0.70, Precision = 0.80, Recall = 0.667, F-Score = 0.727.
Tipp: Precision und Recall teilen sich denselben Zähler TP. Precision fragt "Wie viele meiner Positiv-Vorhersagen stimmen?" (Nenner mit FP), Recall fragt "Wie viele echte Positive habe ich erwischt?" (Nenner mit FN).
Siehe EKI03.
Aufgabe 5 (Fortgeschritten) - MAE, MSE und RMSE rechnen
Ein Regressionsmodell liefert für Datenpunkte die Vorhersagen , die wahren Werte sind . Berechne MAE, MSE und RMSE.
Lösung anzeigen
Schritt 1 - Abweichungen :
Schritt 2 - MAE (Durchschnitt der Beträge):
Schritt 3 - MSE (Durchschnitt der Quadrate):
Schritt 4 - RMSE (Wurzel des MSE):
Tipp: MSE bestraft grosse Fehler stärker (der Fehler 4 liefert 16 von 29 der Fehlersumme). RMSE zieht die Wurzel und hat dadurch dieselbe Einheit wie die Zielgrösse - deshalb ist RMSE leichter zu interpretieren als MSE.
Falle: RMSE ist NICHT der Mittelwert der Beträge. Erst quadrieren und mitteln (MSE), dann die Wurzel ziehen. gilt fast immer.
Siehe EKI03.
Aufgabe 6 (Fortgeschritten) - Wann versagt Accuracy?
Erkläre in eigenen Worten, warum die Treffergenauigkeit im Tumor-Beispiel (TP=1, FP=1, FN=8, TN=90) mit dem Wert 0.91 irreführend ist, und welcher Score in solchen Fällen stattdessen verwendet wird.
Lösung anzeigen
Die Accuracy beträgt
und sieht auf den ersten Blick gut aus. Der Datensatz ist aber unausgewogen (imbalanced): Es gibt nur 9 echte Kranke (TP+FN = 1+8), aber 91 Gesunde. Der hohe TN-Anteil (90) treibt die Accuracy nach oben, obwohl 8 von 9 Kranken übersehen werden (Recall = 1/9 ≈ 0.111).
Der F-Score spiegelt diese schlechte Qualität wider:
Kernaussage: Bei unausgewogenen Datensätzen ist die Treffergenauigkeit irreführend. Man verwendet stattdessen den F-Score (harmonisches Mittel aus Precision und Recall), weil er nur dann hoch wird, wenn beide gut sind.
Tipp: Faustregel - je seltener die positive Klasse, desto weniger aussagekräftig die Accuracy. Ein Modell, das immer "gesund" sagt, erreicht bei 91% Gesunden schon 91% Accuracy, ohne einen einzigen Kranken zu erkennen.
Siehe EKI03.
Aufgabe 7 (Fortgeschritten) - Den scikit-learn-Workflow ordnen
Die folgenden Code-Bausteine des TMDB-Workflows sind durcheinandergeraten. Bringe sie in die korrekte Reihenfolge und benenne kurz den Zweck jedes Schritts.
A) model.fit(X, y)
B) output.to_csv('data/submission.csv', index=False)
C) train_data = pd.read_csv('data/train.csv')
D) scores = cross_val_score(model, X, y, scoring='neg_root_mean_squared_error')
E) model = SVR()
F) y = train_data["revenue"]; X = train_data[["budget"]]
G) predictions = model.predict(X_test)
Lösung anzeigen
Korrekte Reihenfolge: C - F - E - A - D - G - B
- C
read_csv- Daten laden (Trainings-CSV in einpd.DataFrame). - F Preprocessing - Ziel
y = revenueund FeaturesX = budgetextrahieren. - E
model = SVR()- Regressionsmodell (Support Vector Regression) erzeugen. - A
model.fit(X, y)- Training ("fitting") mit Merkmalen und Zielen. - D
cross_val_score(..., scoring='neg_root_mean_squared_error')- Validierung mit RMSE. - G
model.predict(X_test)- Vorhersage für den Testdatensatz. - B
to_csv(..., index=False)- Einreichungsdatei schreiben.
graph LR
C["read_csv: Daten laden"] --> F["Preprocessing: X, y"]
F --> E["model = SVR()"]
E --> A["fit: Training"]
A --> D["cross_val_score: RMSE"]
D --> G["predict: Vorhersage"]
G --> B["to_csv: submission"]
Falle: Validieren (D) kommt VOR dem finalen
predict(G). Erst wenn das Modell "gut genug" ist, wird es produktiv auf den Testdatensatz angewendet.
Siehe EKI03.
Anspruchsvoll
Aufgabe 8 (Anspruchsvoll) - Imbalanced-Szenario auswerten
Ein Screening-Test für eine seltene Krankheit wird auf 1000 Personen angewendet. 20 davon sind tatsächlich krank. Das Modell liefert: TP = 5, FP = 5, FN = 15, TN = 975.
a) Berechne Accuracy und F-Score. b) Beurteile das Modell: Ist es einsatzfähig? Begründe mit den Zahlen.
Lösung anzeigen
a) Berechnungen:
b) Beurteilung: Die Accuracy von 0.98 klingt exzellent, ist aber irreführend, weil der Datensatz stark unausgewogen ist (nur 20 von 1000 sind krank). Der Recall von nur 0.25 bedeutet, dass 15 von 20 Kranken übersehen werden (FN = 15). Für einen Krankheitstest ist das gefährlich. Der F-Score von 0.333 zeigt die tatsächlich schlechte Qualität deutlich besser als die Accuracy. Das Modell ist nicht einsatzfähig.
Tipp: Bei medizinischem Screening ist ein hoher Recall meist wichtiger als hohe Precision - ein übersehener Kranker (FN, Type II Error) wiegt schwerer als ein Fehlalarm (FP, Type I Error). Genau solche Abwägungen macht die reine Accuracy unsichtbar.
Siehe EKI03.
Aufgabe 9 (Anspruchsvoll) - k-fache Kreuzvalidierung erklären und rechnen
a) Erkläre in vier Schritten das Prinzip der k-fachen Kreuzvalidierung. b) Eine 5-fache Kreuzvalidierung liefert folgende RMSE-Werte pro Fold: 3.0, 3.4, 2.8, 3.2, 3.6. Bestimme das Gesamtergebnis.
Lösung anzeigen
a) Vier Schritte (k fold cross validation):
- Spalte den Datensatz in Teildatensätze (Folds) auf, z.B. .
- Trainiere mit Folds und benutze 1 Fold zur Validierung.
- Iteriere -mal, jedes Mal mit einem anderen Fold als Validierungsmenge.
- Berechne das durchschnittliche Ergebnis über alle Iterationen.
graph TD
D["Datensatz"] --> S["Aufteilen in k = 5 Folds"]
S --> I1["Iter 1: Fold 1 Test -> Perf(1)"]
S --> I2["Iter 2: Fold 2 Test -> Perf(2)"]
S --> I3["Iter 3: Fold 3 Test -> Perf(3)"]
S --> I4["Iter 4: Fold 4 Test -> Perf(4)"]
S --> I5["Iter 5: Fold 5 Test -> Perf(5)"]
I1 --> A["Mittelwert"]
I2 --> A
I3 --> A
I4 --> A
I5 --> A
b) Gesamtergebnis (Mittelwert über alle Iterationen):
Der durchschnittliche RMSE beträgt 3.2.
Tipp: Kreuzvalidierung ist robuster als ein einzelner Train/Test-Split, weil jeder Datenpunkt einmal zum Testen und -mal zum Trainieren verwendet wird. Das Ergebnis hängt weniger vom Zufall der Aufteilung ab.
Siehe EKI03.
Aufgabe 10 (Anspruchsvoll) - Den Entwicklungsprozess interpretieren
Betrachte den ML-Entwicklungsprozess:
graph TD
Config["Configuration"] --> Train["Training"]
Train --> Val["Validation"]
Val --> Decision{"Gut genug?"}
Decision -->|"not good enough"| Config
Decision -->|"good enough"| Pred["Prediction"]
a) Welche Daten werden im Training und welche in der Validation verwendet? b) Was passiert bei "not good enough" und warum ist diese Schleife wichtig? c) In welcher Phase wird auf Live-Daten zugegriffen?
Lösung anzeigen
a) Im Training werden die Trainingsdaten (Training data) verwendet, in der Validation die Testdaten (Test data). Beide gehören zur Trainingsphase.
b) Bei "not good enough" springt der Prozess zurück zur Configuration. Das Modell wird neu konfiguriert (z.B. anderer Algorithmus oder andere Features) und erneut trainiert und validiert. Diese Iteration ist wichtig, weil ein Modell selten beim ersten Versuch gut genug ist - man verbessert es schrittweise, bis die Gütemasse ausreichen.
c) Erst in der Produktionsphase bei "Prediction" wird das fertige, validierte Modell auf Live-Daten (Live data) angewendet, um ein prediction result zu erzeugen.
Falle: Live-Daten dürfen NICHT zur Validierung benutzt werden - dafür sind die Testdaten da. Erst nach bestandener Validierung geht das Modell in Produktion.
Siehe EKI03.
Klausur-Niveau
Aufgabe 11 (Klausur-Niveau) - Vollständige Konfusionsmatrix-Auswertung
Ein Spam-Filter wird getestet. Von 200 E-Mails sind 50 echter Spam. Der Filter markiert 60 E-Mails als Spam; davon sind 45 tatsächlich Spam.
a) Erstelle die vollständige Konfusionsmatrix (TP, FP, FN, TN). b) Berechne Accuracy, Precision, Recall und F-Score. c) Interpretiere: Was bedeutet die Precision hier konkret für einen Nutzer?
Lösung anzeigen
a) Konfusionsmatrix herleiten:
- Als Spam markiert: 60, davon korrekt: TP = 45, also FP = 60 - 45 = 15.
- Echter Spam gesamt: 50, davon erkannt (TP): 45, also übersehen: FN = 50 - 45 = 5.
- Gesamt 200, Rest ist korrekt als kein Spam: TN = 200 - 45 - 15 - 5 = 135.
| Ist Spam | Ist kein Spam | |
|---|---|---|
| Vorhersage: SPAM | TP = 45 | FP = 15 |
| Vorhersage: KEIN SPAM | FN = 5 | TN = 135 |
b) Gütemasse:
c) Interpretation der Precision (0.75): Von allen als Spam markierten E-Mails sind nur 75% wirklich Spam. Anders gesagt: Jede vierte in den Spam-Ordner verschobene Mail ist eigentlich erwünscht (ein FP). Für einen Nutzer heisst das, dass gelegentlich echte Mails im Spam-Ordner landen.
Tipp: Beim Spam-Filter ist ein hoher Precision-Wert oft wichtiger als hoher Recall: eine verlorene echte Mail (FP) ärgert mehr als eine durchgerutschte Spam-Mail (FN). Bei Krankheitstests ist es umgekehrt. Der passende Score hängt immer von der Anwendung ab.
Falle: TN nicht vergessen - es ergibt sich als Rest aus der Gesamtzahl. Wer TN übersieht, kann Accuracy nicht berechnen.
Siehe EKI03.
Aufgabe 12 (Klausur-Niveau) - Gute Kennzahl, wertloses Modell
Auf einer Folie wird gezeigt, dass sich der S&P-500-Index mit durch Variablen wie Butterproduktion in Bangladesch, US-Käseproduktion und Schafpopulation "erklären" lässt.
a) Wie nennt man dieses Phänomen? b) Warum ist das Modell trotz des nahezu perfekten wertlos? c) Welche Lehre ziehst du daraus für die Validierung von Regressionsmodellen?
Lösung anzeigen
a) Es handelt sich um eine Scheinkorrelation (spurious correlation) bzw. um Overfitting. Das Beispiel stammt aus "Stupid Data Miner Tricks" ("Overfitting the S & P 500").
b) Zwischen Butterproduktion und Aktienindex besteht kein kausaler oder sachlicher Zusammenhang. Die hohe Kennzahl entsteht nur, weil genügend unsinnige Variablen zusammengesucht wurden, bis die Kurve zufällig passt. Das Modell hat keinerlei Vorhersagekraft für neue Daten - es beschreibt nur den Zufall der Vergangenheit.
c) Eine gute Kennzahl allein reicht nicht. Eine Regression muss inhaltlich Sinn ergeben. Man muss prüfen, ob die verwendeten Merkmale plausibel mit der Zielgrösse zusammenhängen, und nicht nur auf , RMSE o.ä. schauen. Sonst besteht die Gefahr von Overfitting bzw. Scheinkorrelation.
Falle: wird in diesem Kapitel NUR in dieser Karikatur als Zahl genannt; eine Formel dafür wird nicht gegeben. Merke dir die Aussage ("Regressionen müssen einen Sinn ergeben"), nicht eine Definition von .
Siehe EKI03.
Aufgabe 13 (Klausur-Niveau) - Regressionsmodelle: Training und Vorhersage
a) Nenne mindestens drei ML-Modelle, die laut Kapitel für Regression geeignet sind.
b) Wie wird ein solches Modell in scikit-learn trainiert und wie wird es zur Vorhersage benutzt? Gib die zentralen Methodenaufrufe an.
c) Welchen Score verwendet man in cross_val_score für Regression und warum ist er negativ?
Lösung anzeigen
a) Laut scikit-learn-Cheat-Sheet des Kapitels eignen sich u.a.: SVR (Support Vector Regression, kernel='linear' oder kernel='rbf'), SGD Regressor (bei > 100K Samples), RidgeRegression, Lasso, ElasticNet und Ensemble Regressors. (Regularisierungsverfahren wie Lasso/Ridge/ElasticNet werden nur als Namen genannt, die Mathematik nicht erklärt.)
b) Training und Vorhersage:
from sklearn.svm import SVR
model = SVR() # Modell erzeugen
model.fit(X, y) # Training mit Merkmalen X und Zielen y
predictions = model.predict(X_test) # Vorhersage für neue Daten
Das Training erfolgt mit model.fit(X, y), die Vorhersage mit model.predict(X_test).
c) Für Regression verwendet man scoring='neg_root_mean_squared_error' (RMSE). Er ist negativ, weil scikit-learn Scores grundsätzlich maximiert (je höher, desto besser). Ein RMSE ist aber umso besser, je näher er an 0 liegt. Durch das Vorzeichen wird "näher an 0" zum "grösseren" (weniger negativen) Wert - so passt es zur Maximierungslogik.
Tipp: Ein negativer RMSE von -3.2 ist besser als -5.0, weil -3.2 näher an 0 liegt. Beim Auswerten interessiert oft der Betrag.
Siehe EKI03.