Metode informate: Statistică bayesiană

Ajustarea hiperparametrilor în Python

Alex Scriven

Data Scientist

Introducere în Bayes

 

Regula lui Bayes:

O metodă statistică de utilizare a noilor dovezi pentru actualizarea iterativă a convingerilor despre un anumit rezultat

  • Se potrivește intuitiv cu ideea de căutare informată. Rezultatele se îmbunătățesc pe măsură ce acumulăm dovezi.
Ajustarea hiperparametrilor în Python

Regula lui Bayes

Regula lui Bayes are forma:

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

  • Membrul stâng = probabilitatea lui A, dat fiind că B s-a produs. B este o nouă dovadă.

    • Aceasta se numește „posterior"
  • Membrul drept arată cum se calculează aceasta.

  • P(A) este „priorul". Ipoteza inițială despre eveniment. Diferă de P(A|B), care este probabilitatea în prezența noilor dovezi.
Ajustarea hiperparametrilor în Python

Regula lui Bayes

 

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

  • P(B) este „verosimilitatea marginală" — probabilitatea de a observa noile dovezi
  • P(B|A) este „verosimilitatea" — probabilitatea de a observa dovezile, dat fiind evenimentul de interes.

Poate părea complex, dar vom folosi un exemplu clasic de diagnostic medical pentru ilustrare.

Ajustarea hiperparametrilor în Python

Bayes în medicină

 

Un exemplu medical:

  • 5% din populația generală suferă de o anumită boală
    • P(B)
  • 10% din persoane au predispoziție
    • P(Pre)
  • 20% din persoanele bolnave au predispoziție
    • P(Pre|B)
Ajustarea hiperparametrilor în Python

Bayes în medicină

Care este probabilitatea că o persoană oarecare are boala?

$$ P(D) = 0.05 $$

Acesta este pur și simplu priorul nostru, fără nicio dovadă.

Care este probabilitatea că o persoană predispusă are boala?

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

Ajustarea hiperparametrilor în Python

Bayes în ajustarea hiperparametrilor

Putem aplica această logică la ajustarea hiperparametrilor:

  • Alegem o combinație de hiperparametri
  • Construim un model
  • Obținem noi dovezi (scorul modelului)
  • Actualizăm convingerile și alegem hiperparametri mai buni în runda următoare

Ajustarea bayesiană a hiperparametrilor este relativ nouă, dar populară pentru sarcini complexe, deoarece funcționează bine la identificarea combinațiilor optime

Ajustarea hiperparametrilor în Python

Ajustare bayesiană a hiperparametrilor cu Hyperopt

 

Introducere în pachetul Hyperopt.

Pentru ajustarea bayesiană a hiperparametrilor avem nevoie de:

  1. Definirea domeniului: Grila noastră (cu o mică modificare)
  2. Algoritmul de optimizare (se folosește implicit TPE)
  3. Funcția obiectiv de minimizat: vom folosi 1-Acuratețe
Ajustarea hiperparametrilor în Python

Hyperopt: Definirea domeniului (grilei)

Opțiuni pentru definirea grilei:

  • Valori simple
  • Selectare dintr-o listă
  • Distribuție de valori

Hyperopt nu folosește valori punctuale în grilă, ci fiecare punct reprezintă probabilități pentru fiecare valoare a hiperparametrului.

Vom folosi o distribuție uniformă simplă, dar există mai multe opțiuni în documentație.

Ajustarea hiperparametrilor în Python

Domeniul

 

Definirea grilei:

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),
}
Ajustarea hiperparametrilor în Python

Funcția obiectiv

Funcția obiectiv rulează algoritmul:

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
Ajustarea hiperparametrilor în Python

Rularea algoritmului

 

Rularea algoritmului:

best_result = fmin(
            fn=objective,
            space=space,
            max_evals=500, 
            rstate=np.random.default_rng(42),
            algo=tpe.suggest)
Ajustarea hiperparametrilor în Python

Să exersăm!

Ajustarea hiperparametrilor în Python

Preparing Video For Download...