{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Generative Classification" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Preliminaries\n", "\n", "- Goal \n", " - Introduction to linear generative classification with a Gaussian-categorical generative model\n", " \n", "- Materials \n", " - Mandatory\n", " - These lecture notes\n", " - Optional\n", " - Bishop pp. 196-202 (section 4.2 focusses on binary classification, whereas in these lecture notes we describe generative classification for multiple classes). " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Challenge: an apple or a peach?\n", "\n", "- **Problem**: You're given numerical values for the skin features roughness and color for 200 pieces of fruit, where for each piece of fruit you also know if it is an apple or a peach. Now you receive the roughness and color values for a new piece of fruit but you don't get its class label (apple or peach). What is the probability that the new piece is an apple?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- **Solution**: To be solved later in this lesson.\n", "\n", "- Let's first generate a data set (see next slide)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "using Pkg;Pkg.activate(\"probprog/workspace/\");Pkg.instantiate();\n", "IJulia.clear_output();" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "Figure(PyObject
)" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "using Distributions, PyPlot\n", "N = 250; p_apple = 0.7; Σ = [0.2 0.1; 0.1 0.3]\n", "p_given_apple = MvNormal([1.0, 1.0], Σ) # p(X|y=apple)\n", "p_given_peach = MvNormal([1.7, 2.5], Σ) # p(X|y=peach)\n", "X = Matrix{Float64}(undef,2,N); y = Vector{Bool}(undef,N) # true corresponds to apple\n", "for n=1:N\n", " y[n] = (rand() < p_apple) # Apple or peach?\n", " X[:,n] = y[n] ? rand(p_given_apple) : rand(p_given_peach) # Sample features\n", "end\n", "X_apples = X[:,findall(y)]'; X_peaches = X[:,findall(.!y)]' # Sort features on class\n", "x_test = [2.3; 1.5] # Features of 'new' data point\n", "\n", "function plot_fruit_dataset()\n", " # Plot the data set and x_test\n", " plot(X_apples[:,1], X_apples[:,2], \"r+\") # apples\n", " plot(X_peaches[:,1], X_peaches[:,2], \"bx\") # peaches\n", " plot(x_test[1], x_test[2], \"ko\") # 'new' unlabelled data point\n", " legend([\"Apples\"; \"Peaches\"; \"Apple or peach?\"], loc=2)\n", " xlabel(L\"x_1\"); ylabel(L\"x_2\"); xlim([-1,3]); ylim([-1,4])\n", "end\n", "plot_fruit_dataset();" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Generative Classification Problem Statement\n", "\n", "- Given is a data set $D = \\{(x_1,y_1),\\dotsc,(x_N,y_N)\\}$\n", " - inputs $x_n \\in \\mathbb{R}^M$ are called **features**.\n", " - outputs $y_n \\in \\mathcal{C}_k$, with $k=1,\\ldots,K$; The **discrete** targets $\\mathcal{C}_k$ are called **classes**." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- We will again use the 1-of-$K$ notation for the discrete classes. Define the binary **class selection variable**\n", "$$\n", "y_{nk} = \\begin{cases} 1 & \\text{if } \\, y_n \\in \\mathcal{C}_k\\\\\n", "0 & \\text{otherwise} \\end{cases}\n", "$$\n", " - (Hence, the notations $y_{nk}=1$ and $y_n \\in \\mathcal{C}_k$ mean the same thing.)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- The plan for generative classification: build a model for the joint pdf $p(x,y)= p(x|y)p(y)$ and use Bayes to infer the posterior class probabilities \n", "\n", "$$\n", "p(y|x) = \\frac{p(x|y) p(y)}{\\sum_{y^\\prime} p(x|y^\\prime) p(y^\\prime)} \\propto p(x|y)\\,p(y)\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 1 - Model specification \n", "\n", "##### Likelihood\n", "\n", "- Assume Gaussian **class-conditional distributions** with **equal covariance matrix** across the classes,\n", " $$\n", " p(x_n|\\mathcal{C}_{k}) = \\mathcal{N}(x_n|\\mu_k,\\Sigma)\n", " $$\n", "with notational shorthand: $\\mathcal{C}_{k} \\triangleq (y_n \\in \\mathcal{C}_{k})$." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "##### Prior\n", "\n", "- We use a categorical distribution for the class labels $y_{nk}$: \n", "$$p(\\mathcal{C}_{k}) = \\pi_k$$\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Hence, using the one-hot coding formulation for $y_{nk}$, the generative model $p(x_n,y_n)$ can be written as\n", "\n", "$$\\begin{align*}\n", " p(x_n,y_n) &= \\prod_{k=1}^K p(x_n,y_{nk}=1)^{y_{nk}} \\\\\n", " &= \\prod_{k=1}^K \\left( \\pi_k \\cdot\\mathcal{N}(x_n|\\mu_k,\\Sigma)\\right)^{y_{nk}}\n", "\\end{align*}$$\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- We will refer to this model as the **Gaussian-Categorical Model** (GCM). \n", " - N.B. In the literature, this model (with possibly unequal $\\Sigma_k$ across classes) is often called the Gaussian Discriminant Analysis model and the special case with equal covariance matrices $\\Sigma_k=\\Sigma$ is also called Linear Discriminant Analysis. We think these names are a bit unfortunate as it may lead to confusion with the [discriminative method for classification](https://nbviewer.org/github/bertdv/BMLIP/blob/master/lessons/notebooks/Discriminative-Classification.ipynb)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- As usual, once the model has been specified, the rest (inference for parameters and model prediction) through straight probability theory." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Computing the log-likelihood\n", "\n", "- The log-likelihood given the full data set $D=\\{(x_n,y_n), n=1,2,\\ldots,N\\}$ is then\n", "$$\\begin{align*}\n", "\\log\\, p(D|\\theta) &\\stackrel{\\text{IID}}{=} \\sum_n \\log \\prod_k p(x_n,y_{nk}=1\\,|\\,\\theta)^{y_{nk}} \\\\\n", " &= \\sum_{n,k} y_{nk} \\log p(x_n,y_{nk}=1\\,|\\,\\theta) \\\\\n", " &= \\sum_{n,k} y_{nk} \\log p(x_n|y_{nk}=1) + \\sum_{n,k} y_{nk} \\log p(y_{nk}=1) \\\\\n", " &= \\sum_{n,k} y_{nk} \\log\\mathcal{N}(x_n|\\mu_k,\\Sigma) + \\sum_{n,k} y_{nk} \\log \\pi_k \\\\\n", " &= \\sum_{n,k} y_{nk} \\underbrace{ \\log\\mathcal{N}(x_n|\\mu_k,\\Sigma) }_{ \\text{see Gaussian est.} } + \\underbrace{ \\sum_k m_k \\log \\pi_k }_{ \\text{see multinomial est.} } \n", "\\end{align*}$$\n", "where we used $m_k \\triangleq \\sum_n y_{nk}$." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 2 - Parameter Inference for Classification\n", "\n", "- We'll do Maximum Likelihood estimation for $\\theta = \\{ \\pi_k, \\mu_k, \\Sigma \\}$ from data $D$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Recall (from the previous slide) the log-likelihood (LLH)\n", "\n", "$$\n", "\\log\\, p(D|\\theta) = \\sum_{n,k} y_{nk} \\underbrace{ \\log\\mathcal{N}(x_n|\\mu_k,\\Sigma) }_{ \\text{Gaussian} } + \\underbrace{ \\sum_k m_k \\log \\pi_k }_{ \\text{multinomial} } \n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Maximization of the LLH for the GDA model breaks down into\n", " - **Gaussian density estimation** for parameters $\\mu_k, \\Sigma$, since the first term contains exactly the log-likelihood for MVG density estimation. We've already done this, see the [Gaussian distribution lesson](https://nbviewer.jupyter.org/github/bertdv/BMLIP/blob/master/lessons/notebooks/The-Gaussian-Distribution.ipynb#ML-for-Gaussian).\n", " - **Multinomial density estimation** for class priors $\\pi_k$, since the second term holds exactly the log-likelihood for multinomial density estimation, see the [Multinomial distribution lesson](https://nbviewer.jupyter.org/github/bertdv/BMLIP/blob/master/lessons/notebooks/The-Multinomial-Distribution.ipynb#ML-for-multinomial). \n", " " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ " - The ML for multinomial class prior (we've done this before!)\n", "$$\\begin{align*} \n", "\\hat \\pi_k = \\frac{m_k}{N} \n", "\\end{align*}$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Now group the data into separate classes and do MVG ML estimation for class-conditional parameters (we've done this before as well):\n", "$$\\begin{align*}\n", " \\hat \\mu_k &= \\frac{ \\sum_n y_{nk} x_n} { \\sum_n y_{nk} } = \\frac{1}{m_k} \\sum_n y_{nk} x_n \\\\\n", " \\hat \\Sigma &= \\frac{1}{N} \\sum_{n,k} y_{nk} (x_n-\\hat \\mu_k)(x_n-\\hat \\mu_k)^T \\\\\n", " &= \\sum_k \\hat \\pi_k \\cdot \\underbrace{ \\left( \\frac{1}{m_k} \\sum_{n} y_{nk} (x_n-\\hat \\mu_k)(x_n-\\hat \\mu_k)^T \\right) }_{ \\text{class-cond. variance} } \\\\\n", " &= \\sum_k \\hat \\pi_k \\cdot \\hat \\Sigma_k\n", "\\end{align*}$$\n", "where $\\hat \\pi_k$, $\\hat{\\mu}_k$ and $\\hat{\\Sigma}_k$ are the sample proportion, sample mean and sample variance for the $k$th class, respectively." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Note that the binary class selection variable $y_{nk}$ groups data from the same class." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 3 - Application: Class prediction for new Data\n", "\n", "- Let's apply the trained model to predict the class for given a 'new' input $x_\\bullet$:\n", "$$\\begin{align*}\n", "p(\\mathcal{C}_k|x_\\bullet,D ) &= \\int p(\\mathcal{C}_k|x_\\bullet,\\theta ) \\underbrace{p(\\theta|D)}_{\\text{ML: }\\delta(\\theta - \\hat{\\theta})} \\mathrm{d}\\theta \\\\\n", "&= p(\\mathcal{C}_k|x_\\bullet,\\hat{\\theta} ) \\\\\n", "&\\propto p(\\mathcal{C}_k)\\,p(x_\\bullet|\\mathcal{C}_k) \\\\\n", "&= \\hat{\\pi}_k \\cdot \\mathcal{N}(x_\\bullet | \\hat{\\mu}_k, \\hat{\\Sigma}) \\\\\n", " &\\propto \\hat{\\pi}_k \\exp \\left\\{ { - {\\frac{1}{2}}(x_\\bullet - \\hat{\\mu}_k )^T \\hat{\\Sigma}^{ - 1} (x_\\bullet - \\hat{\\mu}_k )} \\right\\}\\\\\n", " &=\\exp \\Big\\{ \\underbrace{-\\frac{1}{2}x_\\bullet^T \\hat{\\Sigma}^{ - 1} x_\\bullet}_{\\text{not a function of }k} + \\hat{\\mu}_k^T \\hat{\\Sigma}^{-1} x_\\bullet - {\\frac{1}{2}}\\hat{\\mu}_k^T \\hat{\\Sigma}^{ - 1} \\hat{\\mu}_k + \\log \\hat{\\pi}_k \\Big\\} \\\\\n", " &\\propto \\frac{1}{Z}\\exp\\{\\beta_k^T x_\\bullet + \\gamma_k\\} \\\\\n", " &\\triangleq \\sigma\\left( \\beta_k^T x_\\bullet + \\gamma_k\\right)\n", "\\end{align*}$$\n", "where \n", "$\\sigma(a_k) \\triangleq \\frac{\\exp(a_k)}{\\sum_{k^\\prime}\\exp(a_{k^\\prime})}$ is called a [**softmax**](https://en.wikipedia.org/wiki/Softmax_function) (a.k.a. **normalized exponential**) function, and\n", "$$\\begin{align*}\n", "\\beta_k &= \\hat{\\Sigma}^{-1} \\hat{\\mu}_k \\\\\n", "\\gamma_k &= - \\frac{1}{2} \\hat{\\mu}_k^T \\hat{\\Sigma}^{-1} \\hat{\\mu}_k + \\log \\hat{\\pi}_k \\\\\n", "Z &= \\sum_{k^\\prime}\\exp\\{\\beta_{k^\\prime}^T x_\\bullet + \\gamma_{k^\\prime}\\}\\,. \\quad \\text{(normalization constant)} \n", "\\end{align*}$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- The softmax function is a smooth approximation to the max-function. Note that we did not a priori specify a softmax posterior, but rather it followed from applying Bayes rule to the prior and likelihood assumptions. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Note the following properties of the softmax function $\\sigma(a_k)$:\n", " - $\\sigma(a_k)$ is monotonicaly ascending function and hence it preserves the order of $a_k$. That is, if $a_j>a_k$ then $\\sigma(a_j)>\\sigma(a_k)$. \n", " - $\\sigma(a_k)$ is always a proper probability distribution, since $\\sigma(a_k)>0$ and $\\sum_k \\sigma(a_k) = 1$. \n", " " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Discrimination Boundaries\n", "\n", "- The class log-posterior $\\log p(\\mathcal{C}_k|x) \\propto \\beta_k^T x + \\gamma_k$ is a linear function of the input features." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Thus, the contours of equal probability (**discriminant functions**) are lines (hyperplanes) in the feature space\n", "$$\n", "\\log \\frac{{p(\\mathcal{C}_k|x,\\theta )}}{{p(\\mathcal{C}_j|x,\\theta )}} = \\beta_{kj}^T x + \\gamma_{kj} = 0\n", "$$\n", "where we defined $\\beta_{kj} \\triangleq \\beta_k - \\beta_j$ and similarly for $\\gamma_{kj}$." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- How to classify a new input $x_\\bullet$? The Bayesian answer is a posterior distribution $ p(\\mathcal{C}_k|x_\\bullet)$. If you must choose, then the class with maximum posterior class probability\n", "$$\\begin{align*}\n", "k^* &= \\arg\\max_k p(\\mathcal{C}_k|x_\\bullet) \\\\\n", " &= \\arg\\max_k \\left( \\beta _k^T x_\\bullet + \\gamma_k \\right)\n", "\\end{align*}$$\n", "is an appealing decision. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Code Example: Working out the \"apple or peach\" example problem\n", "\n", "We'll apply the above results to solve the \"apple or peach\" example problem." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "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fcaMGfLmm29GPX7NmjVSWFjY+zFy5MhsNRVIjqn4AOAoT4WgYDAo586dk6KiorDtRUVFcuxY9CJmy5cvl+7u7t6Pjz/+OFtNhZ8Fg9qwiP4hEv51ojVkWGfG2+jdAzzFczVBIiJ5eeHL1iuloraJiBQUFEhBQUG2mgVoMimUZZ0Zb9N79wB4gqdCUCAQkL59+0b1+nzyySdRvUOAYyiUBQBP8FQIys/Pl8rKStm6davU1tb2bt+6davMnj3bwZYBBqlOg2edGQBwhKdCkIjI0qVLpa6uTiZOnCg1NTXy1FNPSUdHh9x1111ONw1ID+vMAIAjPBeCbr31Vjlx4oT8/Oc/l6NHj8qll14qf/rTn2TUqFFONw2IZqZQluEzAHCE50KQiMjdd98td999t9PNAJIzUyjLKtIA4AhPTZEH4CMsFwDAZoQgwE1YZyYk0WrbAGABTw6HATmLdWYAIGsIQQDcg+UCYuNGvIAtCEEA3IPlAmJjJXHAFoQgAO7BcgEAsogQBMA9WC4ghKFBwHaEIABwI4YGAdsRggC4k9+XC2BoELAdIQiAO/l9uQCGBgHbsVgiAADwJUIQALid34cGAZsQggBAxN33KtOHBglBgKUIQQAgwr3KAB8iBAHITW7u2QHgCswOA5CbzNxqggUJAV8jBAHwLxYkBHyNEAQgd6Tas8OChICvEYIA5I5Ue3ZYkBDwNUIQAPOCQS1o3HSTO3tJ6NkBkAJCEADzzBQbOymTnh0WJAR8hxAEACLcqwzwIUIQgMS8Oo2cnh0ASRCCACTm1Wnk9OwASIIQBCAxio0B5ChCEIDEmEYOIEdx7zAAAOBLhCAA5lFsDCCHMBwGwDyKjQHkEHqCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACALxGCAACAL3kmBD344IMyadIkGThwoAwZMsTp5gAAAI/zTAg6e/as3HLLLbJo0SKnmwIAAHJAP6cbYNaqVatERGTTpk2mn9PT0yM9PT29X3d3d4uIyMlPPxU5fdrS9gEAAHucPHNGRESUUpa+rmdCUDrWrFnTG56MRt5+uwOtAQAAmThx4oQUFhZa9no5HYKWL18uS5cu7f26q6tLRo0aJR0dHZYeRLc7efKkjBw5Uj7++GM577zznG5O1rDf7LcfsN/stx90d3dLSUmJDBs2zNLXdTQErVy5MmZPjVFLS4tMnDgxrdcvKCiQgoKCqO2FhYW++uHRnXfeeey3j7Df/sJ++4tf97tPH2tLmR0NQYsXL5bbbrst4WNGjx6dncYAAABfcTQEBQIBCQQCTjYBAAD4VN+VK1eudLoRZnR0dEh7e7u8/fbb8sYbb8i1114rx44dk0GDBkl+fr7p1+nbt69MnTpV+vXL6XKoKOw3++0H7Df77Qfst3X7naesnm9mk+9///vyzDPPRG1vamqSqVOnZr9BAADA0zwTggAAAKzkmRWjAQAArEQIAgAAvkQIAgAAvkQIAgAAvpTzIejBBx+USZMmycCBA2XIkCGmnqOUkpUrV8qIESPkK1/5ikydOlUOHjxoc0ut1dnZKXV1dVJYWCiFhYVSV1cnXV1dCZ8zdepUycvLC/tItpil05544gkZM2aMDBgwQCorK2Xnzp0JH9/Q0CDjxo2TgoICGTdunDQ2NmappdZKZb83bdoUdV7z8vLks88+y2KLM7djxw654YYbZMSIEZKXlyd/+MMfkj6nublZKisrZcCAAfL1r39dnnzyySy01Fqp7vf27dtjnu+2trYstThza9askaqqKhk8eLBccMEFcuONN8oHH3yQ9Hlef3+ns9+58P5ev369lJeX966CXVNTI3/+858TPseqc53zIejs2bNyyy23yKJFi0w/56GHHpJHHnlEHn/8cWlpaZHi4mL5zne+I6dOnbKxpdb63ve+J/v375dXX31VXn31Vdm/f7/U1dUlfd6CBQvk6NGjvR/19fVZaG16XnzxRVmyZIncf//90traKpMnT5ZZs2ZJR0dHzMfv2rVLbr31Vqmrq5N33nlH6urqZM6cOfLWW29lueWZSXW/RbQl9o3n9ejRozJgwIAstjpzZ86ckcsvv1wef/xxU49vb2+Xa6+9ViZPniytra2yYsUKueeee6ShocHmllor1f3WffDBB2Hne+zYsTa10HrNzc3ywx/+UHbv3i1bt26VL774QmbMmCFn/nMn8Vhy4f2dzn6LeP/9fdFFF8natWtlz549smfPHpk2bZrMnj07bueDpeda+cTTTz+tCgsLkz7uyy+/VMXFxWrt2rW92z777DNVWFionnzySTubaJlDhw4pEVG7d+/u3bZr1y4lIqqtrS3u86ZMmaLuvffebDTREt/61rfUXXfdFbatrKxMLVu2LObj58yZo6655pqwbTNnzlS33XabbW20Q6r7bfZn30tERDU2NiZ8zH333afKysrCti1cuFBVV1fb2TRbmdnvpqYmJSKqs7MzS62y3yeffKJERDU3N8d9TK68v43M7Hcuvr+VUmro0KFqw4YNMb9n5bnO+Z6gVLW3t8uxY8dkxowZvdsKCgpkypQp8uabbzrYMvN27dolhYWF8u1vf7t3W3V1tRQWFibdh+eee04CgYBccskl8pOf/MS1vV9nz56VvXv3hp0nEZEZM2bE3cddu3ZFPX7mzJmeOa8i6e23iMjp06dl1KhRctFFF8n1118vra2tdjfVcfHO9549e+Tzzz93qFXZM2HCBBk+fLhMnz5dmpqanG5ORrq7u0VEEt5BPBfe35HM7LdIbr2/z507Jy+88IKcOXNGampqYj7GynPtrzW3TTh27JiIiBQVFYVtLyoqko8++siJJqXs2LFjcsEFF0Rtv+CCC3r3L5a5c+fKmDFjpLi4WN577z1Zvny5vPPOO7J161Y7m5uWYDAo586di3me4u3jsWPHUnq8G6Wz32VlZbJp0ya57LLL5OTJk7Ju3Tq54oor5J133vHUEEmq4p3vL774QoLBoAwfPtyhltlr+PDh8tRTT0llZaX09PTI7373O5k+fbps375drrrqKqeblzKllCxdulSuvPJKufTSS+M+Lhfe30Zm9ztX3t/vvvuu1NTUyGeffSaDBg2SxsZGGTduXMzHWnmuPRmCVq5cKatWrUr4mJaWFpk4cWLa/0deXl7Y10qpqG3ZZna/RaLbL5J8HxYsWND770svvVTGjh0rEydOlH379klFRUWarbZXqufJjec1HansR3V1tVRXV/d+fcUVV0hFRYU89thj8utf/9rWdjot1nGKtT2XlJaWSmlpae/XNTU18vHHH8svf/lLT4agxYsXy4EDB+SNN95I+thceX+LmN/vXHl/l5aWyv79+6Wrq0saGhpk3rx50tzcHDcIWXWuPRmCFi9enHTW0ujRo9N67eLiYhHRkqbxL8VPPvkkKnlmm9n9PnDggBw/fjzqe//6179S2oeKigrp37+/HD582HUhKBAISN++faOSf6LzVFxcnNLj3Sid/Y7Up08fqaqqksOHD9vRRNeId7779esnX/va1xxqlTOqq6vl2WefdboZKfvRj34kf/zjH2XHjh1y0UUXJXxsLry/dansdySvvr/z8/PlG9/4hoiITJw4UVpaWmTdunUxJ+dYea49WRMUCASkrKws4Ue6lfH6cJBxCOjs2bPS3NwskyZNsmoX0mJ2v2tqaqS7u1vefvvt3ue+9dZb0t3dndI+HDx4UD7//HNXDhvk5+dLZWVl1FDd1q1b4+5jTU1N1ONff/11x89rKtLZ70hKKdm/f78rz6uV4p3viRMnSv/+/R1qlTNaW1s9db6VUrJ48WLZvHmzbNu2TcaMGZP0Obnw/k5nv2O9Ri68v5VS0tPTE/N7lp7rlEupPeajjz5Sra2tatWqVWrQoEGqtbVVtba2qlOnTvU+prS0VG3evLn367Vr16rCwkK1efNm9e6776rbb79dDR8+XJ08edKJXUjLNddco8rLy9WuXbvUrl271GWXXaauv/763u//4x//UKWlpeqtt95SSin14YcfqlWrVqmWlhbV3t6utmzZosrKytSECRPUF1984dRuJPTCCy+o/v37q40bN6pDhw6pJUuWqK9+9avqyJEjSiml6urqwmZM/eUvf1F9+/ZVa9euVe+//75au3at6tevX9gsOi9Idb9XrlypXn31VfW3v/1Ntba2qjvuuEP169ev99x7xalTp3rfvyKiHnnkEdXa2qo++ugjpZRSy5YtU3V1db2P//vf/64GDhyofvzjH6tDhw6pjRs3qv79+6uXX37ZqV1IS6r7/atf/Uo1Njaqv/71r+q9995Ty5YtUyKiGhoanNqFlC1atEgVFhaq7du3q6NHj/Z+fPrpp72PycX3dzr7nQvv7+XLl6sdO3ao9vZ2deDAAbVixQrVp08f9frrryul7D3XOR+C5s2bp0Qk6qOpqan3MSKinn766d6vv/zyS/Wzn/1MFRcXq4KCAnXVVVepd999N/uNz8CJEyfU3Llz1eDBg9XgwYPV3Llzw6bMtre3hx2Hjo4OddVVV6lhw4ap/Px8dfHFF6t77rlHnThxwqE9MOc3v/mNGjVqlMrPz1cVFRVhU0mnTJmi5s2bF/b43//+96q0tFT1799flZWVeerCYJTKfi9ZskSVlJSo/Px8df7556sZM2aoN99804FWZ0af+h35oe/rvHnz1JQpU8Kes337djVhwgSVn5+vRo8erdavX5/9hmco1f3+xS9+oS6++GI1YMAANXToUHXllVeqLVu2ONP4NMXa38jf07n4/k5nv3Ph/f2DH/yg9/fZ+eefr6ZPn94bgJSy91znKfWfSkEAAAAf8WRNEAAAQKYIQQAAwJcIQQAAwJcIQQAAwJcIQQAAwJcIQQAAwJcIQQAAwJcIQQAAwJcIQQAAwJcIQQA85/nnn5cBAwbIP//5z95td955p5SXl0t3d7eDLQPgJdw2A4DnKKVk/PjxMnnyZHn88cdl1apVsmHDBtm9e7dceOGFTjcPgEf0c7oBAJCqvLw8efDBB+Xmm2+WESNGyLp162Tnzp29Aai2tla2b98u06dPl5dfftnh1gJwK3qCAHhWRUWFHDx4UF5//XWZMmVK7/ampiY5ffq0PPPMM4QgAHFREwTAk1577TVpa2uTc+fOSVFRUdj3rr76ahk8eLBDLQPgFYQgAJ6zb98+ueWWW6S+vl5mzpwpDzzwgNNNAuBB1AQB8JQjR47IddddJ8uWLZO6ujoZN26cVFVVyd69e6WystLp5gHwEHqCAHjGv//9b5k1a5Z897vflRUrVoiISGVlpdxwww1y//33O9w6AF5DTxAAzxg2bJi8//77UdtfeeUVB1oDwOuYHQYg58ycOVP27dsnZ86ckWHDhkljY6NUVVU53SwALkMIAgAAvkRNEAAA8CVCEAAA8CVCEAAA8CVCEAAA8CVCEAAA8CVCEAAA8CVCEAAA8CVCEAAA8CVCEAAA8CVCEAAA8CVCEAAA8KX/B7xkw0xsUXCXAAAAAElFTkSuQmCC", "text/plain": [ "Figure(PyObject
)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "p(apple|x=x∙) = 0.7124284201600442\n" ] } ], "source": [ "# Make sure you run the data-generating code cell first\n", "\n", "# Multinomial (in this case binomial) density estimation\n", "p_apple_est = sum(y.==true) / length(y)\n", "π_hat = [p_apple_est; 1-p_apple_est]\n", "\n", "# Estimate class-conditional multivariate Gaussian densities\n", "d1 = fit_mle(FullNormal, X_apples') # MLE density estimation d1 = N(μ₁, Σ₁)\n", "d2 = fit_mle(FullNormal, X_peaches') # MLE density estimation d2 = N(μ₂, Σ₂)\n", "Σ = π_hat[1]*cov(d1) + π_hat[2]*cov(d2) # Combine Σ₁ and Σ₂ into Σ\n", "conditionals = [MvNormal(mean(d1), Σ); MvNormal(mean(d2), Σ)] # p(x|C)\n", "\n", "# Calculate posterior class probability of x∙ (prediction)\n", "function predict_class(k, X) # calculate p(Ck|X)\n", " norm = π_hat[1]*pdf(conditionals[1],X) + π_hat[2]*pdf(conditionals[2],X)\n", " return π_hat[k]*pdf(conditionals[k], X) ./ norm\n", "end\n", "println(\"p(apple|x=x∙) = $(predict_class(1,x_test))\")\n", "\n", "# Discrimination boundary of the posterior (p(apple|x;D) = p(peach|x;D) = 0.5)\n", "β(k) = inv(Σ)*mean(conditionals[k])\n", "γ(k) = -0.5 * mean(conditionals[k])' * inv(Σ) * mean(conditionals[k]) + log(π_hat[k])\n", "function discriminant_x2(x1)\n", " # Solve discriminant equation for x2\n", " β12 = β(1) .- β(2)\n", " γ12 = (γ(1) .- γ(2))[1,1]\n", " return -1*(β12[1]*x1 .+ γ12) ./ β12[2]\n", "end\n", "\n", "plot_fruit_dataset() # Plot dataset\n", "x1 = range(-1,length=10,stop=3)\n", "plot(x1, discriminant_x2(x1), \"k-\") # Plot discrimination boundary\n", "fill_between(x1, -1, discriminant_x2(x1), color=\"r\", alpha=0.2)\n", "fill_between(x1, discriminant_x2(x1), 4, color=\"b\", alpha=0.2);" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Recap Generative Classification\n", "\n", "- Gaussian-Categorical Model specification: \n", "\n", "$$p(x,\\mathcal{C}_k|\\,\\theta) = \\pi_k \\cdot \\mathcal{N}(x|\\mu_k,\\Sigma)$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- If the class-conditional distributions are Gaussian with equal covariance matrices across classes ($\\Sigma_k = \\Sigma$), then\n", " the discriminant functions are hyperplanes in feature space." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- ML estimation for $\\{\\pi_k,\\mu_k,\\Sigma\\}$ in the GCM model breaks down to simple density estimation for Gaussian and multinomial/categorical distributions." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Posterior class probability is a softmax function\n", "$$ p(\\mathcal{C}_k|x,\\theta ) \\propto \\exp\\{\\beta_k^T x + \\gamma_k\\}$$\n", "where $\\beta _k= \\Sigma^{-1} \\mu_k$ and $\\gamma_k=- \\frac{1}{2} \\mu_k^T \\Sigma^{-1} \\mu_k + \\log \\pi_k$." ] }, { "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" ] } ], "metadata": { "@webio": { "lastCommId": null, "lastKernelId": null }, "anaconda-cloud": {}, "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Julia 1.6.3", "language": "julia", "name": "julia-1.6" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.6.3" } }, "nbformat": 4, "nbformat_minor": 4 }