Esempio n. 1
0
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"
Esempio n. 2
0
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'
Esempio n. 3
0
    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.")
Esempio n. 4
0
    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 {}
Esempio n. 5
0
    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.")
Esempio n. 6
0
    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)
                )