{ "metadata": { "name": "", "signature": "sha256:4dc159882a3ef225eae256eb2ae57de153d04cc9de52ea36b1644e64a88de96a" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Regularized OT with generic solver" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy as np\n", "import matplotlib.pylab as pl\n", "import ot" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Dataset generation" ] }, { "cell_type": "code", "collapsed": false, "input": [ "n=100 # nb bins\n", "\n", "# bin positions\n", "x=np.arange(n,dtype=np.float64)\n", "\n", "# Gaussian distributions\n", "a=ot.datasets.get_1D_gauss(n,m=20,s=20) # m= mean, s= std\n", "b=ot.datasets.get_1D_gauss(n,m=60,s=60)\n", "\n", "# loss matrix\n", "M=ot.dist(x.reshape((n,1)),x.reshape((n,1)))\n", "M/=M.max()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### EMD solution" ] }, { "cell_type": "code", "collapsed": false, "input": [ "G0=ot.emd(a,b,M)\n", "\n", "pl.figure(3)\n", "ot.plot.plot1D_mat(a,b,G0,'OT matrix G0')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n/w/xqdjTkgKZjAAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Solution with Frobenius norm regularization" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def f(G): return 0.5*np.sum(G**2)\n", "def df(G): return G\n", "\n", "reg=1e-1\n", " \n", "Gl2=ot.optim.cg(a,b,M,reg,f,df)\n", "\n", "pl.figure(3)\n", "ot.plot.plot1D_mat(a,b,Gl2,'OT matrix Frob. reg')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Solution with entropic regularization" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def f(G): return np.sum(G*np.log(G))\n", "def df(G): return np.log(G)+1\n", " \n", "reg=1e-3\n", " \n", "Ge=ot.optim.cg(a,b,M,reg,f,df)\n", "\n", "pl.figure(4)\n", "ot.plot.plot1D_mat(a,b,Ge,'OT matrix Entrop. reg')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 5 } ], "metadata": {} } ] }