Ajustarea hiperparametrilor în Python
Alex Scriven
Data Scientist
Regula lui Bayes:
O metodă statistică de utilizare a noilor dovezi pentru actualizarea iterativă a convingerilor despre un anumit rezultat
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ă.
Membrul drept arată cum se calculează aceasta.
$$ P(A \mid B) = \frac{P(B \mid A) \, P(A)}{P(B)} $$
Poate părea complex, dar vom folosi un exemplu clasic de diagnostic medical pentru ilustrare.
Un exemplu medical:
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 $$
Putem aplica această logică la ajustarea hiperparametrilor:
Ajustarea bayesiană a hiperparametrilor este relativ nouă, dar populară pentru sarcini complexe, deoarece funcționează bine la identificarea combinațiilor optime
Introducere în pachetul Hyperopt.
Pentru ajustarea bayesiană a hiperparametrilor avem nevoie de:
Opțiuni pentru definirea grilei:
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.
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),
}
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_scorewrite_results(best_score, params, iteration) return loss
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