summaryrefslogtreecommitdiff
path: root/notebooks/plot_gromov.ipynb
diff options
context:
space:
mode:
authorRémi Flamary <remi.flamary@gmail.com>2020-04-22 11:39:23 +0200
committerRémi Flamary <remi.flamary@gmail.com>2020-04-22 11:39:23 +0200
commit135c011092cb442b0b874b565b6a2ca3f09234c4 (patch)
tree06a1a5209ee090824ae74af76bd2426295edc424 /notebooks/plot_gromov.ipynb
parent5f679247f64fa1c8e277f34165850caea311a084 (diff)
remove notebooks and cleanup readme and doc
Diffstat (limited to 'notebooks/plot_gromov.ipynb')
-rw-r--r--notebooks/plot_gromov.ipynb263
1 files changed, 0 insertions, 263 deletions
diff --git a/notebooks/plot_gromov.ipynb b/notebooks/plot_gromov.ipynb
deleted file mode 100644
index 11cfeec..0000000
--- a/notebooks/plot_gromov.ipynb
+++ /dev/null
@@ -1,263 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "%matplotlib inline"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "\n",
- "# Gromov-Wasserstein example\n",
- "\n",
- "\n",
- "This example is designed to show how to use the Gromov-Wassertsein distance\n",
- "computation in POT.\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "# Author: Erwan Vautier <erwan.vautier@gmail.com>\n",
- "# Nicolas Courty <ncourty@irisa.fr>\n",
- "#\n",
- "# License: MIT License\n",
- "\n",
- "import scipy as sp\n",
- "import numpy as np\n",
- "import matplotlib.pylab as pl\n",
- "from mpl_toolkits.mplot3d import Axes3D # noqa\n",
- "import ot"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Sample two Gaussian distributions (2D and 3D)\n",
- "---------------------------------------------\n",
- "\n",
- "The Gromov-Wasserstein distance allows to compute distances with samples that\n",
- "do not belong to the same metric space. For demonstration purpose, we sample\n",
- "two Gaussian distributions in 2- and 3-dimensional spaces.\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "n_samples = 30 # nb samples\n",
- "\n",
- "mu_s = np.array([0, 0])\n",
- "cov_s = np.array([[1, 0], [0, 1]])\n",
- "\n",
- "mu_t = np.array([4, 4, 4])\n",
- "cov_t = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])\n",
- "\n",
- "\n",
- "xs = ot.datasets.make_2D_samples_gauss(n_samples, mu_s, cov_s)\n",
- "P = sp.linalg.sqrtm(cov_t)\n",
- "xt = np.random.randn(n_samples, 3).dot(P) + mu_t"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Plotting the distributions\n",
- "--------------------------\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- "<Figure size 432x288 with 2 Axes>"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "fig = pl.figure()\n",
- "ax1 = fig.add_subplot(121)\n",
- "ax1.plot(xs[:, 0], xs[:, 1], '+b', label='Source samples')\n",
- "ax2 = fig.add_subplot(122, projection='3d')\n",
- "ax2.scatter(xt[:, 0], xt[:, 1], xt[:, 2], color='r')\n",
- "pl.show()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Compute distance kernels, normalize them and then display\n",
- "---------------------------------------------------------\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- "<Figure size 432x288 with 2 Axes>"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "C1 = sp.spatial.distance.cdist(xs, xs)\n",
- "C2 = sp.spatial.distance.cdist(xt, xt)\n",
- "\n",
- "C1 /= C1.max()\n",
- "C2 /= C2.max()\n",
- "\n",
- "pl.figure()\n",
- "pl.subplot(121)\n",
- "pl.imshow(C1)\n",
- "pl.subplot(122)\n",
- "pl.imshow(C2)\n",
- "pl.show()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Compute Gromov-Wasserstein plans and distance\n",
- "---------------------------------------------\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "It. |Loss |Relative loss|Absolute loss\n",
- "------------------------------------------------\n",
- " 0|7.602249e-02|0.000000e+00|0.000000e+00\n",
- " 1|4.138485e-02|8.369641e-01|3.463764e-02\n",
- " 2|2.382207e-02|7.372484e-01|1.756278e-02\n",
- " 3|2.149536e-02|1.082425e-01|2.326712e-03\n",
- " 4|2.149536e-02|0.000000e+00|0.000000e+00\n",
- "It. |Err \n",
- "-------------------\n",
- " 0|8.206392e-02|\n",
- " 10|2.775943e-07|\n",
- " 20|5.372013e-14|\n",
- "Gromov-Wasserstein distances: 0.02149535867154042\n",
- "Entropic Gromov-Wasserstein distances: 0.019910889144636214\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- "<Figure size 720x360 with 2 Axes>"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "p = ot.unif(n_samples)\n",
- "q = ot.unif(n_samples)\n",
- "\n",
- "gw0, log0 = ot.gromov.gromov_wasserstein(\n",
- " C1, C2, p, q, 'square_loss', verbose=True, log=True)\n",
- "\n",
- "gw, log = ot.gromov.entropic_gromov_wasserstein(\n",
- " C1, C2, p, q, 'square_loss', epsilon=5e-4, log=True, verbose=True)\n",
- "\n",
- "\n",
- "print('Gromov-Wasserstein distances: ' + str(log0['gw_dist']))\n",
- "print('Entropic Gromov-Wasserstein distances: ' + str(log['gw_dist']))\n",
- "\n",
- "\n",
- "pl.figure(1, (10, 5))\n",
- "\n",
- "pl.subplot(1, 2, 1)\n",
- "pl.imshow(gw0, cmap='jet')\n",
- "pl.title('Gromov Wasserstein')\n",
- "\n",
- "pl.subplot(1, 2, 2)\n",
- "pl.imshow(gw, cmap='jet')\n",
- "pl.title('Entropic Gromov Wasserstein')\n",
- "\n",
- "pl.show()"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.6.9"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 0
-}