Bilgili Yöntemler: Bayesçi İstatistik

Python'da Hiperparametre Ayarlama

Alex Scriven

Data Scientist

Bayes’e Giriş

 

Bayes Kuralı:

Yeni kanıtları kullanarak bir sonuca dair inançlarımızı yinelemeli olarak güncelleyen istatistiksel yöntem

  • Doğal olarak bilgili arama fikriyle örtüşür. Kanıt geldikçe daha iyi hale gelir.
Python'da Hiperparametre Ayarlama

Bayes Kuralı

Bayes Kuralı şu biçimdedir:

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

  • Sol taraf: B gerçekleştiğinde A’nın olasılığı. B yeni bir kanıttır.

    • Buna “artıl” (posterior) denir
  • Sağ taraf bunu nasıl hesapladığımızdır.

  • P(A) “öncel” (prior)’dir. Olayla ilgili ilk varsayım. P(A|B)’den farklıdır; P(A|B) yeni kanıt verildiğindeki olasılıktır.
Python'da Hiperparametre Ayarlama

Bayes Kuralı

 

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

  • P(B) “marjinal olabilirlik”tir; bu yeni kanıtı gözlemleme olasılığıdır
  • P(B|A) “olabilirlik”tir; ilgilendiğimiz olay verildiğinde kanıtı gözlemleme olasılığıdır

Bu kafa karıştırıcı olabilir; bunu göstermek için yaygın bir tıbbi tanı örneği kullanalım.

Python'da Hiperparametre Ayarlama

Tıpta Bayes

 

Tıbbi bir örnek:

  • Genel popülasyonun %5’inde belirli bir hastalık var
    • P(D)
  • İnsanların %10’u yatkın (predisposed)
    • P(Pre)
  • Hastalığı olanların %20’si yatkın
    • P(Pre|D)
Python'da Hiperparametre Ayarlama

Tıpta Bayes

Herhangi bir kişinin hastalığa sahip olma olasılığı nedir?

$$ P(D) = 0.05 $$

Bu, kanıt olmadan yalnızca öncelimizdir.

Yatkın bir kişinin hastalığa sahip olma olasılığı nedir?

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

Python'da Hiperparametre Ayarlama

Hiperparametre Ayarlamada Bayes

Bu mantığı hiperparametre ayarlamaya uygulayabiliriz:

  • Bir hiperparametre kombinasyonu seçin
  • Bir model kurun
  • Yeni kanıt elde edin (modelin skoru)
  • İnancınızı güncelleyin ve bir sonraki turda daha iyi hiperparametreler seçin

Bayesçi hiperparametre ayarlama yeni olsa da, büyük ve karmaşık ayarlama görevlerinde en iyi kombinasyonları bulmada etkili olduğu için popülerdir

Python'da Hiperparametre Ayarlama

Hyperopt ile Bayesçi Hiperparametre Ayarlama

 

Hyperopt paketine giriş.

Bayesçi hiperparametre ayarlaması için yapacaklarımız:

  1. Alanı belirleyin: Izgara (küçük bir farkla)
  2. Optimizasyon algoritmasını belirleyin (varsayılan TPE)
  3. Minimize edilecek amaç fonksiyonu: 1-Accuracy kullanacağız
Python'da Hiperparametre Ayarlama

Hyperopt: Alanı (ızgarayı) belirleyin

Izgarayı tanımlamak için birçok seçenek:

  • Basit sayılar
  • Listeden seçim
  • Değer dağılımı

Hyperopt ızgarada nokta değerleri değil, her nokta için hiperparametre değerlerine ait olasılıklar kullanır.

Basit bir uniform dağılım kullanacağız; daha fazlası için belgelere bakınız.

Python'da Hiperparametre Ayarlama

Alan

 

Izgarayı kurun:

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),
}
Python'da Hiperparametre Ayarlama

Amaç fonksiyonu

Amaç fonksiyonu algoritmayı çalıştırır:

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
Python'da Hiperparametre Ayarlama

Algoritmayı çalıştırın

 

Algoritmayı çalıştırın:

best_result = fmin(
            fn=objective,
            space=space,
            max_evals=500, 
            rstate=np.random.default_rng(42),
            algo=tpe.suggest)
Python'da Hiperparametre Ayarlama

Haydi pratik yapalım!

Python'da Hiperparametre Ayarlama

Preparing Video For Download...