Skip to content

Smooth and Sparse OT #50

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 20 commits into from
Jun 11, 2018
Merged

Smooth and Sparse OT #50

merged 20 commits into from
Jun 11, 2018

Conversation

rflamary
Copy link
Collaborator

This PR add several solvers for regularized OT from the following paper:

Blondel, M., Seguy, V., & Rolet, A. (2018). Smooth and Sparse Optimal Transport. Proceedings of the Twenty-First International Conference on Artificial Intelligence and Statistics (AISTATS).

Some of the code come from https://github.com/mblondel/smooth-ot/

List of new stuff:

  • Solvers for smooty dual and semi dual for negentropy and squared L2 regularization
  • Wrapper functions smooth_ot_dual and smooth_ot_semi_dual compatible with ot.sinkhorn.
  • Detailed dosumentation about the optimization problems.
  • Several test for all regularizations.
  • Example of use code in plot_OT_1D_smooth.py
  • Update readme with new feature and reference.

Here is an example of 1D OT matrix for squared L2 regularization.
image

@rflamary rflamary requested a review from ncourty May 31, 2018 11:53
README.md Outdated
@@ -15,7 +15,8 @@ It provides the following solvers:

* OT Network Flow solver for the linear program/ Earth Movers Distance [1].
* Entropic regularization OT solver with Sinkhorn Knopp Algorithm [2] and stabilized version [9][10] with optional GPU implementation (requires cudamat).
* Non regularized Wasserstein barycenters [16] with LP solver.
* Smooth optimal transport solvers (dual and semi-dual) for KL and squared L2 regularization [17].
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

regularization's'

import matplotlib.pylab as pl
import ot
import ot.plot
from ot.datasets import get_1D_gauss as gauss
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

make_1D_gauss now

"""
self.gamma = gamma

def delta_Omega(X):
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we keep those functions here ?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All the ones that raise a 'not implemented' exception

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is proper base class definition I believe, it provide aclean base implementation with proper Errors in can of use. I will complete the documentation so that it is clear for a user that this class should not be used in practice.

@rflamary rflamary merged commit 327b0c6 into master Jun 11, 2018
@mblondel
Copy link

Thanks a lot for the integration work in POT!

@rflamary
Copy link
Collaborator Author

@mblondel no problem your code was a pleasure to work with.

@rflamary rflamary deleted the smooth_ot branch June 19, 2018 11:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants