def test_handling_alias_metrics(): # type: () -> None for alias in [ "lambdarank", "rank_xendcg", "xendcg", "xe_ndcg", "xe_ndcg_mart", "xendcg_mart", "ndcg", ]: lgbm_params = {"metric": alias} _handling_alias_metrics(lgbm_params) assert lgbm_params["metric"] == "ndcg" for alias in ["mean_average_precision", "map"]: lgbm_params = {"metric": alias} _handling_alias_metrics(lgbm_params) assert lgbm_params["metric"] == "map" lgbm_params = {} _handling_alias_metrics(lgbm_params) assert lgbm_params == {} lgbm_params = {"metric": "auc"} _handling_alias_metrics(lgbm_params) assert lgbm_params["metric"] == "auc" lgbm_params = {"metric": "rmse"} _handling_alias_metrics(lgbm_params) assert lgbm_params["metric"] == "rmse"
def test_handling_alias_metrics(): # type: () -> None for alias in [ 'lambdarank', 'rank_xendcg', 'xendcg', 'xe_ndcg', 'xe_ndcg_mart', 'xendcg_mart', 'ndcg' ]: lgbm_params = {'metric': alias} _handling_alias_metrics(lgbm_params) assert lgbm_params['metric'] == 'ndcg' for alias in ['mean_average_precision', 'map']: lgbm_params = {'metric': alias} _handling_alias_metrics(lgbm_params) assert lgbm_params['metric'] == 'map' lgbm_params = {} _handling_alias_metrics(lgbm_params) assert lgbm_params == {} lgbm_params = {'metric': 'auc'} _handling_alias_metrics(lgbm_params) assert lgbm_params['metric'] == 'auc' lgbm_params = {'metric': 'rmse'} _handling_alias_metrics(lgbm_params) assert lgbm_params['metric'] == 'rmse'
def __init__( self, params, # type: Dict[str, Any] train_set, # type: lgb.Dataset num_boost_round=1000, # type: int valid_sets=None, # type: Optional[VALID_SET_TYPE] valid_names=None, # type: Optional[Any] fobj=None, # type: Optional[Callable[..., Any]] feval=None, # type: Optional[Callable[..., Any]] feature_name="auto", # type: str categorical_feature="auto", # type: str early_stopping_rounds=None, # type: Optional[int] evals_result=None, # type: Optional[Dict[Any, Any]] verbose_eval=True, # type: Optional[bool] learning_rates=None, # type: Optional[List[float]] keep_training_booster=False, # type: Optional[bool] callbacks=None, # type: Optional[List[Callable[..., Any]]] time_budget=None, # type: Optional[int] sample_size=None, # type: Optional[int] best_params=None, # type: Optional[Dict[str, Any]] tuning_history=None, # type: Optional[List[Dict[str, Any]]] verbosity=1, # type: Optional[int] ): params = copy.deepcopy(params) # Handling alias metrics. _handling_alias_metrics(params) args = [params, train_set] kwargs = dict( num_boost_round=num_boost_round, valid_sets=valid_sets, valid_names=valid_names, fobj=fobj, feval=feval, feature_name=feature_name, categorical_feature=categorical_feature, early_stopping_rounds=early_stopping_rounds, evals_result=evals_result, verbose_eval=verbose_eval, learning_rates=learning_rates, keep_training_booster=keep_training_booster, callbacks=callbacks, time_budget=time_budget, verbosity=verbosity, sample_size=sample_size, ) # type: Dict[str, Any] self._parse_args(*args, **kwargs) self.best_booster = None self.best_score = -np.inf if self.higher_is_better() else np.inf self.best_params = {} if best_params is None else best_params self.tuning_history = [] if tuning_history is None else tuning_history # Set default parameters as best. self.best_params.update(DEFAULT_LIGHTGBM_PARAMETERS) if valid_sets is None: raise ValueError("`valid_sets` is required.")
def __init__(self, lgbm_params=None, lgbm_kwargs=None): # type: (Dict[str, Any], Dict[str,Any]) -> None # Handling alias metrics. if lgbm_params is not None: _handling_alias_metrics(lgbm_params) self.lgbm_params = lgbm_params or {} self.lgbm_kwargs = lgbm_kwargs or {}
def __init__( self, params, # type: Dict[str, Any] train_set, # type: lgb.Dataset num_boost_round=1000, # type: int valid_sets=None, # type: Optional[VALID_SET_TYPE] valid_names=None, # type: Optional[Any] fobj=None, # type: Optional[Callable[..., Any]] feval=None, # type: Optional[Callable[..., Any]] feature_name="auto", # type: str categorical_feature="auto", # type: str early_stopping_rounds=None, # type: Optional[int] evals_result=None, # type: Optional[Dict[Any, Any]] verbose_eval=True, # type: Optional[bool] learning_rates=None, # type: Optional[List[float]] keep_training_booster=False, # type: Optional[bool] callbacks=None, # type: Optional[List[Callable[..., Any]]] time_budget=None, # type: Optional[int] sample_size=None, # type: Optional[int] best_params=None, # type: Optional[Dict[str, Any]] tuning_history=None, # type: Optional[List[Dict[str, Any]]] study=None, # type: Optional[Study] model_dir=None, # type: Optional[str] verbosity=1, # type: Optional[int] ): # type: (...) -> None params = copy.deepcopy(params) # Handling alias metrics. _handling_alias_metrics(params) args = [params, train_set] kwargs = dict( num_boost_round=num_boost_round, valid_sets=valid_sets, valid_names=valid_names, fobj=fobj, feval=feval, feature_name=feature_name, categorical_feature=categorical_feature, early_stopping_rounds=early_stopping_rounds, evals_result=evals_result, verbose_eval=verbose_eval, learning_rates=learning_rates, keep_training_booster=keep_training_booster, callbacks=callbacks, time_budget=time_budget, verbosity=verbosity, sample_size=sample_size, ) # type: Dict[str, Any] self._parse_args(*args, **kwargs) self._best_booster_with_trial_number = None # type: Optional[Tuple[lgb.Booster, int]] self._start_time = None # type: Optional[float] self._model_dir = model_dir if self._model_dir is not None and not os.path.exists(self._model_dir): os.mkdir(self._model_dir) if best_params is not None: warnings.warn( "The `best_params` argument is deprecated. " "Please get the parameter values via `lightgbm.basic.Booster.params`.", DeprecationWarning, ) if tuning_history is not None: warnings.warn( "The `tuning_history` argument is deprecated. " "Please use the `study` argument to access optimization history.", DeprecationWarning, ) self._best_params = {} if best_params is None else best_params self.tuning_history = [] if tuning_history is None else tuning_history # Set default parameters as best. self._best_params.update(DEFAULT_LIGHTGBM_PARAMETERS) if study is None: self.study = optuna.create_study( direction="maximize" if self.higher_is_better() else "minimize" ) else: self.study = study if self.higher_is_better(): if self.study.direction != optuna.study.StudyDirection.MAXIMIZE: metric_name = self.lgbm_params.get("metric", "binary_logloss") raise ValueError( "Study direction is inconsistent with the metric {}. " "Please set 'maximize' as the direction.".format(metric_name) ) else: if self.study.direction != optuna.study.StudyDirection.MINIMIZE: metric_name = self.lgbm_params.get("metric", "binary_logloss") raise ValueError( "Study direction is inconsistent with the metric {}. " "Please set 'minimize' as the direction.".format(metric_name) ) if valid_sets is None: raise ValueError("`valid_sets` is required.")
def __init__( self, params: Dict[str, Any], train_set: "lgb.Dataset", num_boost_round: int = 1000, fobj: Optional[Callable[..., Any]] = None, feval: Optional[Callable[..., Any]] = None, feature_name: str = "auto", categorical_feature: str = "auto", early_stopping_rounds: Optional[int] = None, verbose_eval: Optional[Union[bool, int]] = True, callbacks: Optional[List[Callable[..., Any]]] = None, time_budget: Optional[int] = None, sample_size: Optional[int] = None, study: Optional[optuna.study.Study] = None, optuna_callbacks: Optional[List[Callable[[Study, FrozenTrial], None]]] = None, verbosity: Optional[int] = 1, ) -> None: _imports.check() params = copy.deepcopy(params) # Handling alias metrics. _handling_alias_metrics(params) args = [params, train_set] kwargs = dict( num_boost_round=num_boost_round, fobj=fobj, feval=feval, feature_name=feature_name, categorical_feature=categorical_feature, early_stopping_rounds=early_stopping_rounds, verbose_eval=verbose_eval, callbacks=callbacks, time_budget=time_budget, sample_size=sample_size, verbosity=verbosity, ) # type: Dict[str, Any] self._parse_args(*args, **kwargs) self._start_time = None # type: Optional[float] self._optuna_callbacks = optuna_callbacks self._best_params = {} # Set default parameters as best. self._best_params.update(DEFAULT_LIGHTGBM_PARAMETERS) if study is None: self.study = optuna.create_study( direction="maximize" if self.higher_is_better() else "minimize" ) else: self.study = study if self.higher_is_better(): if self.study.direction != optuna.study.StudyDirection.MAXIMIZE: metric_name = self.lgbm_params.get("metric", "binary_logloss") raise ValueError( "Study direction is inconsistent with the metric {}. " "Please set 'maximize' as the direction.".format(metric_name) ) else: if self.study.direction != optuna.study.StudyDirection.MINIMIZE: metric_name = self.lgbm_params.get("metric", "binary_logloss") raise ValueError( "Study direction is inconsistent with the metric {}. " "Please set 'minimize' as the direction.".format(metric_name) )