diff --git a/python/cuml/cuml/_thirdparty/sklearn/preprocessing/_data.py b/python/cuml/cuml/_thirdparty/sklearn/preprocessing/_data.py index 17da1654b4..f73f403204 100644 --- a/python/cuml/cuml/_thirdparty/sklearn/preprocessing/_data.py +++ b/python/cuml/cuml/_thirdparty/sklearn/preprocessing/_data.py @@ -1943,6 +1943,10 @@ def __init__(self, norm='l2', *, copy=True): self.norm = norm self.copy = copy + @classmethod + def _get_param_names(cls): + return super()._get_param_names() + ["norm", "copy"] + def __sklearn_tags__(self): tags = super().__sklearn_tags__() tags.requires_fit = False diff --git a/python/cuml/tests/test_compose.py b/python/cuml/tests/test_compose.py index 665ad12b8a..86d71cfee4 100644 --- a/python/cuml/tests/test_compose.py +++ b/python/cuml/tests/test_compose.py @@ -274,6 +274,36 @@ def test_column_transformer_named_transformers_(clf_dataset): # noqa: F811 assert cu_named_transformers.keys() == sk_named_transformers.keys() +def test_normalizer_sklearn_clone_preserves_parameters(): + normalizer = cuNormalizer(norm="l1", copy=False) + + cloned = sk_clone(normalizer) + + assert cloned.norm == "l1" + assert cloned.copy is False + + +def test_column_transformer_preserves_normalizer_norm(): + X = np.array([[0.0, 1.0, 2.0, 2.0], [1.0, 1.0, 0.0, 1.0]]) + + cu_transformer = cuColumnTransformer( + [ + ("norm1", cuNormalizer(norm="l1"), [0, 1]), + ("norm2", cuNormalizer(norm="l1"), slice(2, 4)), + ] + ) + sk_transformer = skColumnTransformer( + [ + ("norm1", skNormalizer(norm="l1"), [0, 1]), + ("norm2", skNormalizer(norm="l1"), slice(2, 4)), + ] + ) + + assert_allclose( + cu_transformer.fit_transform(X), sk_transformer.fit_transform(X) + ) + + def test_column_transformer_sklearn_clone_preserves_transformers(): transformer = cuColumnTransformer( [("one_hot_encoder", skOneHotEncoder(), ["a", "b"])]