summaryrefslogtreecommitdiff
path: root/notebooks/plot_gromov.ipynb
blob: 87937f09abcacb8ae862f46b9093b6a9ca4eb85a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
{
 "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": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f275d787cf8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f2751491cc0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "It.  |Loss        |Delta loss\n",
      "--------------------------------\n",
      "    0|3.767714e-02|0.000000e+00\n",
      "    1|2.091125e-02|-8.017640e-01\n",
      "    2|1.607458e-02|-3.008895e-01\n",
      "    3|1.486883e-02|-8.109274e-02\n",
      "    4|1.484811e-02|-1.394896e-03\n",
      "    5|1.484791e-02|-1.400744e-05\n",
      "    6|1.484790e-02|-1.400803e-07\n",
      "    7|1.484790e-02|-1.400805e-09\n",
      "    8|1.484790e-02|-1.400768e-11\n",
      "It.  |Err         \n",
      "-------------------\n",
      "    0|7.522843e-02|\n",
      "   10|2.233137e-04|\n",
      "   20|5.767057e-07|\n",
      "   30|2.315565e-09|\n",
      "   40|9.789603e-12|\n",
      "Gromov-Wasserstein distances: 0.014847904422308234\n",
      "Entropic Gromov-Wasserstein distances: 0.011257422087381012\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f275141c2b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "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\n",
    "\n",
    "\n",
    "#\n",
    "# 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",
    "\n",
    "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.get_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\n",
    "\n",
    "\n",
    "#\n",
    "# Plotting the distributions\n",
    "# --------------------------\n",
    "\n",
    "\n",
    "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()\n",
    "\n",
    "\n",
    "#\n",
    "# Compute distance kernels, normalize them and then display\n",
    "# ---------------------------------------------------------\n",
    "\n",
    "\n",
    "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()\n",
    "\n",
    "#\n",
    "# Compute Gromov-Wasserstein plans and distance\n",
    "# ---------------------------------------------\n",
    "\n",
    "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.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}