Source code for routee.powertrain.trainers.ngboost_trainer

import numpy as np
import pandas as pd

from ngboost import NGBRegressor
from ngboost.distns import Normal


from routee.powertrain.core.model_config import ModelConfig
from routee.powertrain.estimators.estimator_interface import Estimator
from routee.powertrain.estimators.ngboost_estimator import NGBoostEstimator
from routee.powertrain.trainers.trainer import Trainer


[docs] class NGBoostTrainer(Trainer): architecture_tag: str = "ngboost" def __init__( self, n_estimators: int = 100, dist=Normal, verbose: bool = True, verbose_eval: int = 20, learning_rate: float = 0.01, random_state: int = 52, ): self.n_estimators = n_estimators self.dist = dist self.verbose = verbose self.verbose_eval = verbose_eval self.learning_rate = learning_rate self.random_state = random_state
[docs] def inner_train( self, features: pd.DataFrame, target: pd.DataFrame, config: ModelConfig, validation_features: pd.DataFrame | None = None, validation_target: pd.DataFrame | None = None, ) -> Estimator: """ Uses a ngboost model to predict the energy rate values """ ng = NGBRegressor( n_estimators=self.n_estimators, Dist=self.dist, verbose=self.verbose, verbose_eval=self.verbose_eval, random_state=self.random_state, learning_rate=self.learning_rate, ) X = features.values y: np.ndarray = target.values if y.shape[1] == 1: y = y.ravel() ng.fit(X, y) estimator = NGBoostEstimator(ng) return estimator