diff --git a/python-package/xgboost/sklearn.py b/python-package/xgboost/sklearn.py index b00cb7762..2703b8160 100644 --- a/python-package/xgboost/sklearn.py +++ b/python-package/xgboost/sklearn.py @@ -334,6 +334,10 @@ class XGBModel(XGBModelBase): else: self.kwargs[key] = value + if hasattr(self, '_Booster'): + parameters = self.get_xgb_params() + self.get_booster().set_param(parameters) + return self def get_params(self, deep=True): diff --git a/tests/python/test_with_sklearn.py b/tests/python/test_with_sklearn.py index 2ffadb188..318c349f3 100644 --- a/tests/python/test_with_sklearn.py +++ b/tests/python/test_with_sklearn.py @@ -542,13 +542,29 @@ def test_sklearn_n_jobs(): assert clf.get_xgb_params()['n_jobs'] == 2 -def test_kwargs(): +def test_parameters_access(): + from sklearn import datasets params = {'updater': 'grow_gpu_hist', 'subsample': .5, 'n_jobs': -1} clf = xgb.XGBClassifier(n_estimators=1000, **params) assert clf.get_params()['updater'] == 'grow_gpu_hist' assert clf.get_params()['subsample'] == .5 assert clf.get_params()['n_estimators'] == 1000 + clf = xgb.XGBClassifier(n_estimators=1, nthread=4) + X, y = datasets.load_iris(return_X_y=True) + clf.fit(X, y) + + config = json.loads(clf.get_booster().save_config()) + assert int(config['learner']['generic_param']['nthread']) == 4 + + clf.set_params(nthread=16) + config = json.loads(clf.get_booster().save_config()) + assert int(config['learner']['generic_param']['nthread']) == 16 + + clf.predict(X) + config = json.loads(clf.get_booster().save_config()) + assert int(config['learner']['generic_param']['nthread']) == 16 + def test_kwargs_error(): params = {'updater': 'grow_gpu_hist', 'subsample': .5, 'n_jobs': -1}