{
"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 multinomial-Gaussian generative model\n",
" \n",
"- Materials \n",
" - Mandatory\n",
" - These lecture notes\n",
" - Optional\n",
" - Bishop pp. 196-202 "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Example Problem: an apple or a peach?\n",
"\n",
"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": "code",
"execution_count": 1,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAkEAAAG2CAYAAAB4e1KRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAIABJREFUeJzs3Xt8FNX5P/BPEggJlwS5CIuEiz8VEAQEKmJFMMhNQbxVUaBiVSJVhKaiVYkJiRZs663fKg1RQcVbK5daLxRaEgQRhAQUNaICliBLCQgJIiYkOb8/htmd3Z29z3Xn83698kp2dnb2zGxgnpzznPMkCSEEiIiIiBwm2ewGEBEREZmBQRARERE5EoMgIiIiciQGQURERORIDIKIiIjIkRgEERERkSMxCCIiIiJHYhBEREREjsQgiIiIiByJQRARERE5km2DoAULFiApKQlz5swxuylERERkQ7YMgrZu3YrFixejf//+ZjeFiIiIbMp2QdAPP/yAKVOmoKSkBGeccYbZzSEiIiKbamZ2A6J1991346qrrsIVV1yBRx99NOS+dXV1qKur8zxuamrC999/j/bt2yMpKUnvphIREZEGhBA4fvw4unTpguRk7fpvbBUEvfHGG6ioqMDWrVsj2n/BggWYP3++zq0iIiIiI1RVVaFr166aHc82QVBVVRVmz56NNWvWIC0tLaLXPPjgg8jNzfU8rqmpQbdu3VBVVYWMjAy9mkpEREQaqq2tRVZWFtq0aaPpcZOEEELTI+pk1apVuPbaa5GSkuLZ1tjYiKSkJCQnJ6Ours7nOTW1tbXIzMxETU0NgyAiIiKb0Ov+bZueoFGjRmHnzp0+22677Tb07t0bDzzwQNgAiIiIiEjJNkFQmzZt0K9fP59trVq1Qvv27QO2ExEREYVjuynyRERERFqwTU+QmrKyMs2PKYRAQ0MDGhsbNT82UTjNmzfn0C4RkUFsHQRprb6+Hm63Gz/++KPZTSGHSkpKQteuXdG6dWuzm0JElPAYBJ3W1NSEvXv3IiUlBV26dEFqaioXVCRDCSFQXV2N/fv349xzz2WPEBGRzhgEnVZfX4+mpiZkZWWhZcuWZjeHHKpjx4749ttvcerUKQZBREQ6Y2K0Hy2X4yaKFnsfiYiMwzs+ERERORKDICIiInIkBkEUsYKCAgwcONDsZhAREWmCQZBe3G6goED6bpBNmzYhJSUF48aNM+w9iYiI7IpBkF7cbmD+fEODoBdffBGzZs3Cxo0bsW/fPsPel4hITwUFQFGR+nNFRdLzRLFgEJQgTpw4gb/97W+YOXMmJkyYgKVLl3qeKysrQ1JSEt59910MGDAAaWlpGDp0qE9B2qVLl6Jt27ZYtWoVzjvvPKSlpWH06NGoqqoK+b5LlixBnz59kJaWht69e+O5557zPFdfX4977rkHLpcLaWlp6NGjBxYsWKD5uRNRYktJAR55JDAQKiqStnM1CYoV1wnSktvt7fmpqPD9DgAul/SlgzfffBO9evVCr169MHXqVMyaNQt5eXk+U67nzp2LZ555Bp07d8ZDDz2Eq6++Gl999RWaN28OAPjxxx/x2GOP4aWXXkJqaip+/etfY/Lkyfjwww9V37OkpAT5+fn4y1/+ggsvvBDbt2/HnXfeiVatWuHWW2/Fn//8Z7z99tv429/+hm7duqGqqipsUEVE5C8vT/r+yCPex3IAVFjofZ4oasJBampqBABRU1MT8NzJkyfFF198IU6ePBn7G+TnCwEE/8rPj/3YYVxyySXi6aefFkIIcerUKdGhQwexdu1aIYQQpaWlAoB44403PPsfOXJEpKenizfffFMIIcSSJUsEALF582bPPpWVlQKA2LJly+nTyxcDBgzwPJ+VlSVee+01n3YUFRWJYcOGCSGEmDVrlsjOzhZNTU06nHFi0uT3kBwnP1+IwkL15woLdf2vx1CFhdJ/pamp0vdg50yJJ9T9Ox4cDtNSTg5QXi59lZRI20pKvNtycnR52127duHjjz/G5MmTAQDNmjXDTTfdhBdffNFnv2HDhnl+bteuHXr16oXKykrPtmbNmmHIkCGex71790bbtm199pFVV1ejqqoKt99+O1q3bu35evTRR7F7924AwPTp07Fjxw706tUL9957L9asWaPpeRORxCnDRXl5QGoqUF8vfWcPEMWLw2FaUhvuGjRI+tLRCy+8gIaGBpx11lmebUIING/eHEePHg35Wv8VitVWLFbb1tTUBEAaEhs6dKjPc3K5h0GDBmHv3r14//338e9//xs33ngjrrjiCrz11luRnRgRRcQpw0VFRd4AqL5eepwo50bmYBBkcw0NDXj55ZfxxBNPYMyYMT7PXX/99Xj11VfRr18/AMDmzZvRrVs3AMDRo0fx1VdfoXfv3j7H2rZtGy666CIAUg/TsWPHfPaRderUCWeddRb27NmDKVOmBG1fRkYGbrrpJtx000244YYbMG7cOHz//fdo165d3OdORF7KQOjRR6UgIdECIGVQJz8GEuccyXgMgvTicgH5+bolQsveeecdHD16FLfffjsyMzN9nrvhhhvwwgsv4KmnngIAFBYWon379ujUqRMefvhhdOjQAddcc41n/+bNm2PWrFn485//jObNm+Oee+7BxRdf7AmK/BUUFODee+9FRkYGxo8fj7q6Omzbtg1Hjx5Fbm4unnrqKbhcLgwcOBDJycn4+9//js6dO6Nt27b6XRAiB8vL8wZAiTRcpNarpdb7RRQt5gTpxeWSFq/QOQh64YUXcMUVVwQEQIDUE7Rjxw5UnJ6htnDhQsyePRuDBw+G2+3G22+/jdTUVM/+LVu2xAMPPIBbbrkFw4YNQ3p6Ot54442g733HHXfg+eefx9KlS3HBBRdgxIgRWLp0KXr27AkAaN26NR5//HEMGTIEP/vZz/Dtt9/ivffeY5FaIp2oDRclgsZG9V6tvDxpe2OjOe0i+0sSQgizG2GU2tpaZGZmoqamBhkZGT7P/fTTT9i7dy969uyJtLQ0k1qoj7KyMlx++eU4evRo0F6YpUuXYs6cOTh27JjBrSOlRP49JH0FGy5KpCExcq5Q9+94cDiMiMjmOFxEFBsGQURENhdquEh+nogCcTjsNA5DkBXw95CIKJBew2HMUCUiIiJHYhBERJQgWG2dKDoMgoiIEoRTymcQaYWJ0URECcIp5TOItMIgiIgogSR6+QwiLXE4jIgowbDaOlFkGARR3AoKCjBw4ECzm0FEpyVq+QwirTEI0pBZMzOmT5+OpKQkJCUloXnz5jj77LNx33334cSJE/q8IRFZljIHqK5O+q6WLE1EzAnSlDwzA/Dtflb+p6SXcePGYcmSJTh16hQ2bNiAO+64AydOnMCiRYv0e1MishSWzyCKDnuCNCRXNFb+1WXUzIwWLVqgc+fOyMrKwi233IIpU6Zg1apVAIAvvvgCV155JVq3bo1OnTph2rRpOHz4sOe1q1evxqWXXoq2bduiffv2mDBhAnbv3u1z/P3792Py5Mlo164dWrVqhSFDhmDLli0++7zyyivo0aMHMjMzMXnyZBw/ftzznBACf/jDH3D22WcjPT0dAwYMwFtvveV5/ujRo5gyZQo6duyI9PR0nHvuuViyZIkel4ooYdmt2rrRvedcR4n8MQjSmDIQatHCvKmp6enpOHXqFNxuN0aMGIGBAwdi27ZtWL16Nf73v//hxhtv9Ox74sQJ5ObmYuvWrfjPf/6D5ORkXHvttWhqagIA/PDDDxgxYgQOHDiAt99+G5988gnuv/9+z/MAsHv3bqxatQrvvPMO3nnnHaxfvx4LFy70PD9v3jwsWbIEixYtwueff47f/OY3mDp1KtavXw8AyMvLwxdffIH3338flZWVWLRoETp06GDQ1SJKDAUFwf+vycuz3k3e6HWNuI4SBRAOUlNTIwCImpqagOdOnjwpvvjiC3Hy5ElN3is1VQhA+q63W2+9VUyaNMnzeMuWLaJ9+/bixhtvFHl5eWLMmDE++1dVVQkAYteuXarHO3TokAAgdu7cKYQQori4WLRp00YcOXJEdf/8/HzRsmVLUVtb69k2d+5cMXToUCGEED/88INIS0sTmzZt8nnd7bffLm6++WYhhBATJ04Ut912W5Rnnni0/j0ksrrCQun/ysJC9cdCCJGf7/vY//X5+dq+H1lPqPt3PJgTpAO1mRl69wS98847aN26NRoaGnDq1ClMmjQJ//d//4fbbrsNpaWlaN26dcBrdu/ejfPOOw+7d+9GXl4eNm/ejMOHD3t6ePbt24d+/fphx44duPDCC9GuXbug79+jRw+0adPG89jlcuHQoUMApOG4n376CaNHj/Z5TX19PS688EIAwMyZM3H99dejoqICY8aMwTXXXINLLrkk7utCRNYWybpGWuZbch0lUmIQpDH/HCD5MaDvP7LLL78cixYtQvPmzdGlSxc0b94cANDU1ISJEyfi8ccfD3iNy+UCAEycOBFZWVkoKSlBly5d0NTUhH79+qG+vh6ANLQWjvx+sqSkJE8wJX9/9913cdZZZ/ns16JFCwDA+PHj8d///hfvvvsu/v3vf2PUqFG4++678ac//Smay0BENpSX5w1I1NY10nol7HDvR87BIEhDZs7MaNWqFc4555yA7YMGDcLy5cvRo0cPNGsW+HEfOXIElZWVKC4uxvDhwwEAGzdu9Nmnf//+eP755/H999+H7A0K5vzzz0eLFi2wb98+jBgxIuh+HTt2xPTp0zF9+nQMHz4cc+fOZRBECa2gQOrlUPt/oahISmS2Wh6PHiLpPdeyB8eM3nqyJiZGa8iKMzPuvvtufP/997j55pvx8ccfY8+ePVizZg1+9atfobGxEWeccQbat2+PxYsX45tvvsG6deuQm5vrc4ybb74ZnTt3xjXXXIMPP/wQe/bswfLly/HRRx9F1IY2bdrgvvvuw29+8xu89NJL2L17N7Zv345nn30WL730EgDgkUcewT/+8Q988803+Pzzz/HOO++gT58+ml8PIithom506xppsRI211EiH5pmGFmckYnRRvJPjPb31VdfiWuvvVa0bdtWpKeni969e4s5c+aIpqYmIYQQa9euFX369BEtWrQQ/fv3F2VlZQKAWLlypecY3377rbj++utFRkaGaNmypRgyZIjYsmWLEEJKjB4wYIDPez711FOie/funsdNTU3imWeeEb169RLNmzcXHTt2FGPHjhXr168XQghRVFQk+vTpI9LT00W7du3EpEmTxJ49e7S6RLZh599Dio2TE3WDnWu47fLEk2ivUbTvR9ahV2J0khBCmByHGaa2thaZmZmoqalBRkaGz3M//fQT9u7di549eyItLc2kFpLT8ffQmeTeCbmXw06JuvEM6UXz2mD5ltFcq3iHHzl8aZ5Q9++4aBpSWVyi9gRR4uDvoXMZuayGlozoXbFKD45V2uFEnCJPRJSg7Jyoq/XMLTWh8i3l541gxLmSsRgEERGZyKxlNbSk99o7oYaYjL5GXGcosTAn6DTmYpAV8PfQWYL1Iti1d6FFC2+PVl2d2a3Rl5PO1Qr0ygniFHkiIpNYcVmNWKkN6SUqJ51rouNwGBGRSaw0zBOPRBjSi5STztUJGAQREVHMzFwp32hOOlenYBBEREQxs8rMLSM46VydgonRpzEhlayAv4dERIGYGG0jjY2NKCsrw+uvv46ysjI0JtCfBwUFBRg4cKDZzbAUXhMiIntiEKSxFStWoEePHrj88stxyy234PLLL0ePHj2wYsUK3d9706ZNSElJwbhx43R/L4rOwoUL0bdvX7Rs2RLnnXceXnvtNbObRETkeAyCNLRixQrccMMN2L9/v8/27777DjfccIPugdCLL76IWbNmYePGjdi3b5+u72UkIQQaGhrMbkZcNmzYgKeeegqfffYZpk6dil/+8pfYs2eP2c3STEFB8GnCRUXOrafE66KO14WsgkGQRhobGzF79myopVjJ2+bMmaPb0NiJEyfwt7/9DTNnzsSECROwdOlSn+fLysqQlJSEd999FwMGDEBaWhqGDh2KnTt3evZZunQp2rZti1WrVuG8885DWloaRo8ejaqqqpDvvWTJEvTp0wdpaWno3bs3nnvuuZD719XV4d5778WZZ56JtLQ0XHrppdi6dWtAW//1r39hyJAhaNGiBTZs2BBwnG+//RZJSUl44403cMkllyAtLQ19+/ZFWVmZz35ffPEFrrzySrRu3RqdOnXCtGnTcPjwYc/zq1evxqWXXoq2bduiffv2mDBhAnbv3u1zjP3792Py5Mlo164dWrVqhSFDhmDLli0++7zyyivo0aMHMjMzMXnyZBw/ftzz3LvvvosxY8bg7LPPxj333IPGxkYcOHAg5HWyk5QUaXaM/41Nnk2TkmJOu8zG66KO14UsQ9NKZBanZwHV0tJSASDsV2lpaZxnoe6FF14QQ4YMEUII8c9//lP06NFDNDU1BbSvT58+Ys2aNeLTTz8VEyZMED169BD19fVCCCGWLFkimjdvLoYMGSI2bdoktm3bJi666CJxySWXeI6Tn58vBgwY4Hm8ePFi4XK5xPLly8WePXvE8uXLRbt27cTSpUuDtvXee+8VXbp0Ee+99574/PPPxa233irOOOMMceTIEZ+29u/fX6xZs0Z888034vDhwwHH2bt3rwAgunbtKt566y3xxRdfiDvuuEO0adPGs/+BAwdEhw4dxIMPPigqKytFRUWFGD16tLj88ss9x3nrrbfE8uXLxVdffSW2b98uJk6cKC644ALR2NgohBDi+PHj4uyzzxbDhw8XGzZsEF9//bV48803xaZNmzzXpHXr1uK6664TO3fuFB988IHo3LmzeOihhwLa3NTUJKZPny769esn6urqAp63cwFV/yKSLCop4XVRx+tC0dCrgCqDoNPivfm89tprEQVBr732WrynoeqSSy4RTz/9tBBCiFOnTokOHTqItWvXep6XA4s33njDs+3IkSMiPT1dvPnmm0IIKQgCIDZv3uzZp7KyUgAQW7ZsEUIEBkFZWVkB51RUVCSGDRum2s4ffvhBNG/eXLz66quebfX19aJLly7iD3/4g09bV61aFfKc5SBo4cKFnm2nTp0SXbt2FY8//rgQQoi8vDwxZswYn9dVVVUJAGLXrl2qxz106JAAIHbu3CmEEKK4uFi0adPGE6T5y8/PFy1bthS1tbWebXPnzhVDhw4N2PdXv/qVOO+888T+/ftVj2XnIEgI741MrojOG5qE10WdFtclPz/46woLpefJ/vQKgjgcphGXy6XpftHYtWsXPv74Y0yePBkA0KxZM9x000148cUXA/YdNmyY5+d27dqhV69eqKys9Gxr1qwZhgwZ4nncu3dvtG3b1mcfWXV1NaqqqnD77bejdevWnq9HH300YDhJtnv3bpw6dQo///nPPduaN2+Oiy66KOA9lO0IRXlOcvvlY5WXl6O0tNSnfb179/a0Rf5+yy234Oyzz0ZGRgZ69uwJAJ68qh07duDCCy9Eu3btgrahR48eaNOmjeexy+XCoUOHfPb59NNP8eKLL+Ltt9/GWWedFdG52U1enreUQGoqF46T8bqo0+K6cGiN4sHFEjUyfPhwdO3aFd99951qXlBSUhK6du2K4cOHa/7eL7zwAhoaGnxurEIING/eHEePHsUZZ5wR8vVJSUkhHwfb1tTUBAAoKSnB0KFDfZ5LCfI/j3xt/I8nhAjY1qpVq5DtDkU+VlNTEyZOnIjHH388YB85IJ04cSKysrJQUlKCLl26oKmpCf369UN9fT0AID09Pez7NW/ePOD95esj27t3LwCgV69e0Z+QTajVVOINn9clGC2ui9qKzXYtQEvGY0+QRlJSUvDMM88ACB5UPP3000GDg1g1NDTg5ZdfxhNPPIEdO3Z4vj755BN0794dr776qs/+mzdv9vx89OhRfPXVV56eEfl427Zt8zzetWsXjh075rOPrFOnTjjrrLOwZ88enHPOOT5fcm+Kv3POOQepqanYuHGjZ9upU6ewbds29OnTJ6ZroDynhoYGlJeXe9o7aNAgfP755+jRo0dAG1u1aoUjR46gsrIS8+bNw6hRo9CnTx8cPXrU5/j9+/fHjh078P3338fUPtmIESN8EsATjfLGU1cnfVf7C91peF3UaXld5IKzjzwiVXdnAEQR03RwzeL0zAmSLV++XHTt2tUnDygrK0ssX748ruMGs3LlSpGamiqOHTsW8NxDDz0kBg4cKITw5tn07dtX/Pvf/xY7d+4UV199tejWrZsnQVdOjL7ooovE5s2bRXl5uRg2bJi4+OKLPcf0zwkqKSkR6enp4umnnxa7du0Sn376qXjxxRfFE088EbTNs2fPFl26dBHvv/++T2L0999/79PWo0eP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",
"text/plain": [
"PyPlot.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}(2,N); y = Vector{Bool}(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[:,find(y)]'; X_peaches = X[:,find(.!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}^D$ 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} p(x|y) p(y)} \\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 **constant 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",
"- This leads to\n",
"$$\n",
" p(x_n,\\mathcal{C}_{k}) = \\pi_k \\cdot \\mathcal{N}(x_n|\\mu_k,\\Sigma)\n",
"$$ "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"- The log-likelihood for the full data set is then\n",
"$$\\begin{align*}\n",
"\\log\\, &p(D|\\theta) \\stackrel{\\text{IID}}{=} \\sum_n \\log p(x_n,\\mathcal{C}_{1},\\ldots,\\mathcal{C}_{K} \\,|\\,\\theta) \\\\\n",
" &= \\sum_n \\log \\prod_k p(x_n,\\mathcal{C}_{k}|\\theta)^{y_{nk}} \\;\\;\\text{(use 1-of-K coding)} \\\\\n",
" &= \\sum_{n,k} y_{nk} \\log p(x_n,\\mathcal{C}_{k}|\\theta) \\\\\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": "fragment"
}
},
"source": [
"- As usual, the rest (inference for parameters and model prediction) through straight probability theory."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### 2 - Parameter Inference for Classification\n",
"\n",
"- We'll do ML 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 breaks down into\n",
" - **Gaussian density estimation** for parameters $\\mu_k, \\Sigma$, since the first term contains exactly the LLH for MVG density estimation (see lesson on Density Est., Eq.1) \n",
" - **Multinomial density estimation** for class priors $\\pi_k$, since the second term holds exactly the LLH for multinomial density estimation (see lesson on Density Estimation, Eq.2). \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 = 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: given a 'new' input $x_\\bullet$, use Bayes rule to get posterior class probability\n",
"$$\\begin{align*}\n",
" p(\\mathcal{C}_k|x_\\bullet,\\theta ) &\\propto p(\\mathcal{C}_k) \\,p(x_\\bullet|\\mathcal{C}_k) \\\\\n",
" &\\propto \\pi_k \\exp \\left\\{ { - {\\frac{1}{2}}(x_\\bullet - \\mu_k )^T \\Sigma^{ - 1} (x_\\bullet - \\mu_k )} \\right\\}\\\\\n",
" &\\propto \\exp \\left\\{ {\\mu_k^T \\Sigma^{ - 1} x_\\bullet - {\\frac{1}{2}}\\mu_k^T \\Sigma^{ - 1} \\mu_k + \\log \\pi_k } \\right\\} \\\\\n",
" &= \\exp\\{\\beta_k^T x + \\gamma_k\\}\n",
"\\end{align*}$$\n",
"where \n",
"$$\\begin{align*}\n",
"\\beta_k &= \\Sigma^{-1} \\mu_k \\\\\n",
"\\gamma_k &= - \\frac{1}{2} \\mu_k^T \\Sigma^{-1} \\mu_k + \\log \\pi_k \\,.\n",
"\\end{align*}$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- The class posterior function $$\\phi(a_k) \\triangleq \\frac{\\exp(a_k)}{\\sum_{k^\\prime}\\exp(a_{k^\\prime})}$$ is called a **softmax** function. Note that the softmax function is per definition properly normalized in the sense that $\\sum_k \\phi(a_k) = 1$. "
]
},
{
"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 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": [
"- (homework). What happens if we had not assumed class-independent variances $\\Sigma_k=\\Sigma$? Are the discrimination functions still linear? quadratic?"
]
},
{
"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\n",
"\n",
"We'll apply the above results to solve the \"apple or peach\" example problem."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/png": "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71z4fD/yyCMaN25cxyrYVVVVeuWVV3p9jlvnOudD0MmTJzV79mzdeeedKT/ngQce0IMPPqiHH35YDQ0NGj58uL7zne/o6NGjHpbUXd///ve1c+dOvfrqq3r11Ve1c+dO1dTUJH3ebbfdpoMHD3Z8rV69OgulTc+zzz6r+fPn67777lNjY6MmT56sGTNmaP/+/XGP37Jli2644QbV1NTonXfeUU1Nja6//nq99dZbWS55ZpzWW7KW2I89rwcPHtSAAQOyWOrMHT9+XBdeeKEefvjhlI5vamrSlVdeqcmTJ6uxsVGLFy/W3XffrXXr1nlcUnc5rbftgw8+6HK+zz33XI9K6L5Nmzbpxz/+sbZu3ar169friy++0LRp03T8PzuJx5MLn+906i2F//N99tlna8WKFdq2bZu2bdumyy+/XNdcc03CxgdXz7WJiCeeeMIUFhYmPe7LL780w4cPNytWrOi478SJE6awsNA8+uijXhbRNXv27DGSzNatWzvu27Jli5Fk9u7dm/B51dXV5p577slGEV3x7W9/29xxxx1d7isrKzMLFy6Me/z1119vrrjiii73TZ8+3dx4442eldELTuud6t9+mEgydXV1vR7z05/+1JSVlXW57/bbbzeVlZVeFs1TqdS7vr7eSDItLS1ZKpX3Pv30UyPJbNq0KeExufL5jpVKvXPx822MMUOHDjWPP/543MfcPNc53xLkVFNTkw4dOqRp06Z13FdQUKDq6mq9+eabPpYsdVu2bFFhYaEuuuiijvsqKytVWFiYtA5PP/20ioqKdN555+knP/lJYFu/Tp48qe3bt3c5T5I0bdq0hHXcsmVLj+OnT58emvMqpVdvSTp27JhGjx6ts88+W1dddZUaGxu9LqrvEp3vbdu26fPPP/epVNkzfvx4jRgxQlOnTlV9fb3fxclIa2urJPW6g3gufL67S6XeUm59vk+dOqVnnnlGx48fV1VVVdxj3DzX0VpzOwWHDh2SJBUXF3e5v7i4WB9//LEfRXLs0KFDOuOMM3rcf8YZZ3TUL545c+aopKREw4cP13vvvadFixbpnXfe0fr1670sblqam5t16tSpuOcpUR0PHTrk6PggSqfeZWVlWrt2rS644AK1tbVp5cqVuvjii/XOO++EqovEqUTn+4svvlBzc7NGjBjhU8m8NWLECD322GOqqKhQe3u7fv/732vq1KnauHGjLr30Ur+L55gxRgsWLNAll1yi888/P+FxufD5jpVqvXPl8/3uu++qqqpKJ06c0Gmnnaa6ujqNHTs27rFunutQhqClS5eqtra212MaGho0YcKEtN8jLy+vy8/GmB73ZVuq9ZZ6ll9KXofbbrut4/vzzz9f5557riZMmKAdO3aovLw8zVJ7y+l5CuJ5TYeTelRWVqqysrLj54svvljl5eV66KGH9Nvf/tbTcvot3u8p3v25pLS0VKWlpR0/V1VV6cCBA/rVr34VyhA0b9487dq1S2+88UbSY3Pl8y2lXu9c+XyXlpZq586dOnLkiNatW6e5c+dq06ZNCYOQW+c6lCFo3rx5SWctjRkzJq3XHj58uCQracb+T/HTTz/tkTyzLdV679q1S5988kmPx/71r385qkN5ebn69++vDz/8MHAhqKioSH379u2R/Hs7T8OHD3d0fBClU+/u+vTpo4kTJ+rDDz/0ooiBkeh89+vXT1/72td8KpU/Kisr9dRTT/ldDMfuuusu/elPf9LmzZt19tln93psLny+bU7q3V1YP9/5+fn6xje+IUmaMGGCGhoatHLlyriTc9w816EcE1RUVKSysrJev9IdGW93B8V2AZ08eVKbNm3SpEmT3KpCWlKtd1VVlVpbW/X22293PPett95Sa2urozrs3r1bn3/+eSC7DfLz81VRUdGjq279+vUJ61hVVdXj+Ndee8338+pEOvXuzhijnTt3BvK8uinR+Z4wYYL69+/vU6n80djYGKrzbYzRvHnz9Pzzz2vDhg0qKSlJ+pxc+HynU+94r5ELn29jjNrb2+M+5uq5djyUOmQ+/vhj09jYaGpra81pp51mGhsbTWNjozl69GjHMaWlpeb555/v+HnFihWmsLDQPP/88+bdd981N910kxkxYoRpa2vzowppueKKK8y4cePMli1bzJYtW8wFF1xgrrrqqo7H//GPf5jS0lLz1ltvGWOM+eijj0xtba1paGgwTU1N5qWXXjJlZWVm/Pjx5osvvvCrGr165plnTP/+/c2aNWvMnj17zPz5881Xv/pVs2/fPmOMMTU1NV1mTP3lL38xffv2NStWrDDvv/++WbFihenXr1+XWXRh4LTeS5cuNa+++qr529/+ZhobG83NN99s+vXr13Huw+Lo0aMdn19J5sEHHzSNjY3m448/NsYYs3DhQlNTU9Nx/N///nczcOBAc++995o9e/aYNWvWmP79+5vnnnvOryqkxWm9f/Ob35i6ujrz17/+1bz33ntm4cKFRpJZt26dX1Vw7M477zSFhYVm48aN5uDBgx1fn332Wccxufj5TqfeufD5XrRokdm8ebNpamoyu3btMosXLzZ9+vQxr732mjHG23Od8yFo7ty5RlKPr/r6+o5jJJknnnii4+cvv/zS/OxnPzPDhw83BQUF5tJLLzXvvvtu9gufgcOHD5s5c+aYQYMGmUGDBpk5c+Z0mTLb1NTU5fewf/9+c+mll5phw4aZ/Px8c84555i7777bHD582KcapOZ3v/udGT16tMnPzzfl5eVdppJWV1ebuXPndjn+j3/8oyktLTX9+/c3ZWVlobowxHJS7/nz55tRo0aZ/Px8c/rpp5tp06aZN99804dSZ8ae+t39y67r3LlzTXV1dZfnbNy40YwfP97k5+ebMWPGmEceeST7Bc+Q03r/4he/MOecc44ZMGCAGTp0qLnkkkvMSy+95E/h0xSvvt3/nc7Fz3c69c6Fz/ePfvSjjn/PTj/9dDN16tSOAGSMt+c6z5j/jBQEAACIkFCOCQIAAMgUIQgAAEQSIQgAAEQSIQgAAEQSIQgAAEQSIQgAAEQSIQgAAEQSIQgAAEQSIQgAAEQSIQhA6PzhD3/QgAED9M9//rPjvltvvVXjxo1Ta2urjyUDECZsmwEgdIwx+ta3vqXJkyfr4YcfVm1trR5//HFt3bpVZ511lt/FAxAS/fwuAAA4lZeXp/vvv1/XXXedzjzzTK1cuVKvv/56RwCaOXOmNm7cqKlTp+q5557zubQAgoqWIAChVV5ert27d+u1115TdXV1x/319fU6duyYnnzySUIQgIQYEwQglP785z9r7969OnXqlIqLi7s8dtlll2nQoEE+lQxAWBCCAITOjh07NHv2bK1evVrTp0/XkiVL/C4SgBBiTBCAUNm3b5+++93vauHChaqpqdHYsWM1ceJEbd++XRUVFX4XD0CI0BIEIDT+/e9/a8aMGfre976nxYsXS5IqKip09dVX67777vO5dADChpYgAKExbNgwvf/++z3uf/HFF30oDYCwY3YYgJwzffp07dixQ8ePH9ewYcNUV1eniRMn+l0sAAFDCAIAAJHEmCAAABBJhCAAABBJhCAAABBJhCAAABBJhCAAABBJhCAAABBJhCAAABBJhCAAABBJhCAAABBJhCAAABBJhCAAABBJ/w+qjZFIDeTSagAAAABJRU5ErkJggg==",
"text/plain": [
"PyPlot.Figure(PyObject )"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"p(apple|x=x∙) = 0.6092722305430905\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",
"plot_fruit_dataset() # Plot dataset\n",
"x1 = linspace(-1,3,10)\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",
"- Model speccification: $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\\}$ breaks down to simple density estimation for Gaussian and multinomial."
]
},
{
"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": "markdown",
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"source": [
"---\n",
"The cell below loads the style file"
]
},
{
"cell_type": "code",
"execution_count": 3,
"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\", readstring(f))\n",
"end"
]
}
],
"metadata": {
"anaconda-cloud": {},
"celltoolbar": "Slideshow",
"kernelspec": {
"display_name": "Julia 0.6.1",
"language": "julia",
"name": "julia-0.6"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "0.6.1"
}
},
"nbformat": 4,
"nbformat_minor": 1
}