From 83b9ce5928d100e5981bb5c4ccea904e56de7aad Mon Sep 17 00:00:00 2001 From: Juan Gomez Date: Tue, 11 Apr 2023 00:28:19 -0700 Subject: [PATCH 1/2] adding validation to quantile transformer wrapper --- sklearn/preprocessing/_data.py | 12 ++++++------ sklearn/preprocessing/tests/test_data.py | 6 +++++- sklearn/tests/test_public_functions.py | 4 ++++ 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/sklearn/preprocessing/_data.py b/sklearn/preprocessing/_data.py index bbb6e6fa80a12..f32e58a2415d0 100644 --- a/sklearn/preprocessing/_data.py +++ b/sklearn/preprocessing/_data.py @@ -2849,6 +2849,9 @@ def _more_tags(self): return {"allow_nan": True} +@validate_params( + {"X": ["array-like", "sparse matrix"], "axis": [Options(Integral, {0, 1})]} +) def quantile_transform( X, *, @@ -2983,13 +2986,10 @@ def quantile_transform( copy=copy, ) if axis == 0: - return n.fit_transform(X) - elif axis == 1: - return n.fit_transform(X.T).T + X = n.fit_transform(X) else: - raise ValueError( - "axis should be either equal to 0 or 1. Got axis={}".format(axis) - ) + X = n.fit_transform(X.T).T + return X class PowerTransformer(OneToOneFeatureMixin, TransformerMixin, BaseEstimator): diff --git a/sklearn/preprocessing/tests/test_data.py b/sklearn/preprocessing/tests/test_data.py index 7ea546dd2d258..7d175e145ee51 100644 --- a/sklearn/preprocessing/tests/test_data.py +++ b/sklearn/preprocessing/tests/test_data.py @@ -2250,7 +2250,11 @@ def test_quantile_transform_valid_axis(): X = np.array([[0, 25, 50, 75, 100], [2, 4, 6, 8, 10], [2.6, 4.1, 2.3, 9.5, 0.1]]) with pytest.raises( - ValueError, match="axis should be either equal to 0 or 1. Got axis=2" + ValueError, + match=( + "The 'axis' parameter of quantile_transform must be a int among {0, 1}. Got" + " 2 instead." + ), ): quantile_transform(X.T, axis=2) diff --git a/sklearn/tests/test_public_functions.py b/sklearn/tests/test_public_functions.py index a4a9dbd9db739..32cd63be0b817 100644 --- a/sklearn/tests/test_public_functions.py +++ b/sklearn/tests/test_public_functions.py @@ -269,6 +269,10 @@ def test_function_param_validation(func_module): ("sklearn.decomposition.fastica", "sklearn.decomposition.FastICA"), ("sklearn.decomposition.non_negative_factorization", "sklearn.decomposition.NMF"), ("sklearn.preprocessing.minmax_scale", "sklearn.preprocessing.MinMaxScaler"), + ( + "sklearn.preprocessing.quantile_transform", + "sklearn.preprocessing.QuantileTransformer", + ), ] From 9ae20a873248b1709e73f7762b870b59f85bdd59 Mon Sep 17 00:00:00 2001 From: Juan Gomez Date: Mon, 17 Apr 2023 21:37:54 -0700 Subject: [PATCH 2/2] adding axis comment and removing unnecessary tests for quantile transormer --- sklearn/preprocessing/_data.py | 2 +- sklearn/preprocessing/tests/test_data.py | 13 ------------- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/sklearn/preprocessing/_data.py b/sklearn/preprocessing/_data.py index f32e58a2415d0..1d9dba566478c 100644 --- a/sklearn/preprocessing/_data.py +++ b/sklearn/preprocessing/_data.py @@ -2987,7 +2987,7 @@ def quantile_transform( ) if axis == 0: X = n.fit_transform(X) - else: + else: # axis == 1 X = n.fit_transform(X.T).T return X diff --git a/sklearn/preprocessing/tests/test_data.py b/sklearn/preprocessing/tests/test_data.py index 7d175e145ee51..b5b016e8289f9 100644 --- a/sklearn/preprocessing/tests/test_data.py +++ b/sklearn/preprocessing/tests/test_data.py @@ -2246,19 +2246,6 @@ def test_fit_cold_start(): scaler.fit_transform(X_2d) -def test_quantile_transform_valid_axis(): - X = np.array([[0, 25, 50, 75, 100], [2, 4, 6, 8, 10], [2.6, 4.1, 2.3, 9.5, 0.1]]) - - with pytest.raises( - ValueError, - match=( - "The 'axis' parameter of quantile_transform must be a int among {0, 1}. Got" - " 2 instead." - ), - ): - quantile_transform(X.T, axis=2) - - @pytest.mark.parametrize("method", ["box-cox", "yeo-johnson"]) def test_power_transformer_notfitted(method): pt = PowerTransformer(method=method)