Skip to content

Commit 87c330d

Browse files
MaggieChegeciku
andauthored
FIX check that parameters validation happen in fit for KernelPCA (#21567)
Co-authored-by: ciku <maggie@hellotractor.com>
1 parent d40943a commit 87c330d

File tree

4 files changed

+15
-5
lines changed

4 files changed

+15
-5
lines changed

doc/whats_new/v1.1.rst

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,13 @@ Changelog
186186
instead of `__init__`.
187187
:pr:`21434` by :user:`Krum Arnaudov <krumeto>`.
188188

189+
190+
:mod:`sklearn.decomposition.KernelPCA`
191+
......................................
192+
- |Fix| :class:`decomposition.KernelPCA` now validates input parameters in
193+
`fit` instead of `__init__`.
194+
:pr:`21567` by :user:`Maggie Chege <MaggieChege>`.
195+
189196
:mod:`sklearn.svm`
190197
..................
191198

sklearn/decomposition/_kernel_pca.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -257,8 +257,6 @@ def __init__(
257257
copy_X=True,
258258
n_jobs=None,
259259
):
260-
if fit_inverse_transform and kernel == "precomputed":
261-
raise ValueError("Cannot fit_inverse_transform with a precomputed kernel.")
262260
self.n_components = n_components
263261
self.kernel = kernel
264262
self.kernel_params = kernel_params
@@ -429,6 +427,8 @@ def fit(self, X, y=None):
429427
self : object
430428
Returns the instance itself.
431429
"""
430+
if self.fit_inverse_transform and self.kernel == "precomputed":
431+
raise ValueError("Cannot fit_inverse_transform with a precomputed kernel.")
432432
X = self._validate_data(X, accept_sparse="csr", copy=self.copy_X)
433433
self._centerer = KernelCenterer()
434434
K = self._get_kernel(X)

sklearn/decomposition/tests/test_kernel_pca.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,12 @@ def test_kernel_pca_invalid_parameters():
7878
Tests fitting inverse transform with a precomputed kernel raises a
7979
ValueError.
8080
"""
81-
with pytest.raises(ValueError):
82-
KernelPCA(10, fit_inverse_transform=True, kernel="precomputed")
81+
estimator = KernelPCA(
82+
n_components=10, fit_inverse_transform=True, kernel="precomputed"
83+
)
84+
err_ms = "Cannot fit_inverse_transform with a precomputed kernel"
85+
with pytest.raises(ValueError, match=err_ms):
86+
estimator.fit(np.random.randn(10, 10))
8387

8488

8589
def test_kernel_pca_consistent_transform():

sklearn/tests/test_common.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,6 @@ def test_transformers_get_feature_names_out(transformer):
410410
"FeatureUnion",
411411
"GridSearchCV",
412412
"HalvingGridSearchCV",
413-
"KernelPCA",
414413
"Pipeline",
415414
"SGDOneClassSVM",
416415
"TheilSenRegressor",

0 commit comments

Comments
 (0)