Python में Hyperparameter Tuning
Alex Scriven
Data Scientist
Bayes Rule:
एक सांख्यिकीय तरीका जिसमें नए सबूत से किसी परिणाम के बारे में हमारी धारणाएँ चरणबद्ध रूप से अपडेट होती हैं
Bayes Rule का रूप:
$$ P(A \mid B) = \frac{P(B \mid A) \, P(A)}{P(B)} $$
LHS = B होने पर A की probability. B नया evidence है.
RHS बताता है इसे कैसे गणना करें.
$$ P(A \mid B) = \frac{P(B \mid A) \, P(A)}{P(B)} $$
यह थोड़ा उलझा लग सकता है, पर एक सामान्य medical diagnosis उदाहरण से समझते हैं.
एक medical उदाहरण:
किसी भी व्यक्ति के पास 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 $$
हम इसी लॉजिक को hyperparameter tuning पर लागू कर सकते हैं:
Bayesian hyperparameter tuning नया है पर बड़े और जटिल tuning कार्यों में काफ़ी लोकप्रिय है, क्योंकि यह ऐसे मामलों में optimal combinations अच्छी तरह ढूँढ लेता है.
Hyperopt पैकेज से परिचय.
Bayesian hyperparameter tuning के लिए हमें चाहिए:
Grid सेट करने के कई तरीके:
Hyperopt grid पर point values नहीं लेता; हर point, हर hyperparameter मान के लिए probabilities दर्शाता है.
हम simple uniform distribution लेंगे, पर documentation में और भी कई विकल्प हैं.
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),
}
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_scorewrite_results(best_score, params, iteration) return loss
एल्गोरिदम चलाएँ:
best_result = fmin(
fn=objective,
space=space,
max_evals=500,
rstate=np.random.default_rng(42),
algo=tpe.suggest)
Python में Hyperparameter Tuning