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-Ausgabewarm_start— Workflow-Schalter für inkrementelles Fittenoob_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.