From 01046a7140821ca856963a938d5fecada4629364 Mon Sep 17 00:00:00 2001 From: Vrishank Bhardwaj Date: Tue, 19 Sep 2017 23:52:09 +0530 Subject: [PATCH 1/4] Added set_future_warning flag in BaseSGD --- sklearn/linear_model/stochastic_gradient.py | 22 +++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/sklearn/linear_model/stochastic_gradient.py b/sklearn/linear_model/stochastic_gradient.py index 4a6e6831edf44..9551eb03104d8 100644 --- a/sklearn/linear_model/stochastic_gradient.py +++ b/sklearn/linear_model/stochastic_gradient.py @@ -69,13 +69,14 @@ def __init__(self, loss, penalty='l2', alpha=0.0001, C=1.0, self.n_iter = n_iter self.max_iter = max_iter self.tol = tol + self.set_future_warning = set_future_warning # current tests expect init to do parameter validation # but we are not allowed to set attributes - self._validate_params(set_max_iter=False) + self._validate_params(set_max_iter=False, set_future_warning=True) def set_params(self, *args, **kwargs): super(BaseSGD, self).set_params(*args, **kwargs) - self._validate_params() + self._validate_params(set_future_warning=True) return self @abstractmethod @@ -120,14 +121,15 @@ def _validate_params(self, set_max_iter=True): self._tol = None elif self.tol is None and self.max_iter is None: - warnings.warn( - "max_iter and tol parameters have been added in %s in 0.19. If" - " both are left unset, they default to max_iter=5 and tol=None" - ". If tol is not None, max_iter defaults to max_iter=1000. " - "From 0.21, default max_iter will be 1000, " - "and default tol will be 1e-3." % type(self), FutureWarning) - # Before 0.19, default was n_iter=5 - max_iter = 5 + if not self.set_future_warning: + warnings.warn( + "max_iter and tol parameters have been added in %s in 0.19. If" + " both are left unset, they default to max_iter=5 and tol=None" + ". If tol is not None, max_iter defaults to max_iter=1000. " + "From 0.21, default max_iter will be 1000, " + "and default tol will be 1e-3." % type(self), FutureWarning) + # Before 0.19, default was n_iter=5 + max_iter = 5 else: max_iter = self.max_iter if self.max_iter is not None else 1000 self._max_iter = max_iter From 5c7da543c047666c3674f453834d39e7a6670149 Mon Sep 17 00:00:00 2001 From: Vrishank Bhardwaj Date: Wed, 20 Sep 2017 00:36:47 +0530 Subject: [PATCH 2/4] Update stochastic_gradient.py --- sklearn/linear_model/stochastic_gradient.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sklearn/linear_model/stochastic_gradient.py b/sklearn/linear_model/stochastic_gradient.py index 9551eb03104d8..18021a7a1ed84 100644 --- a/sklearn/linear_model/stochastic_gradient.py +++ b/sklearn/linear_model/stochastic_gradient.py @@ -50,7 +50,7 @@ def __init__(self, loss, penalty='l2', alpha=0.0001, C=1.0, l1_ratio=0.15, fit_intercept=True, max_iter=None, tol=None, shuffle=True, verbose=0, epsilon=0.1, random_state=None, learning_rate="optimal", eta0=0.0, power_t=0.5, - warm_start=False, average=False, n_iter=None): + warm_start=False, average=False, n_iter=None, set_future_warning=True): self.loss = loss self.penalty = penalty self.learning_rate = learning_rate @@ -72,11 +72,11 @@ def __init__(self, loss, penalty='l2', alpha=0.0001, C=1.0, self.set_future_warning = set_future_warning # current tests expect init to do parameter validation # but we are not allowed to set attributes - self._validate_params(set_max_iter=False, set_future_warning=True) + self._validate_params(set_max_iter=False, set_future_warning=False) def set_params(self, *args, **kwargs): super(BaseSGD, self).set_params(*args, **kwargs) - self._validate_params(set_future_warning=True) + self._validate_params(set_future_warning=False) return self @abstractmethod @@ -121,7 +121,7 @@ def _validate_params(self, set_max_iter=True): self._tol = None elif self.tol is None and self.max_iter is None: - if not self.set_future_warning: + if self.set_future_warning: warnings.warn( "max_iter and tol parameters have been added in %s in 0.19. If" " both are left unset, they default to max_iter=5 and tol=None" From b7103d906a5b275b4a3b503f10422ba11a38e96c Mon Sep 17 00:00:00 2001 From: Vrishank Bhardwaj Date: Wed, 20 Sep 2017 07:10:56 +0530 Subject: [PATCH 3/4] Adds ignore_future_warning flag to _validate_params --- sklearn/linear_model/stochastic_gradient.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/sklearn/linear_model/stochastic_gradient.py b/sklearn/linear_model/stochastic_gradient.py index 18021a7a1ed84..967c32a78eab8 100644 --- a/sklearn/linear_model/stochastic_gradient.py +++ b/sklearn/linear_model/stochastic_gradient.py @@ -50,7 +50,7 @@ def __init__(self, loss, penalty='l2', alpha=0.0001, C=1.0, l1_ratio=0.15, fit_intercept=True, max_iter=None, tol=None, shuffle=True, verbose=0, epsilon=0.1, random_state=None, learning_rate="optimal", eta0=0.0, power_t=0.5, - warm_start=False, average=False, n_iter=None, set_future_warning=True): + warm_start=False, average=False, n_iter=None): self.loss = loss self.penalty = penalty self.learning_rate = learning_rate @@ -69,21 +69,20 @@ def __init__(self, loss, penalty='l2', alpha=0.0001, C=1.0, self.n_iter = n_iter self.max_iter = max_iter self.tol = tol - self.set_future_warning = set_future_warning # current tests expect init to do parameter validation # but we are not allowed to set attributes - self._validate_params(set_max_iter=False, set_future_warning=False) + self._validate_params(set_max_iter=False, ignore_future_warning=True) def set_params(self, *args, **kwargs): super(BaseSGD, self).set_params(*args, **kwargs) - self._validate_params(set_future_warning=False) + self._validate_params(ignore_future_warning=True) return self @abstractmethod def fit(self, X, y): """Fit model.""" - def _validate_params(self, set_max_iter=True): + def _validate_params(self, set_max_iter=True, ignore_future_warning=False): """Validate input params. """ if not isinstance(self.shuffle, bool): raise ValueError("shuffle must be either True or False") @@ -121,7 +120,7 @@ def _validate_params(self, set_max_iter=True): self._tol = None elif self.tol is None and self.max_iter is None: - if self.set_future_warning: + if not ignore_future_warning: warnings.warn( "max_iter and tol parameters have been added in %s in 0.19. If" " both are left unset, they default to max_iter=5 and tol=None" From e5fc0f8173268967f78359bbe23c3e3778701941 Mon Sep 17 00:00:00 2001 From: Vrishank Bhardwaj Date: Mon, 25 Sep 2017 13:58:16 +0530 Subject: [PATCH 4/4] use set_max_iter instead of set_future_warning --- sklearn/linear_model/stochastic_gradient.py | 23 ++++++++++----------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/sklearn/linear_model/stochastic_gradient.py b/sklearn/linear_model/stochastic_gradient.py index 967c32a78eab8..2641e3b58a1a4 100644 --- a/sklearn/linear_model/stochastic_gradient.py +++ b/sklearn/linear_model/stochastic_gradient.py @@ -71,18 +71,18 @@ def __init__(self, loss, penalty='l2', alpha=0.0001, C=1.0, self.tol = tol # current tests expect init to do parameter validation # but we are not allowed to set attributes - self._validate_params(set_max_iter=False, ignore_future_warning=True) + self._validate_params(set_max_iter=False) def set_params(self, *args, **kwargs): super(BaseSGD, self).set_params(*args, **kwargs) - self._validate_params(ignore_future_warning=True) + self._validate_params(set_max_iter=False) return self @abstractmethod def fit(self, X, y): """Fit model.""" - def _validate_params(self, set_max_iter=True, ignore_future_warning=False): + def _validate_params(self, set_max_iter=True): """Validate input params. """ if not isinstance(self.shuffle, bool): raise ValueError("shuffle must be either True or False") @@ -120,15 +120,14 @@ def _validate_params(self, set_max_iter=True, ignore_future_warning=False): self._tol = None elif self.tol is None and self.max_iter is None: - if not ignore_future_warning: - warnings.warn( - "max_iter and tol parameters have been added in %s in 0.19. If" - " both are left unset, they default to max_iter=5 and tol=None" - ". If tol is not None, max_iter defaults to max_iter=1000. " - "From 0.21, default max_iter will be 1000, " - "and default tol will be 1e-3." % type(self), FutureWarning) - # Before 0.19, default was n_iter=5 - max_iter = 5 + warnings.warn( + "max_iter and tol parameters have been added in %s in 0.19. If" + " both are left unset, they default to max_iter=5 and tol=None" + ". If tol is not None, max_iter defaults to max_iter=1000. " + "From 0.21, default max_iter will be 1000, " + "and default tol will be 1e-3." % type(self), FutureWarning) + # Before 0.19, default was n_iter=5 + max_iter = 5 else: max_iter = self.max_iter if self.max_iter is not None else 1000 self._max_iter = max_iter