Source code for cyclic_boosting.learning_rate

from __future__ import absolute_import, division, print_function

import numpy as np
from cyclic_boosting.features import Feature
from typing import Optional, Union


[docs] def constant_learn_rate_one(iteration: int, maximal_iteration: int, feature: Optional[Feature] = None) -> float: """Function to specify the learning rate of a cyclic boosting iteration. The learning rate returned is always 1. Parameters ---------- iteration: int Current major cyclic boosting iteration. maximal_iteration: int Maximal cyclic boosting iteration. feature: :class:`cyclic_boosting.base.Feature` Feature """ return 1.0
[docs] def linear_learn_rate(iteration: int, maximal_iteration: Union[int, float], feature: Optional[Feature] = None) -> float: """Function to specify the learning rate of a cyclic boosting iteration. The learning rate is linear increasing each iteration until it reaches 1 in the last iteration. Parameters ---------- iteration: int Current major cyclic boosting iteration. maximal_iteration: int Maximal cyclic boosting iteration. feature: :class:`cyclic_boosting.base.Feature` Feature """ return iteration * (1.0 / maximal_iteration)
[docs] def logistic_learn_rate(iteration: int, maximal_iteration: int, feature: Optional[Feature] = None) -> float: """Function to specify the learning rate of a cyclic boosting iteration. The learning rate has a logistic form. Parameters ---------- iteration: int Current major cyclic boosting iteration. maximal_iteration: int Maximal cyclic boosting iteration. feature: :class:`cyclic_boosting.base.Feature` Feature """ saturation_value = 0.999999999 x_t = maximal_iteration / np.log((1 - saturation_value) / (1 + saturation_value)) return (1.0 / (1.0 + np.exp(iteration / x_t)) - 0.5) * 2
[docs] def half_linear_learn_rate(iteration: int, maximal_iteration: int, feature: Optional[Feature] = None) -> float: """Function to specify the learning rate of a cyclic boosting iteration. The learning rate is linear increasing each iteration until it reaches 1 in half of the iterations. Parameters ---------- iteration: int Current major cyclic boosting iteration. maximal_iteration: int Maximal cyclic boosting iteration. feature: :class:`cyclic_boosting.base.Feature` Feature """ return np.minimum(linear_learn_rate(iteration, maximal_iteration * 0.5, feature), 1.0)