Describe the bug
cuml.compose.ColumnTransformer.set_params() rejects the standard nested estimator parameter syntax <transformer_name>__<parameter>.
Calling set_params(s__with_mean=False) for a named StandardScaler transformer raises:
ValueError: Invalid parameter 's__with_mean' for `ColumnTransformer`
The equivalent sklearn.compose.ColumnTransformer call accepts the nested parameter, applies it to the named transformer, and completes successfully.
Steps/Code to reproduce bug
cuML reproducer:
import numpy as np
from cuml.compose import ColumnTransformer
from cuml.preprocessing import StandardScaler
a = np.array([
[1.0, 2.0],
[3.0, 4.0],
[5.0, 6.0],
])
print(
ColumnTransformer([
("s", StandardScaler(), [0, 1]),
])
.set_params(s__with_mean=False)
.fit_transform(a)
)
Output:
Traceback (most recent call last):
File "/workspace/apibughub/cuml/ColumnTransformer/error_bug1/error_bug_cuml.py", line 7, in <module>
print(ColumnTransformer([("s", StandardScaler(), [0, 1])]).set_params(s__with_mean=False).fit_transform(a))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
File "/opt/conda/envs/rapids-26.08/lib/python3.14/site-packages/cuml/_thirdparty/sklearn/preprocessing/_column_transformer.py", line 637, in set_params
self._set_params('_transformers', **kwargs)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/conda/envs/rapids-26.08/lib/python3.14/site-packages/cuml/_thirdparty/sklearn/utils/skl_dependencies.py", line 105, in _set_params
super().set_params(**params)
~~~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/opt/conda/envs/rapids-26.08/lib/python3.14/site-packages/cuml/internals/base.py", line 226, in set_params
raise ValueError(
f"Invalid parameter {key!r} for `{type(self).__name__}`"
)
ValueError: Invalid parameter 's__with_mean' for `ColumnTransformer`
For comparison, the equivalent scikit-learn code:
import numpy as np
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler
a = np.array([
[1.0, 2.0],
[3.0, 4.0],
[5.0, 6.0],
])
print(
ColumnTransformer([
("s", StandardScaler(), [0, 1]),
])
.set_params(s__with_mean=False)
.fit_transform(a)
)
Output:
[[0.61237244 1.22474487]
[1.83711731 2.44948974]
[3.06186218 3.67423461]]
Expected behavior
cuml.compose.ColumnTransformer.set_params() should accept nested transformer parameters using the standard <transformer_name>__<parameter> syntax.
In this example, s__with_mean=False should set with_mean=False on the transformer named s, after which fit_transform(a) should complete and return the transformed matrix.
Environment details (please complete the following information):
- Environment location: Docker
- Linux Distro/Architecture: Ubuntu 24.04 / x86_64
- GPU Model/Driver: NVIDIA GeForce RTX 4090 / 595.71.05
- CUDA: 13.2
- Method of cuDF & cuML install: conda
conda list:
conda list
# packages in environment at /opt/conda/envs/rapids-26.08:
#
# Name Version Build Channel
# Name Version Build Channel
python 3.14.6 h242f9ac_102_cp314 conda-forge
numpy 2.4.6 py314h2b28147_0 conda-forge
scipy 1.16.3 py314hf07bd8e_2 conda-forge
scikit-learn 1.9.0 np2py314hf09ca88_0 conda-forge
rapids 26.08.00 cuda13_260806_c2656556 rapidsai
cuml 26.08.00 cuda13_cp311_abi3_260805_265b9da6 rapidsai
libcuml 26.08.00 cuda13_260805_265b9da6 rapidsai
cudf 26.08.00 cuda13_cp311_abi3_260805_ff5b362d rapidsai
libraft 26.08.00 cuda13_260805_ebf92684 rapidsai
libraft-headers 26.08.00 cuda13_260805_ebf92684 rapidsai
pylibraft 26.08.00 cuda13_cp311_abi3_260805_ebf92684 rapidsai
cuvs 26.08.01 cuda13_cp311_abi3_260806_25b1be43 rapidsai
libcuvs 26.08.01 cuda13_260806_25b1be43 rapidsai
cupy 14.1.1 py314hdea9c46_0 conda-forge
cupy-core 14.1.1 py314hcd3b49b_0 conda-forge
numba 0.64.0 py314h8169c2f_0 conda-forge
numba-cuda 0.30.4 py314h42812f9_0 conda-forge
rmm 26.08.00 cuda13_cp311_abi3_260805_42d059f1 rapidsai
librmm 26.08.00 cuda13_260805_42d059f1 rapidsai
cuda-version 13.3 hcbadf70_3 conda-forge
cuda-bindings 13.3.1 py314h42812f9_1 conda-forge
cuda-cudart 13.3.29 hecca717_0 conda-forge
cuda-nvrtc 13.3.33 hecca717_0 conda-forge
libcublas 13.6.0.2 h676940d_0 conda-forge
libcusolver 12.2.6.9 h676940d_0 conda-forge
libcusparse 12.8.2.51 hecca717_0 conda-forge
libcurand 10.4.3.29 h676940d_0 conda-forge
Additional context
The failure occurs during set_params(), before fitting or transforming any data. The named transformer is present in the ColumnTransformer, and with_mean is a valid parameter of cuml.preprocessing.StandardScaler.
The equivalent scikit-learn implementation supports this nested parameter syntax and returns:
[[0.61237244 1.22474487]
[1.83711731 2.44948974]
[3.06186218 3.67423461]]
Nested parameter handling is important for compatibility with scikit-learn workflows such as parameter tuning, pipelines, and cloning.
Describe the bug
cuml.compose.ColumnTransformer.set_params()rejects the standard nested estimator parameter syntax<transformer_name>__<parameter>.Calling
set_params(s__with_mean=False)for a namedStandardScalertransformer raises:The equivalent
sklearn.compose.ColumnTransformercall accepts the nested parameter, applies it to the named transformer, and completes successfully.Steps/Code to reproduce bug
cuML reproducer:
Output:
For comparison, the equivalent scikit-learn code:
Output:
Expected behavior
cuml.compose.ColumnTransformer.set_params()should accept nested transformer parameters using the standard<transformer_name>__<parameter>syntax.In this example,
s__with_mean=Falseshould setwith_mean=Falseon the transformer nameds, after whichfit_transform(a)should complete and return the transformed matrix.Environment details (please complete the following information):
conda list:Additional context
The failure occurs during
set_params(), before fitting or transforming any data. The named transformer is present in theColumnTransformer, andwith_meanis a valid parameter ofcuml.preprocessing.StandardScaler.The equivalent scikit-learn implementation supports this nested parameter syntax and returns:
Nested parameter handling is important for compatibility with scikit-learn workflows such as parameter tuning, pipelines, and cloning.