Informované metody: Bayesovská statistika

Hyperparameter Tuning in Python

Alex Scriven

Data Scientist

Úvod do Bayese

 

Bayesovo pravidlo:

Statistická metoda využívající nové důkazy k iterativní aktualizaci našich přesvědčení o nějakém výsledku

  • Intuitivně odpovídá myšlence informovaného hledání – zlepšujeme se s každým novým důkazem.
Hyperparameter Tuning in Python

Bayesovo pravidlo

Bayesovo pravidlo má tvar:

$$ P(A \mid B) = \frac{P(B \mid A) \, P(A)}{P(B)} $$

  • Levá strana = pravděpodobnost A za předpokladu, že nastalo B. B je nový důkaz.

    • Nazývá se „posteriorní pravděpodobnost"
  • Pravá strana udává způsob výpočtu.

  • P(A) je „prior" – počáteční hypotéza o události. Liší se od P(A|B), které vyjadřuje pravděpodobnost za přítomnosti nového důkazu.
Hyperparameter Tuning in Python

Bayesovo pravidlo

 

$$ P(A \mid B) = \frac{P(B \mid A) \, P(A)}{P(B)} $$

  • P(B) je „marginální věrohodnost" – pravděpodobnost pozorování nového důkazu
  • P(B|A) je „věrohodnost" – pravděpodobnost pozorování důkazu za předpokladu námi sledované události.

Může to být matoucí – ukážeme si to na klasickém příkladu lékařské diagnózy.

Hyperparameter Tuning in Python

Bayes v medicíně

 

Lékařský příklad:

  • 5 % lidí v obecné populaci má určitou nemoc
    • P(D)
  • 10 % lidí má predispozici
    • P(Pre)
  • 20 % nemocných má predispozici
    • P(Pre|D)
Hyperparameter Tuning in Python

Bayes v medicíně

Jaká je pravděpodobnost, že daná osoba má nemoc?

$$ P(D) = 0.05 $$

Toto je náš prior – nemáme žádný důkaz.

Jaká je pravděpodobnost, že nemoc má predisponovaná osoba?

$$ 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 $$

Hyperparameter Tuning in Python

Bayes při ladění hyperparametrů

Tuto logiku můžeme aplikovat na ladění hyperparametrů:

  • Zvolíme kombinaci hyperparametrů
  • Sestavíme model
  • Získáme nové důkazy (skóre modelu)
  • Aktualizujeme přesvědčení a zvolíme lepší hyperparametry

Bayesovské ladění hyperparametrů je poměrně nové, ale oblíbené pro složitější úlohy, kde dobře nachází optimální kombinace hyperparametrů

Hyperparameter Tuning in Python

Bayesovské ladění hyperparametrů s Hyperopt

 

Představujeme balíček Hyperopt.

Pro bayesovské ladění hyperparametrů potřebujeme:

  1. Definovat doménu: Naši mřížku (s drobným rozdílem)
  2. Zvolit optimalizační algoritmus (výchozí TPE)
  3. Účelovou funkci k minimalizaci: použijeme 1 − přesnost
Hyperparameter Tuning in Python

Hyperopt: Definice domény (mřížky)

Mnoho možností definice mřížky:

  • Konkrétní čísla
  • Výběr ze seznamu
  • Rozdělení hodnot

Hyperopt nepoužívá bodové hodnoty mřížky – každý bod reprezentuje pravděpodobnosti pro každou hodnotu hyperparametru.

Použijeme jednoduché rovnoměrné rozdělení, ale v dokumentaci najdete mnoho dalších.

Hyperparameter Tuning in Python

Doména

 

Definice mřížky:

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),
}
Hyperparameter Tuning in Python

Účelová funkce

Účelová funkce spouští algoritmus:

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_score
write_results(best_score, params, iteration) return loss
Hyperparameter Tuning in Python

Spuštění algoritmu

 

Spuštění algoritmu:

best_result = fmin(
            fn=objective,
            space=space,
            max_evals=500, 
            rstate=np.random.default_rng(42),
            algo=tpe.suggest)
Hyperparameter Tuning in Python

Pojďme si procvičit!

Hyperparameter Tuning in Python

Preparing Video For Download...