{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Discriminative Classification" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Preliminaries\n", "\n", "- Goal \n", " - Introduction to discriminative classification models\n", "- Materials \n", " - Mandatory\n", " - These lecture notes\n", " - Optional\n", " - Bishop pp. 203-206 \n", " - [T. Minka (2005), Discriminative models, not discriminative training](./files/Minka-2005 -Discriminative-models-not-discriminative-training.pdf)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Problem: difficult class-conditional data distribitions\n", "\n", "Our task will be the same as in the preceding class on (generative) classification. But this time, the class-conditional data distributions look very non-Gaussian, yet the linear discriminative boundary looks easy enough:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "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QYOkS5cuMnr0aNmxY0fYTYqcFStWyDe+8Q3p3r279OrVS773ve/JW2+9FXazIm/FihWSSCRkwYIFYTclkg4ePCgzZ86UU089Vbp16yYjR46U3bt3h92syDl+/LgsWbKk7Rxz+umnS01NjbS2tobdtLy3fft2mTp1qvTt21cSiYQ8/vjjKc8rpaS6ulr69u0rXbt2lYqKCnn99dc9vUcsg8/evXultbVV1q5dK6+//rr87Gc/kwceeEBuvfXWsJuW9x577DFZsGCB/PjHP5aXX35ZJkyYIBdeeKHs378/7KZFyvPPPy9z586VF154QbZt2ybHjx+XyZMny9GjR8NuWmTt2rVL1q1bJyNGjAi7KZH06aefyvjx4+WEE06QJ598Ut544w256667Mr4uUhzdcccd8sADD8iqVavkzTfflJ/+9KeycuVKuf/++8NuWt47evSonH322bJq1SrL53/605/K3XffLatWrZJdu3ZJnz595Fvf+pZ89tln7t9EQSml1E9/+lM1aNCgsJuR9/7hH/5BzZ49O2XbkCFD1C233BJSiwrD4cOHlYio559/PuymRNJnn32mBg8erLZt26bOP/98NX/+/LCbFDmLFi1S5513XtjNKAgXXXSRuvbaa1O2TZ8+Xc2cOTOkFkWTiKgtW7a0PW5tbVV9+vRRP/nJT9q2/e1vf1MlJSXqgQcecH3cWFZ8rDQ0NEiPHj3CbkZea25ult27d8vkyZNTtk+ePFl27twZUqsKQ0NDg4gIv4M+zZ07Vy666CL5p3/6p7CbEllPPPGEjBkzRi699FLp1auXnHPOOfLggw+G3axIOu+88+S///u/5e233xYRkT/96U/yxz/+Ub7zne+E3LJo27dvn3z00Ucp56Di4mI5//zzPZ2DWENbRP7yl7/I/fffL3fddVfYTclrR44ckZaWFundu3fK9t69e8tHH30UUquiTyklCxculPPOO0+GDx8ednMi59e//rXs2bNHdu3aFXZTIu29996TNWvWyMKFC+XWW2+VF198UW6++WYpLi6Wq666KuzmRcqiRYukoaFBhgwZIslkUlpaWuT222+XH/zgB2E3LdL084zVOeiDDz5wfZyCqvhUV1dLIpFwvL300ksprzl06JB8+9vflksvvVSuv/76kFoeLYlEIuWxUqrDNrg3b948efXVV+XRRx8NuymRc+DAAZk/f75s2LBBunTpEnZzIq21tVVGjRoly5cvl3POOUdmzZolN9xwg6xZsybspkXOY489Jhs2bJBHHnlE9uzZIw8//LDceeed8vDDD4fdtIKQ6TmooCo+8+bNk8svv9xxn4EDB7b9+9ChQzJx4kQZN26crFu3Lsuti77S0lJJJpMdqjuHDx/ukMDhzk033SRPPPGEbN++Xfr16xd2cyJn9+7dcvjwYRk9enTbtpaWFtm+fbusWrVKmpqaJJlMhtjC6CgrK5OzzjorZdvQoUNl06ZNIbUoun70ox/JLbfc0nY++vrXvy4ffPCBrFixQq6++uqQWxddffr0ERGt8lNWVta23es5qKCCT2lpqZSWlrra9+DBgzJx4kQZPXq0rF+/Xjp1KqjiV1YUFRXJ6NGjZdu2bXLJJZe0bd+2bZtMmzYtxJZFj1JKbrrpJtmyZYs899xzMmjQoLCbFEkXXHCBvPbaaynbfvjDH8qQIUNk0aJFhB4Pxo8f32FJhbffflsGDBgQUoui64svvuhwTkkmk0xnz9CgQYOkT58+sm3bNjnnnHNERBt7+vzzz8sdd9zh+jgFFXzcOnTokFRUVEj//v3lzjvvlPr6+rbn9EQJawsXLpQrr7xSxowZ01Yp279/v8yePTvspkXK3Llz5ZFHHpHf/e530r1797YqWklJiXTt2jXk1kVH9+7dO4yLOvHEE+XUU09lvJRH//qv/yr/+I//KMuXL5fLLrtMXnzxRVm3bh3VcB+mTp0qt99+u/Tv31+GDRsmL7/8stx9991y7bXXht20vPf555/Lu+++2/Z437598sorr0iPHj2kf//+smDBAlm+fLkMHjxYBg8eLMuXL5du3brJv/zLv7h/k8DmnUXI+vXrlYhY3pDez3/+czVgwABVVFSkRo0axRRsH+x+/9avXx920yKP6ez+bd26VQ0fPlwVFxerIUOGqHXr1oXdpEhqbGxU8+fPV/3791ddunRRp59+uvrxj3+smpqawm5a3nv22Wct/9949dVXK6W0Ke1VVVWqT58+qri4WH3zm99Ur732mqf3SCilVOYZDQAAIP8xsAUAAMQGwQcAAMQGwQcAAMQGwQcAAMQGwQcAAMQGwQcAAMQGwQcAAMQGwQcAAMQGwQcAAMQGwQdA5Dz66KPSpUsXOXjwYNu266+/XkaMGCENDQ0htgxAvuOSFQAiRyklI0eOlAkTJsiqVavktttuk1/84hfywgsvyGmnnRZ28wDksVhenR1AtCUSCbn99ttlxowZ0rdvX7n33ntlx44dbaHnkksukeeee04uuOAC+e1vfxtyawHkEyo+ACJr1KhR8vrrr8vTTz8t559/ftv2Z599Vj7//HN5+OGHCT4AUjDGB0Ak/eEPf5C9e/dKS0uL9O7dO+W5iRMnSvfu3UNqGYB8RvABEDl79uyRSy+9VNauXStTpkyRysrKsJsEICIY4wMgUt5//3256KKL5JZbbpErr7xSzjrrLPnGN74hu3fvltGjR4fdPAB5jooPgMj45JNP5MILL5SLL75Ybr31VhERGT16tEydOlV+/OMfh9w6AFFAxQdAZPTo0UPefPPNDtt/97vfhdAaAFHErC4ABWfKlCmyZ88eOXr0qPTo0UO2bNki3/jGN8JuFoA8QPABAACxwRgfAAAQGwQfAAAQGwQfAAAQGwQfAAAQGwQfAAAQGwQfAAAQGwQfAAAQGwQfAAAQGwQfAAAQGwQfAAAQGwQfAAAQG/8ft6pLufIaL4YAAAAASUVORK5CYII=", "text/plain": [ "Figure(PyObject
)" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Generate dataset {(x1,y1),...,(xN,yN)}\n", "# x is a 2-d feature vector [x_1;x_2]\n", "# y ∈ {false,true} is a binary class label\n", "# p(x|y) is multi-modal (mixture of uniform and Gaussian distributions)\n", "using PyPlot\n", "include(\"scripts/lesson8_helpers.jl\")\n", "N = 200\n", "X, y = genDataset(N) # Generate data set, collect in matrix X and vector y\n", "X_c1 = X[:,findall(.!y)]'; X_c2 = X[:,findall(y)]' # Split X based on class label\n", "X_test = [3.75; 1.0] # Features of 'new' data point\n", "function plotDataSet()\n", " plot(X_c1[:,1], X_c1[:,2], \"bx\", markersize=8)\n", " plot(X_c2[:,1], X_c2[:,2], \"r+\", markersize=8, fillstyle=\"none\")\n", " plot(X_test[1], X_test[2], \"ko\") \n", " xlabel(L\"x_1\"); ylabel(L\"x_2\"); legend([L\"y=0\", L\"y=1\",L\"y=?\"], loc=2)\n", " xlim([-2;10]); ylim([-4, 8])\n", "end\n", "plotDataSet();" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Main Idea of Discriminative Classification \n", "\n", "- Again, a data set is given by $D = \\{(x_1,y_1),\\dotsc,(x_N,y_N)\\}$ with $x_n \\in \\mathbb{R}^D$ and $y_n \\in \\mathcal{C}_k$, with $k=1,\\ldots,K$." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Sometimes, the precise assumptions of the (multinomial-Gaussian) generative model $$p(x_n,\\mathcal{C}_k|\\theta) = \\pi_k \\cdot \\mathcal{N}(x_n|\\mu_k,\\Sigma)$$ clearly do not match the data distribution." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Here's an **IDEA**! Let's model the posterior $$p(\\mathcal{C}_k|x_n)$$ _directly_, without any assumptions on the class densities." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Of course, this implies also that we build direct models for the **discrimination boundaries** \n", " $$\\log \\frac{p(\\mathcal{C}_k|x_n)}{p(\\mathcal{C}_j|x_n)} \\overset{!}{=} 0$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 1. Model Specification \n", "\n", "- [Q.] What model should we use for $p(\\mathcal{C}_k|x_n)$?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- [A.] Get inspiration from the generative approach: choose the familiar softmax structure **with linear discrimination bounderies** for the posterior class probability\n", "$$\n", "p(\\mathcal{C}_k|x_n,\\theta) = \\frac{e^{\\theta_k^T x_n}}{\\sum_j e^{\\theta_j^T x_n}}\n", "$$\n", "but **do not impose a Gaussian structure on the class features**." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- $\\Rightarrow$ There are **two key differences** between the discriminative and generative approach: \n", " 1. In the discriminative approach, the parameters $\\theta_k$ are **not** structured into $\\{\\mu_k,\\Sigma,\\pi_k \\}$. This provides discriminative approach with more flexibility.\n", " 2. ML learning for the discriminative approach by optimization of _conditional_ likelihood $\\prod_n p(y_n|x_n,\\theta)$ rather than _joint_ likelihood $\\prod_n p(y_n,x_n|\\theta)$." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ " ### 2. ML Estimation for Discriminative Classification\n", " \n", "\n", "- The conditional log-likelihood for discriminative classification is \n", "\n", " $$\n", " \\mathrm{L}(\\theta) = \\log \\prod_n \\prod_k {p(\\mathcal{C}_k|x_n,\\theta)}^{y_{nk}} \n", " $$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ " \n", "- Computing the gradient $\\nabla_{\\theta_k} \\mathrm{L}(\\theta)$ (NB: revised text) leads to (for proof, see next slide) \n", "\n", "$$\n", "\\nabla_{\\theta_k} \\mathrm{L}(\\theta) = \\sum_n \\Big( \\underbrace{y_{nk}}_{\\text{target}} - \\underbrace{\\frac{e^{\\theta_k^T x_n}}{ \\sum_j e^{\\theta_j^T x_n}}}_{\\text{prediction}} \\Big)\\cdot x_n \n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ " \n", "- Compare this to the gradient for _linear_ regression:\n", "\n", "$$\n", "\\nabla_\\theta \\mathrm{L}(\\theta) = \\sum_n \\left(y_n - \\theta^T x_n \\right) x_n\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- In both cases\n", "\n", "$$\n", "\\nabla_\\theta \\mathrm{L} = \\sum_n \\left( \\text{target}_n - \\text{prediction}_n \\right) \\cdot \\text{input}_n \n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- The parameter vector $\\theta$ for logistic regression can be estimated through iterative gradient-based adaptation. E.g. (with iteration index $i$),\n", "\n", "$$\n", "\\hat{\\theta}^{(i+1)} = \\hat{\\theta}^{(i)} + \\eta \\cdot \\left. \\nabla_\\theta \\mathrm{L}(\\theta) \\right|_{\\theta = \\hat{\\theta}^{(i)}}\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ " ### 2. (OPTIONAL) Proof of Derivative of Log-likelihood for Discriminative Classification\n", "\n", "\n", "- The Log-likelihood is $\n", " \\mathrm{L}(\\theta) = \\log \\prod_n \\prod_k {\\underbrace{p(\\mathcal{C}_k|x_n,\\theta)}_{p_{nk}}}^{y_{nk}} = \\sum_{n,k} y_{nk} \\log p_{nk}$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ " \n", "- Use the fact that the softmax $\\phi_k \\equiv e^{a_k} / {\\sum_j e^{a_j}}$ has analytical derivative:\n", "\n", "$$ \\begin{align*}\n", " \\frac{\\partial \\phi_k}{\\partial a_j} &= \\frac{(\\sum_j e^{a_j})e^{a_k}\\delta_{kj}-e^{a_j}e^{a_k}}{(\\sum_j e^{a_j})^2} = \\frac{e^{a_k}}{\\sum_j e^{a_j}}\\delta_{kj} - \\frac{e^{a_j}}{\\sum_j e^{a_j}} \\frac{e^{a_k}}{\\sum_j e^{a_j}}\\\\\n", " &= \\phi_k \\cdot(\\delta_{kj}-\\phi_j)\n", " \\end{align*}$$\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ " - Take the derivative of $\\mathrm{L}(\\theta)$ (or: how to spend a hour ...)\n", "$$\\begin{align*} \n", "\\nabla_{\\theta_j} \\mathrm{L}(\\theta) &= \\sum_{n,k} \\frac{\\partial \\mathrm{L}_{nk}}{\\partial p_{nk}} \\cdot\\frac{\\partial p_{nk}}{\\partial a_{nj}}\\cdot\\frac{\\partial a_{nj}}{\\partial \\theta_j} \\\\\n", " &= \\sum_{n,k} \\frac{y_{nk}}{p_{nk}} \\cdot p_{nk} (\\delta_{kj}-p_{nj}) \\cdot x_n \\\\\n", " &= \\sum_n \\Big( y_{nj} (1-p_{nj}) -\\sum_{k\\neq j} y_{nk} p_{nj} \\Big) \\cdot x_n \\\\\n", " &= \\sum_n \\left( y_{nj} - p_{nj} \\right)\\cdot x_n \\\\\n", " &= \\sum_n \\Big( \\underbrace{y_{nj}}_{\\text{target}} - \\underbrace{\\frac{e^{\\theta_j^T x_n}}{\\sum_{j^\\prime} e^{\\theta_{j^\\prime}^T x_n}}}_{\\text{prediction}} \\Big)\\cdot x_n \n", "\\end{align*}$$\n", " " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 3. Application - Classify a new input\n", "\n", "- Discriminative model-based prediction for a new input $x_\\bullet$ is easy, namely substitute the ML estimate in the model to get\n", "\n", "$$\n", "p(\\mathcal{C}_k |\\, x_\\bullet,\\hat\\theta) = \\frac{ \\mathrm{exp}\\left( \\hat \\theta_k^T x_\\bullet \\right) }{ \\sum_{k^\\prime} \\mathrm{exp}\\left(\\hat \\theta_{k^\\prime}^T x_\\bullet \\right)} \n", " \\propto \\mathrm{exp}\\left(\\hat \\theta_k^T x_\\bullet\\right) \n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- The contours of equal probability (**discriminant boundaries**) are lines (hyperplanes) in feature space given by\n", "$$\n", "\\log \\frac{{p(\\mathcal{C}_k|x,\\hat \\theta )}}{{p(\\mathcal{C}_j|x,\\hat \\theta )}} = \\left( \\hat{\\theta}_{k} - \\hat{\\theta}_j\\right) ^T x = 0\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#### CODE EXAMPLE\n", "\n", "Let us perform ML estimation of $\\theta$ on the data set from the introduction. To allow an offset in the discrimination boundary, we add a constant 1 to the feature vector $x$. We only have to specify the (negative) log-likelihood and the gradient w.r.t. $\\theta$. Then, we use an off-the-shelf optimisation library to minimize the negative log-likelihood.\n", "\n", "We plot the resulting maximum likelihood discrimination boundary. For comparison we also plot the ML discrimination boundary obtained from the generative Gaussian classifier from lesson 7." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "Figure(PyObject
)" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "using Optim # Optimization library\n", "\n", "y_1 = zeros(length(y))# class 1 indicator vector\n", "y_1[findall(y)] .= 1\n", "X_ext = vcat(X, ones(1, length(y))) # Extend X with a row of ones to allow an offset in the discrimination boundary\n", "\n", "# Implement negative log-likelihood function\n", "function negative_log_likelihood(θ::Vector)\n", " # Return negative log-likelihood: -L(θ)\n", " p_1 = 1.0 ./ (1.0 .+ exp.(-X_ext' * θ)) # P(C1|X,θ)\n", " return -sum(log.( (y_1 .* p_1) + ((1 .- y_1).*(1 .- p_1))) ) # negative log-likelihood\n", "end\n", "\n", "# Use Optim.jl optimiser to minimize the negative log-likelihood function w.r.t. θ\n", "results = optimize(negative_log_likelihood, zeros(3), LBFGS())\n", "θ = results.minimizer\n", "\n", "# Plot the data set and ML discrimination boundary\n", "plotDataSet()\n", "p_1(x) = 1.0 ./ (1.0 .+ exp(-([x;1.]' * θ)))\n", "boundary(x1) = -1 ./ θ[2] * (θ[1]*x1 .+ θ[3])\n", "plot([-2.;10.], boundary([-2.; 10.]), \"k-\");\n", "# # Also fit the generative Gaussian model from lesson 7 and plot the resulting discrimination boundary for comparison\n", "generative_boundary = buildGenerativeDiscriminationBoundary(X, y)\n", "plot([-2.;10.], generative_boundary([-2;10]), \"k:\");\n", "legend([L\"y=0\";L\"y=1\";L\"y=?\";\"Discr. boundary\";\"Gen. boundary\"], loc=3);" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Given $\\hat{\\theta}$, we can classify a new input $x_\\bullet = [3.75, 1.0]^T$:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "P(C1|x•,θ) = 0.5982499473948646\n" ] } ], "source": [ "x_test = [3.75;1.0]\n", "println(\"P(C1|x•,θ) = $(p_1(x_test))\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- The generative model gives a bad result because the feature distribution of one class is clearly non-Gaussian: the model does not fit the data well. " ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "slideshow": { "slide_type": "fragment" } }, "source": [ "- The discriminative approach does not suffer from this problem because it makes no assumptions about the feature distribition $p(x|y)$, it just estimates the conditional class distribution $p(y|x)$ directly." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Recap Classification\n", "\n", "\n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "
Generative Discriminative
1Like density estimation, model joint prob.\n", "$$p(\\mathcal{C}_k) p(x|\\mathcal{C}_k) = \\pi_k \\mathcal{N}(\\mu_k,\\Sigma)$$ Like (linear) regression, model conditional\n", "$$p(\\mathcal{C}_k|x,\\theta)$$
2Leads to softmax posterior class probability\n", "$$ p(\\mathcal{C}_k|x,\\theta ) = e^{\\theta_k^T x}/Z$$\n", "with structured $\\theta$ Choose also softmax posterior class probability\n", "$$ p(\\mathcal{C}_k|x,\\theta ) = e^{\\theta_k^T x}/Z$$\n", "but now with 'free' $\\theta$
3For Gaussian $p(x|\\mathcal{C}_k)$ and multinomial priors,\n", "$$\\hat \\theta_k = \\left[ {\\begin{array}{c}\n", " { - \\frac{1}{2} \\mu_k^T \\sigma^{-1} \\mu_k + \\log \\pi_k} \\\\\n", " {\\sigma^{-1} \\mu_k } \\\\\n", "\\end{array}} \\right]$$\n", "in one shot. Find $\\hat\\theta_k$ through gradient-based adaptation\n", "$$\\nabla_{\\theta_k}\\mathrm{L}(\\theta) = \\sum_n \\Big( y_{nk} - \\frac{e^{\\theta_k^T x_n}}{\\sum_{k^\\prime} e^{\\theta_{k^\\prime}^T x_n}} \\Big)\\, x_n$$
\n", "\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "open(\"../../styles/aipstyle.html\") do f\n", " display(\"text/html\", read(f,String))\n", "end" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Julia 1.1.0", "language": "julia", "name": "julia-1.1" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.1.0" } }, "nbformat": 4, "nbformat_minor": 1 }