From 5fd49b247169d151957a1066b587f9479dd441b9 Mon Sep 17 00:00:00 2001 From: yuanx749 Date: Wed, 28 Sep 2022 10:06:48 +0800 Subject: [PATCH 1/7] Add global_random_seed --- sklearn/cross_decomposition/tests/test_pls.py | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/sklearn/cross_decomposition/tests/test_pls.py b/sklearn/cross_decomposition/tests/test_pls.py index dc2cc64a54cf9..17af55787840f 100644 --- a/sklearn/cross_decomposition/tests/test_pls.py +++ b/sklearn/cross_decomposition/tests/test_pls.py @@ -484,31 +484,32 @@ def test_n_components_upper_bounds(Estimator): @pytest.mark.parametrize("n_samples, n_features", [(100, 10), (100, 200)]) -@pytest.mark.parametrize("seed", range(10)) -def test_singular_value_helpers(n_samples, n_features, seed): - # Make sure SVD and power method give approximately the same results - X, Y = make_regression(n_samples, n_features, n_targets=5, random_state=seed) +def test_singular_value_helpers(n_samples, n_features, global_random_seed): + X, Y = make_regression( + n_samples, n_features, n_targets=5, random_state=global_random_seed + ) u1, v1, _ = _get_first_singular_vectors_power_method(X, Y, norm_y_weights=True) u2, v2 = _get_first_singular_vectors_svd(X, Y) _svd_flip_1d(u1, v1) _svd_flip_1d(u2, v2) - rtol = 1e-1 - assert_allclose(u1, u2, rtol=rtol) - assert_allclose(v1, v2, rtol=rtol) + atol = 2e-4 + assert_allclose(u1, u2, atol=atol) + assert_allclose(v1, v2, atol=atol) -def test_one_component_equivalence(): +def test_one_component_equivalence(global_random_seed): # PLSSVD, PLSRegression and PLSCanonical should all be equivalent when # n_components is 1 - X, Y = make_regression(100, 10, n_targets=5, random_state=0) + X, Y = make_regression(100, 10, n_targets=5, random_state=global_random_seed) svd = PLSSVD(n_components=1).fit(X, Y).transform(X) reg = PLSRegression(n_components=1).fit(X, Y).transform(X) canonical = PLSCanonical(n_components=1).fit(X, Y).transform(X) - assert_allclose(svd, reg, rtol=1e-2) - assert_allclose(svd, canonical, rtol=1e-2) + atol = 2e-3 + assert_allclose(svd, reg, atol=atol) + assert_allclose(svd, canonical, atol=atol) def test_svd_flip_1d(): From fb21e27461bac38215d333c2074ddd7e5e7a09ff Mon Sep 17 00:00:00 2001 From: yuanx749 Date: Wed, 28 Sep 2022 10:13:36 +0800 Subject: [PATCH 2/7] [all random seeds] test_singular_value_helpers test_one_component_equivalence From 444cde72e66ca706742a2f83bcd5052db1768337 Mon Sep 17 00:00:00 2001 From: yuanx749 Date: Sun, 9 Oct 2022 10:47:11 +0800 Subject: [PATCH 3/7] [all random seeds] test_singular_value_helpers test_one_component_equivalence --- sklearn/cross_decomposition/tests/test_pls.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sklearn/cross_decomposition/tests/test_pls.py b/sklearn/cross_decomposition/tests/test_pls.py index 17af55787840f..6050654d90d62 100644 --- a/sklearn/cross_decomposition/tests/test_pls.py +++ b/sklearn/cross_decomposition/tests/test_pls.py @@ -485,6 +485,7 @@ def test_n_components_upper_bounds(Estimator): @pytest.mark.parametrize("n_samples, n_features", [(100, 10), (100, 200)]) def test_singular_value_helpers(n_samples, n_features, global_random_seed): + # Make sure SVD and power method give approximately the same results X, Y = make_regression( n_samples, n_features, n_targets=5, random_state=global_random_seed ) From bcc0451b7f3cbe974b33cdb20c1953cda880edad Mon Sep 17 00:00:00 2001 From: yuanx749 Date: Wed, 21 Dec 2022 14:28:46 +0800 Subject: [PATCH 4/7] [all random seeds] test_singular_value_helpers test_one_component_equivalence From 8f68f133fac4286a42194c40e56acfb19487b3a5 Mon Sep 17 00:00:00 2001 From: jeremiedbb Date: Wed, 15 Mar 2023 18:47:30 +0100 Subject: [PATCH 5/7] mix between atol and rtol --- sklearn/cross_decomposition/tests/test_pls.py | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/sklearn/cross_decomposition/tests/test_pls.py b/sklearn/cross_decomposition/tests/test_pls.py index 86cd7be4eb97f..658e99fb68fbd 100644 --- a/sklearn/cross_decomposition/tests/test_pls.py +++ b/sklearn/cross_decomposition/tests/test_pls.py @@ -495,9 +495,10 @@ def test_singular_value_helpers(n_samples, n_features, global_random_seed): _svd_flip_1d(u1, v1) _svd_flip_1d(u2, v2) - atol = 2e-4 - assert_allclose(u1, u2, atol=atol) - assert_allclose(v1, v2, atol=atol) + rtol = 1e-2 + # Setting atol because some coordinates are very close to zero + assert_allclose(u1, u2, atol=u2.max() * rtol) + assert_allclose(v1, v2, atol=v2.max() * rtol) def test_one_component_equivalence(global_random_seed): @@ -508,9 +509,10 @@ def test_one_component_equivalence(global_random_seed): reg = PLSRegression(n_components=1).fit(X, Y).transform(X) canonical = PLSCanonical(n_components=1).fit(X, Y).transform(X) - atol = 2e-3 - assert_allclose(svd, reg, atol=atol) - assert_allclose(svd, canonical, atol=atol) + rtol = 1e-2 + # Setting atol because some entries are very close to zero + assert_allclose(svd, reg, atol=reg.max() * rtol) + assert_allclose(svd, canonical, atol=canonical.max() * rtol) def test_svd_flip_1d(): @@ -528,9 +530,11 @@ def test_svd_flip_1d(): assert_allclose(v, [-1, -2, -3]) -def test_loadings_converges(): +def test_loadings_converges(global_random_seed): """Test that CCA converges. Non-regression test for #19549.""" - X, y = make_regression(n_samples=200, n_features=20, n_targets=20, random_state=20) + X, y = make_regression( + n_samples=200, n_features=20, n_targets=20, random_state=global_random_seed + ) cca = CCA(n_components=10, max_iter=500) From 2e525d5fbb0bde77c4b18ba56906a4ef8798c049 Mon Sep 17 00:00:00 2001 From: jeremiedbb Date: Wed, 15 Mar 2023 18:49:20 +0100 Subject: [PATCH 6/7] [all random seeds] test_singular_value_helpers test_one_component_equivalence test_loadings_converges From 7b9f728f14568e926b93f4cb6b1d2d4956affd31 Mon Sep 17 00:00:00 2001 From: jeremiedbb Date: Wed, 15 Mar 2023 21:23:16 +0100 Subject: [PATCH 7/7] lower tol [all random seeds] test_singular_value_helpers test_one_component_equivalence test_loadings_converges --- sklearn/cross_decomposition/tests/test_pls.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sklearn/cross_decomposition/tests/test_pls.py b/sklearn/cross_decomposition/tests/test_pls.py index 658e99fb68fbd..55ef8b482d58e 100644 --- a/sklearn/cross_decomposition/tests/test_pls.py +++ b/sklearn/cross_decomposition/tests/test_pls.py @@ -495,7 +495,7 @@ def test_singular_value_helpers(n_samples, n_features, global_random_seed): _svd_flip_1d(u1, v1) _svd_flip_1d(u2, v2) - rtol = 1e-2 + rtol = 1e-3 # Setting atol because some coordinates are very close to zero assert_allclose(u1, u2, atol=u2.max() * rtol) assert_allclose(v1, v2, atol=v2.max() * rtol) @@ -509,7 +509,7 @@ def test_one_component_equivalence(global_random_seed): reg = PLSRegression(n_components=1).fit(X, Y).transform(X) canonical = PLSCanonical(n_components=1).fit(X, Y).transform(X) - rtol = 1e-2 + rtol = 1e-3 # Setting atol because some entries are very close to zero assert_allclose(svd, reg, atol=reg.max() * rtol) assert_allclose(svd, canonical, atol=canonical.max() * rtol)