E· Universitetklassisk-ml· ca 60 min· utvecklande· verifierad 2026-09-20
Hyperparametersökning
Kunna söka hyperparametrar systematiskt (grid, random, bayesiansk) utan att läcka testdata.
Förkunskaper
- DKorsvalideringkrävs
Intuition
| Metod | Hur | När |
|---|---|---|
| Grid search | alla kombinationer i ett rutnät | få parametrar (≤ 3), diskreta värden |
| Random search | slumpa i angivna intervall | standardvalet vid fler parametrar |
| Bayesiansk (TPE, GP) | modellera ytan, välj nästa punkt smart | dyra utvärderingar, många försök |
| Hyperband / ASHA | starta många, döda de dåliga tidigt | djupinlärning, där träning är dyr |
Varför random slår grid (Bergstra & Bengio 2012): oftast är bara ett par parametrar viktiga. Ett rutnät med 5 värden per parameter provar bara 5 olika värden på den viktiga parametern, oavsett hur många punkter du kör. Random search provar lika många olika värden som du har försök.
Sök i rätt skala: inlärningstakt och regulariseringsstyrka ska sökas logaritmiskt (1e-5 till 1e-1), inte linjärt.
Kod
import numpy as np
from sklearn.model_selection import RandomizedSearchCV, GroupKFold
from scipy.stats import loguniform, randint
rum = {
"svc__C": loguniform(1e-2, 1e3), # log-skala
"svc__gamma": loguniform(1e-4, 1e0), # log-skala
"svc__degree": randint(2, 5),
}
sok = RandomizedSearchCV(pipe, rum, n_iter=60, cv=GroupKFold(5),
scoring="f1_macro", random_state=0, n_jobs=-1, refit=True)
sok.fit(X_tr, y_tr, groups=grupp_tr)
print(sok.best_params_, round(sok.best_score_, 3))
# Testmängden rörs FÖRST här, en enda gång
print("test:", round(sok.best_estimator_.score(X_test, y_test), 3))
Tre regler som avgör om resultatet är ärligt:
- Sök aldrig mot testdata. Använd korsvalidering på träningsdatan; testet körs en gång, sist.
- Rapportera hur många konfigurationer du provade. Med 100 försök är bästa resultatet optimistiskt — det är samma problem som multipla jämförelser.
- Vid nästlad utvärdering: yttre loop för skattningen, inre för sökningen. Utan det är även korsvalideringsscoret optimistiskt.
Optuna ger bayesiansk sökning och pruning (avbryter dåliga försök tidigt) med några rader — värt det så fort en körning tar mer än några minuter.
Behärskning innebär
- Söker hyperparametrar systematiskt
- Väljer mellan grid, random och bayesiansk sökning
- Undviker läckage av testdata
Logga in för att göra övningarna och bygga upp din behärskning.