Files

Workshop 06 — RandomForestClassifier: Parameter Tuning

Aufgabe

Drei Tuning-Parameter des RandomForestClassifier auf die erreichte Accuracy untersuchen (vorbereiteter Bank-Datensatz, identisch zu WS5), je über einen vorgegebenen Wertebereich:

Parameter Wertebereich Typ
n_estimators range(100, 500, 50) int
max_features range(1, 11) int
min_impurity_decrease np.arange(0, 0.1, 0.01) float

Zusätzlich: Wirkung von random_state einordnen, und (Zusatzfrage) bestimmen, welche der übrigen Parameter keine Tuning-Parameter sind.

Vorgehen

Wiederverwendung des Sweep-/Plot-Gerüsts aus WS5. Die einzige Anpassung war die Generalisierung der Sweep-Funktion auf einen frei wählbaren Parameternamen (set_params per dict-Unpacking), womit sich alle drei Parameter mit derselben Funktion abdecken lassen. Jeder Sweep hält die übrigen Parameter auf den Defaults und variiert nur den untersuchten.

Pro Sweep: Liniendiagramm (Parameter vs. Accuracy) mit markiertem Maximum sowie Konsolenausgabe von bestem Score und zugehörigem Parameterwert.

n_jobs=-1 gesetzt — bei bis zu 450 Bäumen pro Fit und mehreren Fits pro Sweep ist die Parallelisierung über alle Cores hier praktisch zwingend, nicht optional. n_jobs ist dabei reiner Performance-Schalter ohne Einfluss auf das Resultat.

Resultate

Parameter bester Score bei Wert
n_estimators 0.8792 400
max_features 0.8780 6
min_impurity_decrease 0.8750 0.0

Interpretation der einzelnen Verläufe:

n_estimators — die Kurve bewegt sich über den gesamten Bereich nur zwischen 0.875 und 0.879. Diese Schwankung liegt im Bereich des Seed-Rauschens und ist kein echtes Optimum. Die belastbare Aussage lautet: Plateau ab ~150 Bäumen, danach reine Rechenzeit ohne Mehrwert. Der nominelle „Peak" bei 400 ist nicht als optimaler Wert zu interpretieren.

max_features — hier liegt echtes Signal vor: Anstieg von ~0.857 (bei 1) auf ein breites Maximum ab ~4 Features. Der beste Wert (6) liegt nahe am sklearn-Default sqrt(n_features) für Klassifikation, was den Default bestätigt. Zu kleine Werte machen die einzelnen Bäume zu zufällig (Underfit); zu grosse Werte erhöhen die Korrelation zwischen den Bäumen und schmälern den Ensemble-Vorteil.

min_impurity_decrease — bestes Resultat bei 0 (kein Pruning), danach monotoner Abfall auf ein Plateau bei ~0.757. Das ist das aufschlussreichste Ergebnis des Workshops und der direkte Kontrast zu WS5: beim einzelnen DecisionTree hat Pre-Pruning das Overfitting reduziert und die Test-Accuracy verbessert. Beim Random Forest übernimmt das Bagging diese Varianzkontrolle bereits auf Ensemble-Ebene — Pruning der einzelnen Bäume nimmt ihnen die gewollte Varianz und kann die Accuracy daher praktisch nur verschlechtern.

Wirkung von random_state

Der Random Forest hat zwei Zufallsquellen: das Bootstrap-Sampling (welche Zeilen jeder Baum sieht) und die Random Feature Selection (welche Features pro Split zur Wahl stehen). random_state seedet beide und macht den Lauf reproduzierbar.

Der Effekt des konkreten Seeds nimmt mit steigendem n_estimators ab: bei wenig Bäumen schwankt die Accuracy je nach Seed merklich, bei vielen Bäumen mittelt sich das aus. Ein Teil der Zacken im n_estimators-Verlauf ist genau diese Seed-Variation und nicht echtes Signal — siehe Interpretation oben.

Zusatzfrage: Nicht-Tuning-Parameter

Kriterium: ein Tuning-Parameter verschiebt den Bias-Varianz-Tradeoff bzw. die Kapazität des Modells. Parameter, die nur Infrastruktur, Reproduzierbarkeit, Logging, Workflow oder Reporting steuern, sind keine Tuning-Parameter. Aus model.get_params() betrifft das:

  • random_state — Seed (Reproduzierbarkeit)
  • n_jobs — Parallelisierung (Performance)
  • verbose — Logging-Ausgabe
  • warm_start — Workflow-Schalter für inkrementelles Fitten
  • oob_score — schaltet nur die Out-of-Bag-Schätzung als Reporting an, ändert das gefittete Modell nicht

Grenzfälle wie bootstrap, class_weight oder max_samples beeinflussen das Modell hingegen sehr wohl und zählen damit zu den Tuning-Parametern.

Caveats / Deviations

  • One-at-a-time-Tuning: jeder Parameter wurde einzeln bei Defaults der übrigen variiert. Damit werden Wechselwirkungen zwischen Parametern nicht erfasst; das gemeinsame Optimum kann von der Kombination der drei Einzelbestwerte abweichen. Eine gemeinsame Suche (GridSearchCV, vgl. WS4) wäre dafür das richtige Werkzeug.
  • Optimistic Bias: wie in WS4/WS5 wird direkt gegen das Test-Set getunt. Die berichteten Bestwerte sind dadurch optimistisch verzerrt; sauber wäre ein Validierungs-Split bzw. Cross-Validation.