Skip to content

[MRG] Fixes #8174: deprecation warning #8177

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 4 commits into from
Closed

[MRG] Fixes #8174: deprecation warning #8177

wants to merge 4 commits into from

Conversation

tzano
Copy link
Contributor

@tzano tzano commented Jan 8, 2017

This fixes #8174.
As the parameter y should be deprecated from method transform and eventually removed in a future version. I have added the following warning message.

Transform() is used in the following files:

sklearn/cluster/birch.py:    def transform(self, X, y=None):
sklearn/cluster/k_means_.py:    def transform(self, X, y=None):
sklearn/decomposition/base.py:    def transform(self, X, y=None):
sklearn/decomposition/dict_learning.py:    def transform(self, X, y=None):
sklearn/decomposition/fastica_.py:    def transform(self, X, y=None, copy=True):
sklearn/decomposition/pca.py:    def transform(self, X, y=None):
sklearn/feature_extraction/dict_vectorizer.py:    def transform(self, X, y=None):
sklearn/feature_extraction/hashing.py:    def transform(self, raw_X, y=None):
sklearn/feature_extraction/text.py:    def transform(self, X, y=None):
sklearn/kernel_approximation.py:    def transform(self, X, y=None):
sklearn/kernel_approximation.py:    def transform(self, X, y=None):
sklearn/kernel_approximation.py:    def transform(self, X, y=None):
sklearn/neighbors/approximate.py:    def transform(self, X, y=None):
sklearn/preprocessing/_function_transformer.py:    def transform(self, X, y=None):
sklearn/preprocessing/data.py:    def transform(self, X, y=None, copy=None):
sklearn/preprocessing/data.py:    def transform(self, X, y=None):
sklearn/preprocessing/data.py:    def transform(self, X, y=None):
sklearn/preprocessing/data.py:    def transform(self, X, y=None):
sklearn/preprocessing/data.py:    def transform(self, X, y=None, copy=None):
sklearn/preprocessing/data.py:    def transform(self, X, y=None, copy=None):
sklearn/preprocessing/data.py:    def transform(self, K, y=None, copy=True):
sklearn/preprocessing/data.py:    def transform(self, X, y=None):
sklearn/random_projection.py:    def transform(self, X, y=None):

@tzano tzano changed the title [WIP] Fixes #8174: deprecated warning [WIP] Fixes #8174: deprecation warning Jan 8, 2017
@jnothman
Copy link
Member

jnothman commented Jan 8, 2017

  • Please do not modify anything other than what addresses this issue. Those cosmetic changes just make it harder to review.
  • Please check that y is not actually used, and note when it is so we can review.
  • Make y='deprecated' by default so that you can warn when it is explicitly set to None.
  • Will be removed in version 0.21 to be specific.

@tzano
Copy link
Contributor Author

tzano commented Jan 9, 2017

Thanks @jnothman.

** Modifications: **

  • Passed y='deprecated' to transform method, and changed warning message to:
    warnings.warn("The parameter y on transform() is "
                  "deprecated since 0.19 and will be removed in 0.21. ",
                  DeprecationWarning)
  • In the following methods, we don't use y.
sklearn/cluster/birch.py:    def transform(self, X, y='deprecated'):
sklearn/cluster/k_means_.py:    def transform(self, X, y='deprecated'):
sklearn/decomposition/base.py:    def transform(self, X, y='deprecated'):
sklearn/decomposition/dict_learning.py:    def transform(self, X, y='deprecated'):
sklearn/decomposition/fastica_.py:    def transform(self, X, y='deprecated', copy=True):
sklearn/decomposition/pca.py:    def transform(self, X, y='deprecated'):
sklearn/feature_extraction/dict_vectorizer.py:    def transform(self, X, y='deprecated'):
sklearn/feature_extraction/hashing.py:    def transform(self, raw_X, y='deprecated'):
sklearn/feature_extraction/text.py:    def transform(self, X, y='deprecated'):
sklearn/kernel_approximation.py:    def transform(self, X, y='deprecated'):
sklearn/kernel_approximation.py:    def transform(self, X, y='deprecated'):
sklearn/kernel_approximation.py:    def transform(self, X, y='deprecated'):
sklearn/neighbors/approximate.py:    def transform(self, X, y='deprecated'):
sklearn/preprocessing/data.py:    def transform(self, X, y='deprecated', copy=None):
sklearn/preprocessing/data.py:    def transform(self, X, y='deprecated'):
sklearn/preprocessing/data.py:    def transform(self, X, y='deprecated'):
sklearn/preprocessing/data.py:    def transform(self, X, y='deprecated'):
sklearn/preprocessing/data.py:    def transform(self, X, y='deprecated', copy=None):
sklearn/preprocessing/data.py:    def transform(self, X, y='deprecated', copy=None):
sklearn/preprocessing/data.py:    def transform(self, K, y='deprecated', copy=True):
sklearn/random_projection.py:    def transform(self, X, y='deprecated'):
sklearn/tests/test_base.py:        def transform(self, X, y='deprecated'):
sklearn/tests/test_pipeline.py:    def transform(self, X, y='deprecated'):
sklearn/tests/test_pipeline.py:    def transform(self, X, y='deprecated'):
  • The are two places where we make use of parameter y in transform method.
  1. sklearn.preprocessing.FunctionTransformer.transform()

sklearn/preprocessing/_function_transformer.py: def transform(self, X, y=None):. However, this can be customized.

    def transform(self, X, y=None):
        return self._transform(X, y, self.func, self.kw_args)

    def inverse_transform(self, X, y=None):
        return self._transform(X, y, self.inverse_func, self.inv_kw_args)

    def _transform(self, X, y=None, func=None, kw_args=None):
        ... 
        return func(X, *((y,) if self.pass_y else ()),
                    **(kw_args if kw_args else {}))

This goes down to this part:

        return func(X, *((y,) if self.pass_y else ()),
                    **(kw_args if kw_args else {}))

If we are intending to deprecate y from FunctionTransformer.transform(), it seems that we need to change FunctionTransformer (i.e: self.pass_y: wouldn't be needed. we can pass y with self.kw_args ). If it's the case, should we adjust FunctionTransformer class, or should we keep the same behaviour, for the sake of backwards compatibility.?

  1. sklearn.cross_decomposition_
    You didn't mention this in the initial list sklearn/cross_decomposition/pls_.py: def transform(self, X, Y=None, copy=True):

@jnothman
Copy link
Member

jnothman commented Jan 9, 2017

Don't modify FunctionTransformer, thanks. I'd like to hear further on @GaelVaroquaux's concerns about this task.

assert_warns_message(DeprecationWarning, warning_msg, X_r.transform,
X, y=1.0)

warning_msg = "The parameter y on transform() is deprecated"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this variable is already set

X, y=1.0)

warning_msg = "The parameter y on transform() is deprecated"
X_r = pca.fit(X)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this need not be repeated

@@ -78,6 +81,11 @@ def fit(self, X, y=None):
return self

def transform(self, X, y=None):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

'deprecated'

@@ -78,6 +81,11 @@ def fit(self, X, y=None):
return self

def transform(self, X, y=None):
if y is not None:
warnings.warn('y is deprecated and will be'
' removed in a future version',
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

which?

@tzano
Copy link
Contributor Author

tzano commented Jan 11, 2017

@jnothman I've made the changes. Let me know if we need to add/remove the deprecation warning message from
sklearn/preprocessing/_function_transformer.py: def transform(self, X, y=None). I hope also that @GaelVaroquaux has a moment to chime in.

@jnothman
Copy link
Member

jnothman commented Jan 11, 2017 via email

@tzano
Copy link
Contributor Author

tzano commented Jan 11, 2017

Thanks @jnothman. I have pushed the changes.

@tzano tzano changed the title [WIP] Fixes #8174: deprecation warning [MRG] Fixes #8174: deprecation warning Jan 14, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

transform should not accept y
2 participants