Informed Methods: Bayesian Statistics

Python में Hyperparameter Tuning

Alex Scriven

Data Scientist

Bayes परिचय

 

Bayes Rule:

एक सांख्यिकीय तरीका जिसमें नए सबूत से किसी परिणाम के बारे में हमारी धारणाएँ चरणबद्ध रूप से अपडेट होती हैं

  • यह informed search के विचार से सहज मेल खाता है. जितने अधिक सबूत, उतना बेहतर.
Python में Hyperparameter Tuning

Bayes Rule

Bayes Rule का रूप:

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

  • LHS = B होने पर A की probability. B नया evidence है.

    • इसे 'posterior' कहते हैं
  • RHS बताता है इसे कैसे गणना करें.

  • P(A) 'prior' है. घटना पर शुरुआती परिकल्पना. यह P(A|B) से अलग है; P(A|B) नया evidence मिलने पर probability है.
Python में Hyperparameter Tuning

Bayes Rule

 

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

  • P(B) 'marginal likelihood' है, यानी इस नए evidence को देखने की probability
  • P(B|A) 'likelihood' है, यानी मनचाही घटना होने पर evidence देखने की probability

यह थोड़ा उलझा लग सकता है, पर एक सामान्य medical diagnosis उदाहरण से समझते हैं.

Python में Hyperparameter Tuning

Bayes in Medicine

 

एक medical उदाहरण:

  • सामान्य आबादी में 5% लोगों को यह disease है
    • P(D)
  • 10% लोग predisposed हैं
    • P(Pre)
  • disease वाले 20% लोग predisposed हैं
    • P(Pre|D)
Python में Hyperparameter Tuning

Bayes in Medicine

किसी भी व्यक्ति के पास disease होने की probability क्या है?

$$ P(D) = 0.05 $$

यह हमारा prior है क्योंकि अभी कोई evidence नहीं है.

किसी predisposed व्यक्ति के पास disease होने की probability क्या है?

$$ 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 में Hyperparameter Tuning

Bayes in Hyperparameter Tuning

हम इसी लॉजिक को hyperparameter tuning पर लागू कर सकते हैं:

  • एक hyperparameter combination चुनें
  • एक मॉडल बनाएं
  • नया evidence लें (मॉडल का score)
  • अपनी धारणाएँ अपडेट करें और अगले राउंड में बेहतर hyperparameters चुनें

Bayesian hyperparameter tuning नया है पर बड़े और जटिल tuning कार्यों में काफ़ी लोकप्रिय है, क्योंकि यह ऐसे मामलों में optimal combinations अच्छी तरह ढूँढ लेता है.

Python में Hyperparameter Tuning

Hyperopt के साथ Bayesian Hyperparameter Tuning

 

Hyperopt पैकेज से परिचय.

Bayesian hyperparameter tuning के लिए हमें चाहिए:

  1. Domain सेट करें: हमारा grid (थोड़े ट्विस्ट के साथ)
  2. Optimization algorithm सेट करें (डिफ़ॉल्ट TPE)
  3. Minimize करने के लिए objective function: हम 1-Accuracy लेंगे
Python में Hyperparameter Tuning

Hyperopt: Domain (grid) सेट करें

Grid सेट करने के कई तरीके:

  • Simple numbers
  • सूची में से चुनें
  • मानों का distribution

Hyperopt grid पर point values नहीं लेता; हर point, हर hyperparameter मान के लिए probabilities दर्शाता है.

हम simple uniform distribution लेंगे, पर documentation में और भी कई विकल्प हैं.

Python में Hyperparameter Tuning

The Domain

 

Grid सेटअप करें:

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 में Hyperparameter Tuning

Objective function

Objective function एल्गोरिदम चलाती है:

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 में Hyperparameter Tuning

एल्गोरिदम चलाएँ

 

एल्गोरिदम चलाएँ:

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

अभ्यास करते हैं!

Python में Hyperparameter Tuning

Preparing Video For Download...