Files
FYS-STK4155/doc/src/Splines/GradientMethods.ipynb
T
2018-09-20 05:57:59 +02:00

541 lines
174 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Optimization\n",
"\n",
"Almost every problem in machine learning and data science starts\n",
"with a dataset $X$, a model $g(\\theta)$, which is a function of the parameters $\\theta$ and a cost function $C(X, g(\\theta))$ that allows us to judge how well the\n",
"model $g(\\theta)$ explains the observations $X$. The model is fit by finding the values of $\\theta$ that minimize the cost function.\n",
"\n",
"We will look at a class of methods for computing minima of functions known as gradient descent and its generalizations. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Gradient Descent\n",
"\n",
"The basic idea of gradient descent is that a function $F(\\mathbf{x})$, $ \\mathbf{x} \\equiv (x_1,\\cdots,x_n)$, decreases fastest if one goes from $\\bf {x}$ in the direction of the negative gradient $-\\nabla F(\\mathbf{x})$.\n",
"\n",
"It follows that, if \n",
"\\begin{equation}\n",
"\\mathbf{x}_{k+1} = \\mathbf{x}_k - \\gamma \\nabla F(\\mathbf{x}_k), \\ \\ \\gamma > 0\n",
"\\end{equation}\n",
"for $\\gamma$ small enough, then $F(\\mathbf{x}_{k+1}) \\leq F(\\mathbf{x}_k)$. This means that for a sufficiently small $\\gamma$ we moves towards smaller function values, i.e a minimum.\n",
"\n",
"This observation is the basis of the gradient descent (GD) method. One starts with an initial guess $\\mathbf{x}_0$ for a minimum of $F$ and compute new approximations according to\n",
"\n",
"\\begin{equation}\n",
"\\mathbf{x}_{k+1} = \\mathbf{x}_k - \\gamma \\nabla F(\\mathbf{x}_k), \\ \\ k \\geq 0.\n",
"\\end{equation}\n",
"\n",
"Ideally the sequence $\\{ \\mathbf{x}_k \\}_{k=0}$ converges to a __global__ minimum of the function $F$. In general we do not know if we are in a global or local minimum. In the special case when $F$ is a convex function, all local minima are also global minima, so in this case gradient descent can converge to the global solution. We will explore this further in the exercises.\n",
"\n",
"In a practical implementation we have to choose a criterion for when to stop the iteration. One such condition would be to stop when \n",
"\n",
"\\begin{equation}\n",
"||\\nabla F(\\mathbf{x})|| < \\epsilon,\n",
"\\end{equation}\n",
"where $\\epsilon$ is some small number. \n",
"\n",
"\n",
"The parameter $\\gamma$ is referred to as the step size and is constant in the simplest Gradient Descent scheme. We will consider generalizations later where $\\gamma$ is adaptet during each iteration in order to obtain faster convergence or esacpe local minima.\n",
"\n",
"Another point worth noticing is that in order to use gradient descent all we need to know is the function and its gradient. Computing the gradient may be difficult depending on the complexity of the function we want to minimize. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Exercise 1\n",
"We start by considering functions of a single variable since they are easy to work with and we can compute exact minima to compare our implementation. Furthermore, single variable functions captures much of the problems we experience computing minima of more complex, multi-variable functions.\n",
"\n",
"a) Consider the function $f(x) = x^2+1$. Show that $f(x_{k+1}) \\leq f(x_k)$ when $0 \\leq \\gamma \\leq 1$.\n",
"\n",
"Hint: Use that (GD step) $x_{k+1} = x_k - \\gamma f'(x_k)$ and solve the resulting inequality.\n",
"\n",
"Solution: \n",
"\n",
"\\begin{align}\n",
"x_k^2(1-2\\gamma)^2 + 1 &\\leq x_k^2+1 \\\\\n",
"(1-2\\gamma)^2 &\\leq 1 \\\\\n",
"\\gamma(1-\\gamma) &\\leq 0 \\\\\n",
"\\Rightarrow 0 \\leq \\gamma &\\leq 1.\n",
"\\end{align}\n",
"\n",
"b) Show/convince yourself that f has its minimum at $x=0$ with $f(0) = 1$. \n",
"\n",
"Write a function computes the minimum using the GD method, with $x_0 = -3$ as initial guess. Try to write the function in a general way such that you in principle can use it on any function.\n",
"\n",
"Experiment with different step sizes in the range $0 < \\gamma < 1$ and check how many iterations you need in order for the solution to converge within a precision of $10^{-6}$. \n",
"\n",
"Since the derivative has to be zero in a minimum you can use $$|f'(x_k)| < \\epsilon,$$ with $\\epsilon = 10^{-6}$ as a criterion for convergence. (The choice of $10^{-6}$ as precision is arbitrary).\n",
"\n",
"What happens if you choose $\\gamma$ exactly equal to 1? What happens if $\\gamma$ is slighly larger than 1? One way to get a better visual understanding of whats going on is to plot the function and the function values at each iteration, $f(x_k)$, within the same plot."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Converged: True\n",
"Number of iterations for convergence: 18\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Program that solves exercise 1b.\n",
"%matplotlib inline\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"def gradient_descent(xk,dx_f,gamma):\n",
" return xk-gamma*dx_f\n",
"\n",
"def quadratic(a,b,c,x):\n",
" return a*x**2+b*x+c\n",
"\n",
"def dx_quadratic(a,b,x):\n",
" return 2*a*x+b\n",
"\n",
"#One variable examples\n",
"a,b,c = 1,0,1\n",
"x = np.linspace(-5,5,101)\n",
"quad = quadratic(a,b,c,x)\n",
"dx_quad = dx_quadratic(a,b,x)\n",
"\n",
"xk = -3\n",
"xk_vec = [xk]\n",
"fxk_vec = [quadratic(a,b,c,xk)]\n",
"gamma = 0.3\n",
"iters = 0\n",
"max_iters = 1000\n",
"converged = False\n",
"\n",
"while(abs(dx_quadratic(a,b,xk)) > 1e-6 and iters < max_iters):\n",
" xk = gradient_descent(xk,dx_quadratic(a,b,xk),gamma)\n",
" xk_vec.append(xk)\n",
" fxk_vec.append(quadratic(a,b,c,xk))\n",
" iters += 1\n",
"\n",
"if(iters < max_iters):\n",
" converged = True\n",
"\n",
"print (\"Converged: %s\" % converged)\n",
"print (\"Number of iterations for convergence: %d\" % iters)\n",
"\n",
"plt.figure(1)\n",
"plt.plot(x,quad)\n",
"plt.plot(xk_vec,fxk_vec,'o')\n",
"plt.legend([\"f(x)\",\"GD-iterates\"])\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"c) Quadratic functions as the one in exercise b) are particularly forigiving to work with since they only have one minimum/maximum, which in turn is global. A third order polynomial can have a maximum and a minimum or a saddle point. A fourth order polynomial may have two local minima. The point of the following exercise is to investigate the how GD depends on the initial guess, $x_0$.\n",
"\n",
"Consider the function\n",
"\\begin{equation}\n",
"f(x) = \\frac{(x+4)(x+1)(x-1)(x-3)}{14} + \\frac{1}{2},\n",
"\\end{equation}\n",
"with derivative \n",
"\\begin{equation}\n",
"f'(x) = \\frac{1}{14}\\left( 4x^3 + 3x^2 - 26x -1 \\right).\n",
"\\end{equation}\n",
"\n",
"Make a plot of the function for $x \\in [-5,4]$. The function has a global minimum at $x \\approx -2.9354$, a local maximum at $x \\approx -0.038301$ and a local minimum at $x \\approx 2.2237$. Choose $\\gamma = 0.1$ as step length and use GD descent to compute the minimum. \n",
"\n",
"* Expermient with different initial values $x_0 \\in [-5,-0.1]$ and $x_0 \\in [0.1, 4]$. \n",
"* What happens if you choose $x_0 = -0.038301$ (i.e at the local maximum)? Explain why this happens. \n",
"* What happens if you choose $x_0$ slightly smaller/larger than $-0.038301$? \n",
"* Furthermore you can experiment with different step sizes."
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Converged: True\n",
"Number of iterations for convergence: 67\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAD8CAYAAAB+UHOxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xl8VPW9//HXJ3vICtkghEDYAwgEArJcUURRqELr0rq02tpKrdSt2lu1veq1en+1rqVWLdatVyvaW8GloijihiIEEpawL4GEQFaykT3z/f0xEwwwCUlmMmcy83k+HjySOXM45+Oo5z3f5XyPGGNQSinlfwKsLkAppZQ1NACUUspPaQAopZSf0gBQSik/pQGglFJ+SgNAKaX8lAaAUkr5qU4HgIi8KCLFIrKtzbYHROSwiOQ4/sxv5+9eLCK7RGSviNztjsKVUkq5Rjp7I5iIzAJqgL8bY8Y5tj0A1BhjHuvg7wUCu4ELgQJgA3C1MWa7a6UrpZRyRVBndzTGfC4iQ7pxjqnAXmPMfgARWQYsBM4YAPHx8WbIkO6cUiml/NPGjRtLjTEJndm30wHQgV+KyHVAFnCnMebYKe8PBPLbvC4Azm7vYCKyCFgEkJqaSlZWlhtKVEop/yAiBzu7r6uDwM8Cw4CJwBHgcWf1ONnWbr+TMWapMSbTGJOZkNCpEFNKKdUNLgWAMabIGNNijLEBz2Pv7jlVATCozesUoNCV8yqllHKdSwEgIgPavPwesM3JbhuAESKSJiIhwFXAO66cVymllOs6PQYgIq8D5wHxIlIA3A+cJyITsXfp5AE/d+ybDPzNGDPfGNMsIr8EPgQCgReNMblu/adQSlmuqamJgoIC6uvrrS7FL4SFhZGSkkJwcHC3j9HpaaBWyMzMNDoIrFTvcODAAaKiooiLi0PE2dCfchdjDGVlZVRXV5OWlnbSeyKy0RiT2Znj6J3ASim3qK+v14u/h4gIcXFxLre2NACUUm6jF3/Pccdn7XMB0GIz/GXNXj7bXWJ1KUop5dV8LgACA4Sln+9nVe5Rq0tRSnnYkiVLSE9P59prr2XFihU8+OCDHe5/11138cknn3ioOu/jjjuBvc6Q+Ajyyo5bXYZSysOeeeYZVq5cSVpaGjNmzOCddzqecX7LLbdw4403cv7553uoQu/icy0AgLS4PuSV1lpdhlLKg2666Sb279/PggULeOSRRwgNDSU+Ph6AhQsX8ve//x2Av/71r1x77bUADB48mLKyMo4e9c8eA59sAQyOi+DtzYXUN7UQFhxodTlK+Z3/fjeX7YVVbj3mmORo7r90bLvvP/fcc3zwwQesWbOGd999l0mTJp14b+nSpcycOZO0tDQef/xx1q1bd+K9SZMmsXbtWi6//HK31tsb+GQApMVHYAzkl9cyIinK6nKUUh525MgR2q4llpSUxIMPPsjs2bNZvnw5/fr1O/FeYmIihYX+uTqNTwbAkPgIAA6UHtcAUMoCHX1T94Tw8HAqKytP2rZ161bi4uJOu9jX19cTHh7uyfK8ho+OAdgDQAeClfJP6enp7N2798Tr9evXs3LlSrKzs3nsscc4cODAifd2797NuHHjrCjTcj4ZADF9gunbJ5gDOhCslF+aNWsW2dnZGGNoaGjgxhtv5MUXXyQ5OZnHH3+cG264AWMMTU1N7N27l8zMTq2c4HN8sgsIHFNBS7UFoJQ/ycvLO/H7BRdcwOrVq7ngggvYvHnzie0LFixgwYIFALz33ntcccUVBAX57KWwQz7ZAgB7N9BB7QJSym/de++91NZ23AvQ3NzMnXfe6aGKvI/PBsDguAgKK+upb2qxuhSllAWSkpJOfNNvz5VXXklsbKyHKvI+PhsAQ+L7AHCwTMcBlFLKGZ8NgLQ2U0GVUkqdzmcDoPVeAJ0KqpRSzvlsAESHBRMXEaIzgZRSqh0+GwBgbwVoF5BS/qOoqIhrrrmGoUOHMnnyZKZPn87y5cv59NNPiYmJISMjg1GjRjFr1izee++9do8zf/58KioqqKio4JlnnnFrjU899dQZZyd5SqcDQEReFJFiEdnWZtujIrJTRLaIyHIRcTqcLiJ5IrJVRHJExGMP+R0c10cHgZXyVlvehCfHwQOx9p9b3nTpcMYYvvvd7zJr1iz279/Pxo0bWbZsGQUFBQCcc845ZGdns2vXLpYsWcIvf/lLVq9e7fRY77//PrGxsd0KAGMMNput3fd7ZQAALwMXn7LtI2CcMWY8sBu4p4O/P9sYM7GzDyt2h7S4CI5W1VPXqFNBlfIqW96Ed2+FynzA2H++e6tLIfDJJ58QEhLCTTfddGLb4MGDueWWW07bd+LEidx33308/fTTTo81ZMgQSktLufvuu9m3bx8TJ07k17/+NQCPPvooU6ZMYfz48dx///2A/Qa09PR0br75ZiZNmkR+fj6/+MUvyMzMZOzYsSf2W7JkCYWFhcyePZvZs2cDsGrVKqZPn86kSZO48sorqampAeDuu+9mzJgxjB8/nrvuuqvbn0tHOh0AxpjPgfJTtq0yxjQ7Xq4DUtxYm8t0IFgpL7X6QWiqO3lbU519ezfl5uaetAT0mUyaNImdO3d2uM8f/vAHhg0bRk5ODo8++iirVq1iz549rF+/npycHDZu3Mjnn38OwK5du7juuuvIzs5m8ODBPPzww2RlZbFlyxY+++wztmzZwq233kpycjJr1qxhzZo1lJaW8tBDD/Hxxx+zadMmMjMzeeKJJygvL2f58uXk5uayZcsWfve733X7c+mIO8cAbgBWtvOeAVaJyEYRWeTGc3aodSqoDgQr5WUqC7q2vRsWL17MhAkTmDJlitP3jTFdPuaqVatYtWoVGRkZJwJkz549gL21MW3atBP7vvnmm0yaNImMjAxyc3PZvn37acdbt24d27dvZ+bMmUycOJFXXnmFgwcPEh0dTVhYGD/72c9466236NOnT5dr7Qy3LIAhIr8FmoHX2tllpjGmUEQSgY9EZKejReHsWIuARQCpqaku1XViWWhtASjlXWJSHN0/TrZ309ixY/nXv/514vVf/vIXSktL213oLTs7m/T0dFpaWpg8eTJgXyeoo+cIG2O45557+PnPf37S9ry8PCIiIk68PnDgAI899hgbNmygb9++/PjHP6a+vt7p8S688EJef/31095bv349q1evZtmyZTz99NM98uxil1sAInI9cAlwrWknUo0xhY6fxcByYGp7xzPGLDXGZBpjMts+0KE7IkODiI8M5UCJBoBSXmXOfRB8yhr8weH27d10/vnnU19fz7PPPntiW3uDrVu2bOH3v/89ixcvJjAwkJycHHJyck67+EdFRVFdXX3i9UUXXcSLL754op/+8OHDFBcXn3b8qqoqIiIiiImJoaioiJUrVzo95rRp01i7du2Jpatra2vZvXs3NTU1VFZWMn/+fJ566ilycnK6+al0zKUWgIhcDPwGONcY4/STFpEIIMAYU+34fS7Q/Y6+LhqWEMF+7QJSyruM/7795+oH7d0+MSn2i3/r9m4QEVasWMEdd9zBH//4RxISEoiIiOCRRx4B4IsvviAjI4Pa2loSExNZ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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def quartic(x):\n",
" return (x+4)*(x+1)*(x-1)*(x-3)/14.0 + 0.5\n",
"def dx_quartic(x):\n",
" return (1.0/14.0)*(4*x**3 + 3*x**2 - 26*x - 1)\n",
"\n",
"x = np.linspace(-5,4,101)\n",
"quart = quartic(x)\n",
"dx_quart = dx_quartic(x)\n",
"\n",
"xk = -0.02\n",
"xk_vec = [xk]\n",
"fxk_vec = [quartic(xk)]\n",
"gamma = 0.1\n",
"iters = 0\n",
"max_iters = 200\n",
"converged = False\n",
"\n",
"while(abs(dx_quartic(xk)) > 1e-6 and iters < max_iters):\n",
" xk = gradient_descent(xk,dx_quartic(xk),gamma)\n",
" xk_vec.append(xk)\n",
" fxk_vec.append(quartic(xk))\n",
" iters += 1\n",
"\n",
"if(iters < max_iters):\n",
" converged = True\n",
"\n",
"print (\"Converged: %s\" % converged)\n",
"print (\"Number of iterations for convergence: %d\" % iters)\n",
"\n",
"plt.figure(1)\n",
"plt.plot(x,quart)\n",
"plt.plot(xk_vec,fxk_vec,'o')\n",
"plt.legend([\"f(x)\",\"GD-iterates\"])\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"d) In this exercise we will look at function of two variables. \n",
"\n",
"Consider the function \n",
"\\begin{equation}\n",
"z(x,y) = x^2+10y^2-1.\n",
"\\end{equation}\n",
"\n",
"* Compute the gradient and show that $z(x,y)$ has its minimum at $x=0, y=0$.\n",
"* Extend your program such that it can compute the minimum of a multivariate function. The main difference now is that the points and derivative/gradient now are vectors/arrays and not just scalars. Also try to make relevant visualizations, such as surface or contour plots.\n",
"* As before, experiment with different step sizes $\\gamma$ and intitial values $\\mathbf{x}_0 = (x_0,y_0)$.\n"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of iterations for convergence: 142\n",
"[4.77010127e-07 0.00000000e+00]\n"
]
}
],
"source": [
"from mpl_toolkits.mplot3d import Axes3D\n",
"from matplotlib import cm\n",
"\n",
"#Two variable example\n",
"def Z(x,y):\n",
" return x**2+10*y**2-1\n",
"\n",
"def grad_Z(x,y):\n",
" gZ = np.zeros(2)\n",
" gZ[0] = 2*x\n",
" gZ[1] = 20*y\n",
" return gZ\n",
"\n",
"X = np.arange(-4,4,0.1)\n",
"Y = np.arange(-5,5,0.1)\n",
"\n",
"X_, Y_ = np.meshgrid(X, Y)\n",
"Z_ = Z(X_,Y_)\n",
"fig = plt.figure(2)\n",
"ax = fig.gca(projection='3d')\n",
"surf = ax.plot_surface(X_, Y_, Z_, cmap=cm.coolwarm,linewidth=0, antialiased=False)\n",
"plt.show()\n",
"plt.figure(3)\n",
"plt.contour(X_,Y_,Z_,corner_mask=0)\n",
"plt.show()\n",
"\n",
"xk = np.zeros(2)\n",
"xk[0] = 1.5\n",
"xk[1] = 2.3\n",
"\n",
"gamma = 0.05\n",
"iters = 0\n",
"max_iters = 200\n",
"converged = False\n",
"while(abs(np.linalg.norm(grad_Z(xk[0],xk[1]))) > 1e-6 and iters < max_iters):\n",
" xk = xk - gamma*grad_Z(xk[0],xk[1])\n",
" iters += 1\n",
"print (\"Number of iterations for convergence: %d\" % iters)\n",
"print(xk)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Exercise 2 (Linear regression)\n",
"\n",
"In this exercise we will work out how Gradient Descent is used in the context of linear regression. The method is unchanged, however we have to minimize a different function, namely the cost function. \n",
"\n",
"\n",
"\\begin{equation}\n",
"\\hat{y} = \\theta_0x_0 + \\sum_{i=1}^n \\theta_i x_i, \\ \\ \\hat{y} = \\theta^T \\cdot \\bar{x}\n",
"\\end{equation}\n",
"where $x_0 \\equiv 1$ by convention (?)\n",
"\n",
"\n",
"The normal equation\n",
"\\begin{equation}\n",
"\\hat{\\theta} = (X^TX)^{-1} X^Ty\n",
"\\end{equation}\n"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of iterations before convergence: 694\n",
"[2.13232543e-10 2.06977546e-10]\n",
"[3.99638664 3.010951 ]\n",
"[3.99638664 3.010951 ]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f354247ac90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"#One variable example\n",
"N = 100\n",
"x0 = np.ones(N)\n",
"x1 = 2*np.random.rand(N)\n",
"y = 4 + 3*x1 + np.random.randn(N)\n",
"\n",
"\n",
"#Compute theta and predicted y using normal equations\n",
"X = np.c_[x0,x1]\n",
"Xt_X_inv = np.linalg.inv(np.dot(X.transpose(),X))\n",
"Xt_y = np.dot(X.transpose(),y)\n",
"theta_normeqs = np.dot(Xt_X_inv,Xt_y)\n",
"\n",
"\n",
"#Compute theta using gradient descent\n",
"eta = 0.1 \n",
"max_iters = 100\n",
"theta = np.random.randn(2)\n",
"\n",
"diff = 100\n",
"iters = 0\n",
"while(diff > 1e-10):\n",
" gradient = 2.0/float(N) * np.dot(X.transpose(), np.dot(X,theta) - y)\n",
" theta = theta-eta*gradient\n",
" diff = np.linalg.norm(gradient)\n",
" iters += 1\n",
"\n",
"#Output number of iterations before convergence and compare theta computed with GD with theta computed \n",
"#using the Normal equations\n",
"print(\"Number of iterations before convergence: %d\" % iters)\n",
"print(abs(theta_normeqs-theta))\n",
"print(theta_normeqs)\n",
"print(theta)\n",
"\n",
"#Plot true y and y_predicted\n",
"plt.figure(4)\n",
"y_pred = theta[0] + theta[1]*x1\n",
"plt.plot(x1,y,'ro')\n",
"plt.plot(x1,y_pred,'-b')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of iterations before convergence: 1134\n",
"[4.37898606e-10 1.89083416e-10 1.88844496e-10]\n",
"[3.52385905 2.51683929 2.59844067]\n",
"[3.52385905 2.51683929 2.59844067]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f35424327d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Two variable example\n",
"N = 100\n",
"x0 = np.ones(N)\n",
"x1 = 2*np.random.rand(N)\n",
"x2 = 2*np.random.rand(N)\n",
"\n",
"noise_scale = 2\n",
"g_noise = noise_scale*np.random.randn(N)\n",
"\n",
"y = 4+3*x1+2*x2+g_noise\n",
"\n",
"#Compute theta using normal equations\n",
"X = np.c_[x0,x1,x2]\n",
"Xt_X_inv = np.linalg.inv(np.dot(X.transpose(),X))\n",
"Xt_y = np.dot(X.transpose(),y)\n",
"theta_normeqs = np.dot(Xt_X_inv,Xt_y)\n",
"\n",
"\n",
"#Compute theta using gradient descent\n",
"eta = 0.1 \n",
"max_iters = 100\n",
"theta = np.random.randn(3)\n",
"\n",
"diff = 100\n",
"iters = 0\n",
"while(diff > 1e-10):\n",
" gradient = 2.0/float(N) * np.dot(X.transpose(), np.dot(X,theta) - y)\n",
" theta = theta-eta*gradient\n",
" diff = np.linalg.norm(gradient)\n",
" iters += 1\n",
"\n",
"#Output number of iterations before convergence and compare theta computed with GD with theta computed \n",
"#using the Normal equations\n",
"print(\"Number of iterations before convergence: %d\" % iters)\n",
"print(abs(theta_normeqs-theta))\n",
"print(theta_normeqs)\n",
"print(theta)\n",
"\n",
"#Plot true y and y_predicted\n",
"y_pred = theta[0] + theta[1]*x1+theta[2]*x2\n",
"fig = plt.figure(5)\n",
"ax = fig.gca(projection='3d')\n",
"scatter1 = ax.scatter(x1, x2, y,marker='^',c='r')\n",
"scatter2 = ax.scatter(x1, x2, y_pred,marker='o',c='b')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"## Short summary so far\n",
"\n",
"Summary...\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"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.7.0"
}
},
"nbformat": 4,
"nbformat_minor": 1
}