diff options
author | RĂ©mi Flamary <remi.flamary@gmail.com> | 2020-12-22 18:35:40 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-22 18:35:40 +0100 |
commit | f6139428e70ce964de3bef703ef13aa701a83620 (patch) | |
tree | dac5b59d6b53fdbc4bcfda2db7eb666cbcaa49af /ot | |
parent | cb3e24aea8a2492ccb7e7664533ea3543b14c8ac (diff) |
[WIP] Update documentation "Why OT" section (#220)
* add some text + discussion sinkhorn
* stating wrk on why POT
* fix sphinx warnings + make html-noplot
* discussion when not to use POT
* add discussion which sinkhorn
* edits on quickstart
* more
* remove warnings :any:
* more
* done
* remove ref
Co-authored-by: Alexandre Gramfort <alexandre.gramfort@m4x.org>
Diffstat (limited to 'ot')
-rw-r--r-- | ot/__init__.py | 10 | ||||
-rw-r--r-- | ot/bregman.py | 30 |
2 files changed, 36 insertions, 4 deletions
diff --git a/ot/__init__.py b/ot/__init__.py index ec3ede2..0116d33 100644 --- a/ot/__init__.py +++ b/ot/__init__.py @@ -37,7 +37,8 @@ from . import partial # OT functions from .lp import emd, emd2, emd_1d, emd2_1d, wasserstein_1d from .bregman import sinkhorn, sinkhorn2, barycenter -from .unbalanced import sinkhorn_unbalanced, barycenter_unbalanced, sinkhorn_unbalanced2 +from .unbalanced import (sinkhorn_unbalanced, barycenter_unbalanced, + sinkhorn_unbalanced2) from .da import sinkhorn_lpl1_mm from .sliced import sliced_wasserstein_distance @@ -46,9 +47,10 @@ from .utils import dist, unif, tic, toc, toq __version__ = "0.7.0" -__all__ = ['emd', 'emd2', 'emd_1d', 'sinkhorn', 'sinkhorn2', 'utils', 'datasets', - 'bregman', 'lp', 'tic', 'toc', 'toq', 'gromov', +__all__ = ['emd', 'emd2', 'emd_1d', 'sinkhorn', 'sinkhorn2', 'utils', + 'datasets', 'bregman', 'lp', 'tic', 'toc', 'toq', 'gromov', 'emd_1d', 'emd2_1d', 'wasserstein_1d', 'dist', 'unif', 'barycenter', 'sinkhorn_lpl1_mm', 'da', 'optim', 'sinkhorn_unbalanced', 'barycenter_unbalanced', - 'sinkhorn_unbalanced2', 'sliced_wasserstein_distance'] + 'sinkhorn_unbalanced2', 'sliced_wasserstein_distance', + 'smooth', 'stochastic', 'unbalanced', 'partial'] diff --git a/ot/bregman.py b/ot/bregman.py index f1f8437..dcd35e1 100644 --- a/ot/bregman.py +++ b/ot/bregman.py @@ -67,6 +67,21 @@ def sinkhorn(a, b, M, reg, method='sinkhorn', numItermax=1000, log : bool, optional record log if True + **Choosing a Sinkhorn solver** + + By default and when using a regularization parameter that is not too small + the default sinkhorn solver should be enough. If you need to use a small + regularization to get sharper OT matrices, you should use the + :any:`ot.bregman.sinkhorn_stabilized` solver that will avoid numerical + errors. This last solver can be very slow in practice and might not even + converge to a reasonable OT matrix in a finite time. This is why + :any:`ot.bregman.sinkhorn_epsilon_scaling` that relie on iterating the value + of the regularization (and using warm start) sometimes leads to better + solutions. Note that the greedy version of the sinkhorn + :any:`ot.bregman.greenkhorn` can also lead to a speedup and the screening + version of the sinkhorn :any:`ot.bregman.screenkhorn` aim a providing a + fast approximation of the Sinkhorn problem. + Returns ------- @@ -175,6 +190,21 @@ def sinkhorn2(a, b, M, reg, method='sinkhorn', numItermax=1000, log : bool, optional record log if True + **Choosing a Sinkhorn solver** + + By default and when using a regularization parameter that is not too small + the default sinkhorn solver should be enough. If you need to use a small + regularization to get sharper OT matrices, you should use the + :any:`ot.bregman.sinkhorn_stabilized` solver that will avoid numerical + errors. This last solver can be very slow in practice and might not even + converge to a reasonable OT matrix in a finite time. This is why + :any:`ot.bregman.sinkhorn_epsilon_scaling` that relie on iterating the value + of the regularization (and using warm start) sometimes leads to better + solutions. Note that the greedy version of the sinkhorn + :any:`ot.bregman.greenkhorn` can also lead to a speedup and the screening + version of the sinkhorn :any:`ot.bregman.screenkhorn` aim a providing a + fast approximation of the Sinkhorn problem. + Returns ------- W : (n_hists) ndarray or float |