This repository has been archived on 2026-06-23. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
cas-pml/SL/aufgaben/template/4_WS/Loesungen/WS 14 Loesung.ipynb
T
2026-05-21 14:16:30 +02:00

5.1 KiB

WS 14 Random Search CV

  • untersuchen Sie Kombinationen von Parameterwerten bei RandomForestClassifier
  • Vorschlag:
    • n_estimators in [50, 100, 150, 200]
    • max_features in [3, 5, 7, 9]
    • criterion in ['gini', 'entropy']
    • min_samples_leaf in [1, 2, 3, 4]
  • wenden Sie 5-fach Kreuzvalidierung an
  • setzen Sie die Anzahl der zu untersuchenden Kombinationen auf 12
  • arbeiten Sie ohne setzen von random_state, damit anschliessend die Ergebnisse verglichen werden können
In [3]:
## import libraries
import pandas as pd
import numpy as np

## load data
datapath = '../../3_data'
from os import chdir; chdir(datapath)
bank_df = pd.read_csv('bank_data_prep.csv')

## features - target - split
X = bank_df.drop('y', axis=1)
y = bank_df['y']
In [4]:
%%time
## import classes from sklearn
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import RandomizedSearchCV

## define parameter grid
parameter_grid = {'n_estimators': [50, 100, 150, 200],
                  'max_features': [3, 5, 7, 9],
                  'criterion': ['gini', 'entropy'],
                  'min_samples_leaf': [1, 2, 3, 4]}

## define RandomizedSearchCV
rscv = RandomizedSearchCV(
    estimator=RandomForestClassifier(random_state=1234), 
    param_distributions=parameter_grid, 
    cv=5,
    n_iter=12,
    random_state=1234,
    n_jobs=-1)

## run RandomizedSearchCV
rscv.fit(X, y)

## evaluate RandomizedSearchCV
print('best_params_ :', rscv.best_params_)
print('best_score_  :', rscv.best_score_)
best_params_ : {'n_estimators': 50, 'min_samples_leaf': 4, 'max_features': 9, 'criterion': 'entropy'}
best_score_  : 0.8884381338742393
CPU times: total: 3.09 s
Wall time: 43.6 s
In [5]:
#rscv.best_estimator_
In [6]:
X.shape
Out [6]:
(9860, 29)

Fazit:

  • n_estimators: [50, 100, 150, 200] -> 50
    • hier müsste der Suchbereich nach unten erweiter werden
  • max_features: [3, 5, 7, 9] -> 9
    • hier müsste der Suchbereich nach oben erweiter werden
  • criterion: ['gini', 'entropy']
    • Suchbereich ok
  • min_samples_leaf: [1, 2, 3, 4] -> 4
    • hier müsste der Suchbereich nach oben erweiter werden