Tuning bayesiano degli iperparametri con Hyperopt
In questo esempio imposterai ed eseguirai un processo di ottimizzazione bayesiana degli iperparametri usando il pacchetto Hyperopt (già importato come hp). Imposterai il dominio (simile all'impostazione della griglia in una grid search), poi definirai la funzione obiettivo. Infine, eseguirai l'ottimizzatore per 20 iterazioni.
Dovrai definire il dominio usando i valori:
max_depthusando una distribuzione quniform (tra 2 e 10, con passo 2)learning_rateusando una distribuzione uniform (da 0.001 a 0.9)
Nota che, per questo esercizio, il processo è stato ridotto nella dimensione del campione di dati e nelle iterazioni di hyperopt e del GBM. Se provi questo metodo in autonomia sulla tua macchina, usa uno spazio di ricerca più ampio, più prove, più CV e un insieme di dati più grande per vederlo davvero all'opera!
Questo esercizio fa parte del corso
Ottimizzazione degli iperparametri in Python
Istruzioni dell'esercizio
- Definisci un dizionario
spaceusando il dominio indicato sopra. - Definisci la funzione obiettivo usando un classificatore gradient boosting.
- Esegui l'algoritmo per 20 valutazioni (usa semplicemente l'algoritmo predefinito consigliato nelle diapositive).
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# Set up space dictionary with specified hyperparameters
space = {'max_depth': hp.____('max_depth', ____, ____, ____),'learning_rate': hp.____('learning_rate', ____,____)}
# Set up objective function
def objective(params):
params = {'max_depth': int(params[____]),'learning_rate': params[____]}
gbm_clf = ____(n_estimators=100, **params)
best_score = cross_val_score(gbm_clf, X_train, y_train, scoring='accuracy', cv=2, n_jobs=4).mean()
loss = 1 - ____
return ____
# Run the algorithm
best = fmin(fn=____,space=space, max_evals=____, rstate=np.random.default_rng(42), algo=tpe.suggest)
print(____)