From a1ba6086417d58a735e638496a1932bacbf18651 Mon Sep 17 00:00:00 2001 From: Faron Date: Sun, 25 Oct 2015 10:00:20 +0100 Subject: [PATCH 1/2] learning_rates per boosting round --- python-package/xgboost/training.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/python-package/xgboost/training.py b/python-package/xgboost/training.py index ae12fd868..84636363d 100644 --- a/python-package/xgboost/training.py +++ b/python-package/xgboost/training.py @@ -10,7 +10,7 @@ import numpy as np from .core import Booster, STRING_TYPES def train(params, dtrain, num_boost_round=10, evals=(), obj=None, feval=None, - early_stopping_rounds=None, evals_result=None, verbose_eval=True): + early_stopping_rounds=None, evals_result=None, verbose_eval=True, learning_rates=None): # pylint: disable=too-many-statements,too-many-branches, attribute-defined-outside-init """Train a booster with given parameters. @@ -46,6 +46,10 @@ def train(params, dtrain, num_boost_round=10, evals=(), obj=None, feval=None, verbose_eval : bool If `verbose_eval` then the evaluation metric on the validation set, if given, is printed at each boosting stage. + learning_rates: list or function + Learning rate for each boosting round (yields learning rate decay). + - list l: eta = l[boosting round] + - function f: eta = f(boosting round, num_boost_round) Returns ------- @@ -119,7 +123,15 @@ def train(params, dtrain, num_boost_round=10, evals=(), obj=None, feval=None, best_msg = '' best_score_i = 0 + if isinstance(learning_rates, list) and len(learning_rates) < num_boost_round: + raise ValueError("Length of list 'learning_rates' has to equal 'num_boost_round'.") + for i in range(num_boost_round): + if learning_rates is not None: + if isinstance(learning_rates, list): + bst.set_param({'eta': learning_rates[i]}) + else: + bst.set_param({'eta': learning_rates(i,num_boost_round)}) bst.update(dtrain, i, obj) bst_eval_set = bst.eval_set(evals, i, feval) From 68c9252ff72f13715b4ab8a14dc47eb6da8183d1 Mon Sep 17 00:00:00 2001 From: Faron Date: Sun, 25 Oct 2015 10:20:00 +0100 Subject: [PATCH 2/2] fixed "Exactly one space required after comma" --- python-package/xgboost/training.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python-package/xgboost/training.py b/python-package/xgboost/training.py index 84636363d..dbb9cca27 100644 --- a/python-package/xgboost/training.py +++ b/python-package/xgboost/training.py @@ -131,7 +131,7 @@ def train(params, dtrain, num_boost_round=10, evals=(), obj=None, feval=None, if isinstance(learning_rates, list): bst.set_param({'eta': learning_rates[i]}) else: - bst.set_param({'eta': learning_rates(i,num_boost_round)}) + bst.set_param({'eta': learning_rates(i, num_boost_round)}) bst.update(dtrain, i, obj) bst_eval_set = bst.eval_set(evals, i, feval)