class Objective: estimators = ( LogisticRegression, SGDClassifier, GaussianNB, RandomForestClassifier, HistGradientBoostingClassifier ) def __init__(self, estimator, X, y): self.model = estimator self.X = X self.y = y def __call__(self, trial): if isinstance(self.model, LogisticRegression): search_space = dict( class_weight = 'balanced', C = trial.suggest_float('C', 0.01, 100.0, log=True), l1_ratio = trial.suggest_float('l1_ratio', 0.0, 1.0) ) elif isinstance(self.model, SGDClassifier): search_space = dict( class_weight = 'balanced', loss = trial.suggest_categorical('loss', ['hinge', 'log_loss', 'modified_huber']), alpha = trial.suggest_float('alpha', 1e-5, 10.0, log=True), penalty = 'elasticnet', l1_ratio = trial.suggest_float('l1_ratio', 0.0, 1.0), early_stopping = True ) elif isinstance(self.model, GaussianNB): search_space = dict( priors = None ) elif isinstance(self.model, RandomForestClassifier): search_space = dict( class_weight = 'balanced', n_estimators = trial.suggest_int('n_estimators', 50, 500, step=50), max_depth = trial.suggest_int('max_depth', 2, 20), max_features = trial.suggest_float('max_features', 0.2, 0.9), random_state = SEED ) elif isinstance(self.model, HistGradientBoostingClassifier): search_space = dict( class_weight = 'balanced', learning_rate = trial.suggest_float('learning_rate', 1e-3, 10.0, log=True), max_iter = trial.suggest_int('max_iter', 50, 500, step=50), max_depth = trial.suggest_int('max_depth', 2, 20), max_features = trial.suggest_float('max_features', 0.2, 0.9), l2_regularization = trial.suggest_float('l2_regularization', 1e-3, 10.0, log=True), random_state = SEED, verbose = 0 ) self.model.set_params(**search_space) score = evaluate(self.model, self.X, self.y) return score
|