diff options
author | Jakub Zadrożny <jakub.r.zadrozny@gmail.com> | 2022-01-21 08:50:19 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-21 08:50:19 +0100 |
commit | d7c709e2bae3bafec9efad87e758919c8db61933 (patch) | |
tree | 867cc38b6f782207b5045751be2c0f0e2824b6af /test/test_dr.py | |
parent | 263c5842664c1dff4f8e58111d6bddb33927539e (diff) |
[MRG] Implement Sinkhorn in log-domain for WDA (#336)
* [MRG] Implement Sinkhorn in log-domain for WDA
* for small values of the regularization parameter (reg) the current implementation runs into numerical issues (nans and infs)
* this can be resolved by using log-domain implementation of the sinkhorn algorithm
* Add feature to RELEASES and contributor name
* Add 'sinkhorn_method' parameter to WDA
* use the standard Sinkhorn solver by default (faster)
* use log-domain Sinkhorn if asked by the user
Co-authored-by: Jakub Zadrożny <jz@qed.ai>
Co-authored-by: Rémi Flamary <remi.flamary@gmail.com>
Diffstat (limited to 'test/test_dr.py')
-rw-r--r-- | test/test_dr.py | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/test/test_dr.py b/test/test_dr.py index 741f2ad..6d7fc9a 100644 --- a/test/test_dr.py +++ b/test/test_dr.py @@ -61,6 +61,28 @@ def test_wda(): @pytest.mark.skipif(nogo, reason="Missing modules (autograd or pymanopt)") +def test_wda_low_reg(): + + n_samples = 100 # nb samples in source and target datasets + np.random.seed(0) + + # generate gaussian dataset + xs, ys = ot.datasets.make_data_classif('gaussrot', n_samples) + + n_features_noise = 8 + + xs = np.hstack((xs, np.random.randn(n_samples, n_features_noise))) + + p = 2 + + Pwda, projwda = ot.dr.wda(xs, ys, p, reg=0.01, maxiter=10, sinkhorn_method='sinkhorn_log') + + projwda(xs) + + np.testing.assert_allclose(np.sum(Pwda**2, 0), np.ones(p)) + + +@pytest.mark.skipif(nogo, reason="Missing modules (autograd or pymanopt)") def test_wda_normalized(): n_samples = 100 # nb samples in source and target datasets |