From d4e1bc70be028d2f0088cdbae9eed9ead0f45c9b Mon Sep 17 00:00:00 2001 From: Kian Eliasi Date: Mon, 14 Nov 2022 23:51:18 +0100 Subject: [PATCH 1/6] MAINT Parameters validation for 'fastica' --- sklearn/decomposition/_fastica.py | 24 +++++++++++++++++++++++- sklearn/tests/test_public_functions.py | 1 + 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/sklearn/decomposition/_fastica.py b/sklearn/decomposition/_fastica.py index 92de875f64ea3..483e51371b521 100644 --- a/sklearn/decomposition/_fastica.py +++ b/sklearn/decomposition/_fastica.py @@ -19,7 +19,7 @@ from ..exceptions import ConvergenceWarning from ..utils import check_array, as_float_array, check_random_state from ..utils.validation import check_is_fitted -from ..utils._param_validation import Hidden, Interval, StrOptions +from ..utils._param_validation import Hidden, Interval, StrOptions, validate_params __all__ = ["fastica", "FastICA"] @@ -154,6 +154,28 @@ def _cube(x, fun_args): return x**3, (3 * x**2).mean(axis=-1) +@validate_params( + { + "X": ["array-like"], + "n_components": [Interval(Integral, 1, None, closed="left"), None], + "algorithm": [StrOptions({"parallel", "deflation"})], + "whiten": [ + Hidden(StrOptions({"warn"})), + StrOptions({"arbitrary-variance", "unit-variance"}), + "boolean", + ], + "fun": [StrOptions({"logcosh", "exp", "cube"}), callable], + "fun_args": [dict, None], + "max_iter": [Interval(Integral, 1, None, closed="left")], + "tol": [Interval(Real, 0.0, None, closed="left")], + "w_init": ["array-like", None], + "whiten_solver": [StrOptions({"eigh", "svd"})], + "random_state": ["random_state"], + "return_X_mean": ["boolean"], + "compute_sources": ["boolean"], + "return_n_iter": ["boolean"], + } +) def fastica( X, n_components=None, diff --git a/sklearn/tests/test_public_functions.py b/sklearn/tests/test_public_functions.py index d4e645c052dab..2ebfecb5b48d5 100644 --- a/sklearn/tests/test_public_functions.py +++ b/sklearn/tests/test_public_functions.py @@ -10,6 +10,7 @@ PARAM_VALIDATION_FUNCTION_LIST = [ "sklearn.cluster.kmeans_plusplus", + "sklearn.decomposition.fastica", ] From 3bdfdeb62cd77aabd3fa90f9c7672fd18004e181 Mon Sep 17 00:00:00 2001 From: Kian Eliasi Date: Tue, 15 Nov 2022 23:46:37 +0100 Subject: [PATCH 2/6] Reuse 'FastICA' class validations in 'fastica' funcation --- sklearn/decomposition/_fastica.py | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/sklearn/decomposition/_fastica.py b/sklearn/decomposition/_fastica.py index 483e51371b521..a5ccaa3196993 100644 --- a/sklearn/decomposition/_fastica.py +++ b/sklearn/decomposition/_fastica.py @@ -156,21 +156,6 @@ def _cube(x, fun_args): @validate_params( { - "X": ["array-like"], - "n_components": [Interval(Integral, 1, None, closed="left"), None], - "algorithm": [StrOptions({"parallel", "deflation"})], - "whiten": [ - Hidden(StrOptions({"warn"})), - StrOptions({"arbitrary-variance", "unit-variance"}), - "boolean", - ], - "fun": [StrOptions({"logcosh", "exp", "cube"}), callable], - "fun_args": [dict, None], - "max_iter": [Interval(Integral, 1, None, closed="left")], - "tol": [Interval(Real, 0.0, None, closed="left")], - "w_init": ["array-like", None], - "whiten_solver": [StrOptions({"eigh", "svd"})], - "random_state": ["random_state"], "return_X_mean": ["boolean"], "compute_sources": ["boolean"], "return_n_iter": ["boolean"], @@ -341,7 +326,11 @@ def my_g(x): whiten_solver=whiten_solver, random_state=random_state, ) - S = est._fit_transform(X, compute_sources=compute_sources) + if compute_sources: + S = est.fit_transform(X) + else: + est.fit(X) + S = None if est._whiten in ["unit-variance", "arbitrary-variance"]: K = est.whitening_ From b8fa7eb69a172f6cab566acb812b862cf0eb8400 Mon Sep 17 00:00:00 2001 From: Kian Eliasi Date: Thu, 17 Nov 2022 15:24:48 +0100 Subject: [PATCH 3/6] Revert "Reuse 'FastICA' class validations in 'fastica' funcation" This reverts commit 3bdfdeb62cd77aabd3fa90f9c7672fd18004e181. --- sklearn/decomposition/_fastica.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/sklearn/decomposition/_fastica.py b/sklearn/decomposition/_fastica.py index a5ccaa3196993..483e51371b521 100644 --- a/sklearn/decomposition/_fastica.py +++ b/sklearn/decomposition/_fastica.py @@ -156,6 +156,21 @@ def _cube(x, fun_args): @validate_params( { + "X": ["array-like"], + "n_components": [Interval(Integral, 1, None, closed="left"), None], + "algorithm": [StrOptions({"parallel", "deflation"})], + "whiten": [ + Hidden(StrOptions({"warn"})), + StrOptions({"arbitrary-variance", "unit-variance"}), + "boolean", + ], + "fun": [StrOptions({"logcosh", "exp", "cube"}), callable], + "fun_args": [dict, None], + "max_iter": [Interval(Integral, 1, None, closed="left")], + "tol": [Interval(Real, 0.0, None, closed="left")], + "w_init": ["array-like", None], + "whiten_solver": [StrOptions({"eigh", "svd"})], + "random_state": ["random_state"], "return_X_mean": ["boolean"], "compute_sources": ["boolean"], "return_n_iter": ["boolean"], @@ -326,11 +341,7 @@ def my_g(x): whiten_solver=whiten_solver, random_state=random_state, ) - if compute_sources: - S = est.fit_transform(X) - else: - est.fit(X) - S = None + S = est._fit_transform(X, compute_sources=compute_sources) if est._whiten in ["unit-variance", "arbitrary-variance"]: K = est.whitening_ From 6cc6c7777b182dfe45831aa755b71b40c805830c Mon Sep 17 00:00:00 2001 From: Kian Eliasi Date: Sun, 27 Nov 2022 23:03:54 +0100 Subject: [PATCH 4/6] Validate only function specific params in fastica --- sklearn/decomposition/_fastica.py | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/sklearn/decomposition/_fastica.py b/sklearn/decomposition/_fastica.py index 483e51371b521..bb0c4ccdd78ea 100644 --- a/sklearn/decomposition/_fastica.py +++ b/sklearn/decomposition/_fastica.py @@ -157,20 +157,6 @@ def _cube(x, fun_args): @validate_params( { "X": ["array-like"], - "n_components": [Interval(Integral, 1, None, closed="left"), None], - "algorithm": [StrOptions({"parallel", "deflation"})], - "whiten": [ - Hidden(StrOptions({"warn"})), - StrOptions({"arbitrary-variance", "unit-variance"}), - "boolean", - ], - "fun": [StrOptions({"logcosh", "exp", "cube"}), callable], - "fun_args": [dict, None], - "max_iter": [Interval(Integral, 1, None, closed="left")], - "tol": [Interval(Real, 0.0, None, closed="left")], - "w_init": ["array-like", None], - "whiten_solver": [StrOptions({"eigh", "svd"})], - "random_state": ["random_state"], "return_X_mean": ["boolean"], "compute_sources": ["boolean"], "return_n_iter": ["boolean"], @@ -341,6 +327,7 @@ def my_g(x): whiten_solver=whiten_solver, random_state=random_state, ) + est._validate_params() S = est._fit_transform(X, compute_sources=compute_sources) if est._whiten in ["unit-variance", "arbitrary-variance"]: From 75c4342f43df0bd66a7a76ee7193bf2262fdce5b Mon Sep 17 00:00:00 2001 From: Kian Eliasi Date: Mon, 28 Nov 2022 22:58:22 +0100 Subject: [PATCH 5/6] Revert "Validate only function specific params in fastica" This reverts commit 6cc6c7777b182dfe45831aa755b71b40c805830c. --- sklearn/decomposition/_fastica.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/sklearn/decomposition/_fastica.py b/sklearn/decomposition/_fastica.py index bb0c4ccdd78ea..483e51371b521 100644 --- a/sklearn/decomposition/_fastica.py +++ b/sklearn/decomposition/_fastica.py @@ -157,6 +157,20 @@ def _cube(x, fun_args): @validate_params( { "X": ["array-like"], + "n_components": [Interval(Integral, 1, None, closed="left"), None], + "algorithm": [StrOptions({"parallel", "deflation"})], + "whiten": [ + Hidden(StrOptions({"warn"})), + StrOptions({"arbitrary-variance", "unit-variance"}), + "boolean", + ], + "fun": [StrOptions({"logcosh", "exp", "cube"}), callable], + "fun_args": [dict, None], + "max_iter": [Interval(Integral, 1, None, closed="left")], + "tol": [Interval(Real, 0.0, None, closed="left")], + "w_init": ["array-like", None], + "whiten_solver": [StrOptions({"eigh", "svd"})], + "random_state": ["random_state"], "return_X_mean": ["boolean"], "compute_sources": ["boolean"], "return_n_iter": ["boolean"], @@ -327,7 +341,6 @@ def my_g(x): whiten_solver=whiten_solver, random_state=random_state, ) - est._validate_params() S = est._fit_transform(X, compute_sources=compute_sources) if est._whiten in ["unit-variance", "arbitrary-variance"]: From 65b1bdb1fc6fa7f4ab5d938a6c2b1a3753d95451 Mon Sep 17 00:00:00 2001 From: jeremiedbb Date: Wed, 28 Dec 2022 12:07:18 +0100 Subject: [PATCH 6/6] partial_validation --- sklearn/decomposition/_fastica.py | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/sklearn/decomposition/_fastica.py b/sklearn/decomposition/_fastica.py index 483e51371b521..bb0c4ccdd78ea 100644 --- a/sklearn/decomposition/_fastica.py +++ b/sklearn/decomposition/_fastica.py @@ -157,20 +157,6 @@ def _cube(x, fun_args): @validate_params( { "X": ["array-like"], - "n_components": [Interval(Integral, 1, None, closed="left"), None], - "algorithm": [StrOptions({"parallel", "deflation"})], - "whiten": [ - Hidden(StrOptions({"warn"})), - StrOptions({"arbitrary-variance", "unit-variance"}), - "boolean", - ], - "fun": [StrOptions({"logcosh", "exp", "cube"}), callable], - "fun_args": [dict, None], - "max_iter": [Interval(Integral, 1, None, closed="left")], - "tol": [Interval(Real, 0.0, None, closed="left")], - "w_init": ["array-like", None], - "whiten_solver": [StrOptions({"eigh", "svd"})], - "random_state": ["random_state"], "return_X_mean": ["boolean"], "compute_sources": ["boolean"], "return_n_iter": ["boolean"], @@ -341,6 +327,7 @@ def my_g(x): whiten_solver=whiten_solver, random_state=random_state, ) + est._validate_params() S = est._fit_transform(X, compute_sources=compute_sources) if est._whiten in ["unit-variance", "arbitrary-variance"]: