summaryrefslogtreecommitdiff
path: root/notebooks/plot_gromov.ipynb
diff options
context:
space:
mode:
authorRémi Flamary <remi.flamary@gmail.com>2017-09-15 13:57:01 +0200
committerRémi Flamary <remi.flamary@gmail.com>2017-09-15 13:57:01 +0200
commitdd3546baf9c59733b2109a971293eba48d2eaed3 (patch)
treedbc9c5dd126eecf537acbe7d205b91250f2bdc9b /notebooks/plot_gromov.ipynb
parentbad3d95523d005a4fbf64dd009c716b9dd560fe3 (diff)
add all files for doc
Diffstat (limited to 'notebooks/plot_gromov.ipynb')
-rw-r--r--notebooks/plot_gromov.ipynb231
1 files changed, 231 insertions, 0 deletions
diff --git a/notebooks/plot_gromov.ipynb b/notebooks/plot_gromov.ipynb
new file mode 100644
index 0000000..11c19d3
--- /dev/null
+++ b/notebooks/plot_gromov.ipynb
@@ -0,0 +1,231 @@
+{
+ "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>\r\n",
+ "# Nicolas Courty <ncourty@irisa.fr>\r\n",
+ "#\r\n",
+ "# License: MIT License\r\n",
+ "\r\n",
+ "import scipy as sp\r\n",
+ "import numpy as np\r\n",
+ "import matplotlib.pylab as pl\r\n",
+ "from mpl_toolkits.mplot3d import Axes3D # noqa\r\n",
+ "import ot"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Sample two Gaussian distributions (2D and 3D)\r\n",
+ " ---------------------------------------------\r\n",
+ "\r\n",
+ " The Gromov-Wasserstein distance allows to compute distances with samples that\r\n",
+ " do not belong to the same metric space. For demonstration purpose, we sample\r\n",
+ " two Gaussian distributions in 2- and 3-dimensional spaces.\r\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "n_samples = 30 # nb samples\r\n",
+ "\r\n",
+ "mu_s = np.array([0, 0])\r\n",
+ "cov_s = np.array([[1, 0], [0, 1]])\r\n",
+ "\r\n",
+ "mu_t = np.array([4, 4, 4])\r\n",
+ "cov_t = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])\r\n",
+ "\r\n",
+ "\r\n",
+ "xs = ot.datasets.get_2D_samples_gauss(n_samples, mu_s, cov_s)\r\n",
+ "P = sp.linalg.sqrtm(cov_t)\r\n",
+ "xt = np.random.randn(n_samples, 3).dot(P) + mu_t"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Plotting the distributions\r\n",
+ "--------------------------\r\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "<matplotlib.figure.Figure at 0x7fe3102491d0>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "fig = pl.figure()\r\n",
+ "ax1 = fig.add_subplot(121)\r\n",
+ "ax1.plot(xs[:, 0], xs[:, 1], '+b', label='Source samples')\r\n",
+ "ax2 = fig.add_subplot(122, projection='3d')\r\n",
+ "ax2.scatter(xt[:, 0], xt[:, 1], xt[:, 2], color='r')\r\n",
+ "pl.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Compute distance kernels, normalize them and then display\r\n",
+ "---------------------------------------------------------\r\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "<matplotlib.figure.Figure at 0x7fe30e043a90>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "C1 = sp.spatial.distance.cdist(xs, xs)\r\n",
+ "C2 = sp.spatial.distance.cdist(xt, xt)\r\n",
+ "\r\n",
+ "C1 /= C1.max()\r\n",
+ "C2 /= C2.max()\r\n",
+ "\r\n",
+ "pl.figure()\r\n",
+ "pl.subplot(121)\r\n",
+ "pl.imshow(C1)\r\n",
+ "pl.subplot(122)\r\n",
+ "pl.imshow(C2)\r\n",
+ "pl.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Compute Gromov-Wasserstein plans and distance\r\n",
+ "---------------------------------------------\r\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Gromov-Wasserstein distances between the distribution: 0.201997813845\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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\nTkSuQmCC\n",
+ "text/plain": [
+ "<matplotlib.figure.Figure at 0x7fe31024a390>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "p = ot.unif(n_samples)\r\n",
+ "q = ot.unif(n_samples)\r\n",
+ "\r\n",
+ "gw = ot.gromov_wasserstein(C1, C2, p, q, 'square_loss', epsilon=5e-4)\r\n",
+ "gw_dist = ot.gromov_wasserstein2(C1, C2, p, q, 'square_loss', epsilon=5e-4)\r\n",
+ "\r\n",
+ "print('Gromov-Wasserstein distances between the distribution: ' + str(gw_dist))\r\n",
+ "\r\n",
+ "pl.figure()\r\n",
+ "pl.imshow(gw, cmap='jet')\r\n",
+ "pl.colorbar()\r\n",
+ "pl.show()"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 2",
+ "language": "python",
+ "name": "python2"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 2
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython2",
+ "version": "2.7.12"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}