Note
Go to the end to download the full example code.
Debiased Sinkhorn barycenter demo
Note
Example added in release: 0.8.0.
This example illustrates the computation of the debiased Sinkhorn barycenter as proposed in [37].
# Author: Hicham Janati <hicham.janati100@gmail.com>
#
# License: MIT License
# sphinx_gallery_thumbnail_number = 3
import os
from pathlib import Path
import numpy as np
import matplotlib.pyplot as plt
import ot
from ot.bregman import (
barycenter,
barycenter_debiased,
convolutional_barycenter2d,
convolutional_barycenter2d_debiased,
)
Debiased barycenter of 1D Gaussians
n = 100 # nb bins
# bin positions
x = np.arange(n, dtype=np.float64)
# Gaussian distributions
a1 = ot.datasets.make_1D_gauss(n, m=20, s=5) # m= mean, s= std
a2 = ot.datasets.make_1D_gauss(n, m=60, s=8)
# creating matrix A containing all distributions
A = np.vstack((a1, a2)).T
n_distributions = A.shape[1]
# loss matrix + normalization
M = ot.utils.dist0(n)
M /= M.max()
alpha = 0.2 # 0<=alpha<=1
weights = np.array([1 - alpha, alpha])
epsilons = [5e-3, 1e-2, 5e-2]
bars = [barycenter(A, M, reg, weights) for reg in epsilons]
bars_debiased = [barycenter_debiased(A, M, reg, weights) for reg in epsilons]
labels = ["Sinkhorn barycenter", "Debiased barycenter"]
colors = ["indianred", "gold"]
f, axes = plt.subplots(
1, len(epsilons), tight_layout=True, sharey=True, figsize=(12, 4), num=1
)
for ax, eps, bar, bar_debiased in zip(axes, epsilons, bars, bars_debiased):
ax.plot(A[:, 0], color="k", ls="--", label="Input data", alpha=0.3)
ax.plot(A[:, 1], color="k", ls="--", alpha=0.3)
for data, label, color in zip([bar, bar_debiased], labels, colors):
ax.plot(data, color=color, label=label, lw=2)
ax.set_title(r"$\varepsilon = %.3f$" % eps)
plt.legend()
plt.show()