Hyperparameterjustering i Python
Alex Scriven
Data Scientist
Bayes sats:
En statistisk metod där ny evidens används för att iterativt uppdatera våra uppfattningar om ett visst utfall
Bayes sats har formen:
$$ P(A \mid B) = \frac{P(B \mid A) \, P(A)}{P(B)} $$
VL = sannolikheten för A, givet att B har inträffat. B är ny evidens.
HL visar hur vi beräknar detta.
$$ P(A \mid B) = \frac{P(B \mid A) \, P(A)}{P(B)} $$
Detta kan verka förvirrande, men låt oss använda ett vanligt exempel med medicinsk diagnos för att illustrera.
Ett medicinskt exempel:
Vad är sannolikheten att en slumpmässig person har sjukdomen?
$$ P(D) = 0.05 $$
Detta är helt enkelt vår prior – vi har ingen evidens.
Vad är sannolikheten att en predisponerad person har sjukdomen?
$$ P(D \mid Pre) = \frac{P(Pre \mid D) \, P(D)}{P(pre)} $$
$$ P(D \mid Pre) = \frac{0.2 \, * 0.05}{0.1} = 0.1 $$
Vi kan tillämpa samma logik på hyperparameterjustering:
Bayesiansk hyperparameterjustering är relativt ny men populär för större och mer komplexa uppgifter, där den är effektiv för att hitta optimala hyperparameterkombinationer
Introduktion till paketet Hyperopt.
För bayesiansk hyperparameterjustering behöver vi:
Många alternativ för att definiera rutnätet:
Hyperopt använder inte punktvärden i rutnätet – varje punkt representerar istället sannolikheter för varje hyperparametervärde.
Vi använder en enkel likformig fördelning, men det finns många fler i dokumentationen.
Definiera rutnätet:
space = {
'max_depth': hp.quniform('max_depth', 2, 10, 2),
'min_samples_leaf': hp.quniform('min_samples_leaf', 2, 8, 2),
'learning_rate': hp.uniform('learning_rate', 0.01, 1, 55),
}
Målfunktionen kör algoritmen:
def objective(params): params = {'max_depth': int(params['max_depth']), 'min_samples_leaf': int(params['min_samples_leaf']), 'learning_rate': params['learning_rate']} gbm_clf = GradientBoostingClassifier(n_estimators=500, **params)best_score = cross_val_score(gbm_clf, X_train, y_train, scoring='accuracy', cv=10, n_jobs=4).mean() loss = 1 - best_scorewrite_results(best_score, params, iteration) return loss
Kör algoritmen:
best_result = fmin(
fn=objective,
space=space,
max_evals=500,
rstate=np.random.default_rng(42),
algo=tpe.suggest)
Hyperparameterjustering i Python