Spaces:
Sleeping
Sleeping
| from sklearn.ensemble import GradientBoostingClassifier | |
| import optuna | |
| from models.base_model import BaseModel | |
| from numpy import ndarray | |
| import numpy as np | |
| # === GradientBoosting Implementation === | |
| class GradientBoostingModel(BaseModel): | |
| def __init__(self) -> None: | |
| super().__init__() | |
| def objective( | |
| self, | |
| trial: optuna.trial.Trial, | |
| X_train: ndarray, | |
| y_train: ndarray, | |
| X_val: ndarray, | |
| y_val: ndarray | |
| ) -> float: | |
| params = { | |
| "learning_rate": trial.suggest_float("learning_rate", 1e-3, 0.3, log=True), | |
| "max_depth": trial.suggest_int("max_depth", 3, 10), | |
| "n_estimators": trial.suggest_int("n_estimators", 100, 1000), | |
| "subsample": trial.suggest_float("subsample", 0.5, 1.0), | |
| } | |
| model = GradientBoostingClassifier(**params) | |
| model.fit(X_train, y_train) | |
| return model.score(X_val, y_val) | |
| def train( | |
| self, | |
| X_train: ndarray, | |
| y_train: ndarray, | |
| X_val: ndarray, | |
| y_val: ndarray, | |
| use_optuna: bool = False, | |
| n_trials: int = 20 | |
| ) -> None: | |
| if use_optuna: | |
| study = optuna.create_study(direction="maximize") | |
| study.optimize(lambda trial: self.objective(trial, X_train, y_train, X_val, y_val), n_trials=n_trials, n_jobs=-1) | |
| self.best_params = study.best_params | |
| self.model = GradientBoostingClassifier(**self.best_params) | |
| else: | |
| self.model = GradientBoostingClassifier() | |
| X, y = np.vstack([X_train, X_val]), np.hstack([y_train, y_val]) | |
| self.model.fit(X, y) | |