{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# A Python Regression Analysis\n", "\n", "First, we need to perform all necessary Python imports" ] }, { "cell_type": "code", "execution_count": 319, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib as mp\n", "import matplotlib.pyplot as plt\n", "from mpl_toolkits.mplot3d import Axes3D" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Regression with one variable\n", "\n", "First, we need to read and store data." ] }, { "cell_type": "code", "execution_count": 320, "metadata": { "collapsed": true }, "outputs": [], "source": [ "data = np.genfromtxt('data/ex1data1', delimiter=',')\n", "x = data[:,[0]]\n", "y = data[:,[1]]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Data Visualization" ] }, { "cell_type": "code", "execution_count": 321, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "area = np.pi*3\n", "colors = (0,0,0)\n", "\n", "plt.close('all')\n", "\n", "plt.scatter(x,y,s=area,c=colors,alpha=0.5)\n", "plt.xlabel('Population of city in 10,000s')\n", "plt.ylabel('Profit in $10,000')\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The Cost Function\n", "\n", "The Cost Function is used to represent a linear expression that best represents a hypothesis for the data under study. The parameter θ takes values so that the function J (θ) is minimized by approaching the values ​​obtained with the reference values in y." ] }, { "cell_type": "code", "execution_count": 322, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def cost_function(x, y, theta):\n", " m = y.size\n", " regression = x.dot(theta)\n", " regressionError = np.sum((regression - y)**2)\n", " return ((1./(2*m))*regressionError)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the data under study, the cost function should return an approximate value of 32,072 for the initial values of θ. Let's test the function return to θ at zero" ] }, { "cell_type": "code", "execution_count": 323, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "32.072733877455676" ] }, "execution_count": 323, "metadata": {}, "output_type": "execute_result" } ], "source": [ "' Update y in order to perform good matrices operations '\n", "y = data[:,1]\n", "' Insert ones in order to perform good matrices operations '\n", "x = np.insert(x, 0, np.ones(x.size), axis=1)\n", "theta = np.array([0., 0.])\n", "cost_function(x,y,theta)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Gradient Descent\n", "\n", "In order to find the better fit for our prediction model, lets implement the Gradient Descent algorithm and minimize our J(θ). We will perform little steps across theta values and control the convergence, in order to ensure that the final θ are what we are looking for." ] }, { "cell_type": "code", "execution_count": 324, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def gradient_descent(x, y, theta, alpha, tolerance, log = False):\n", " m = y.size\n", " episilon = 0.000001\n", " residual = np.ones(tolerance)\n", " interact = 0\n", " converge = False\n", " while not converge:\n", " ' step 1 : Start adjusting theta values '\n", " hypothesis = x.dot(theta)\n", " error = (hypothesis - y)\n", " gradient = (1./m) * (alpha) * (x.T.dot(error))\n", " \n", " tmpTheta = theta\n", " theta = theta - gradient\n", " \n", " ' step 2 : Run the cost function over the data with new theta '\n", " residual[interact] = cost_function(x, y, theta)\n", " \n", " if interact % 100 == 0 and log:\n", " print('Interaction ' + str(interact) + ' - Residual cost '+ str(residual[interact]))\n", " \n", " ' step 3 : Verify convergence over the given episilon and residual given step, also verify tolerance tries '\n", " \n", " step = abs(np.linalg.norm(theta) - np.linalg.norm(tmpTheta)) \n", " converge = (step <= episilon)\n", " \n", " if (interact + 1) == tolerance:\n", " print('Caution! GD has reached the tolerance. Results may not converge.')\n", " converge = True\n", " \n", " interact = interact + 1\n", " \n", " return theta, residual, interact" ] }, { "cell_type": "code", "execution_count": 325, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Caution! GD has reached the tolerance. Results may not converge.\n", "Last interaction was 4000 and the output for θ is: \n", "[-3.89286253 1.19274046]\n" ] } ], "source": [ "(t,r,i) = gradient_descent(x, y, theta, 0.01, 4000)\n", "\n", "print('Last interaction was '+ str(i) + ' and the output for θ is: ')\n", "print(t)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The α component of the Gradient Descent is a scalar used to regulate the learning rate. It can be interpreted as the \"step size\" that will be given by the gradient vector. The higher the α, the more aggressive the learning rate.\n", "\n", "Our test has reached the maximum number of attempts. We can conclude that the definition of the value for parameter α plays an important role in the convergence of our algorithm.\n", "\n", "We still need to make sure that our task is performing as expected. So, we can plot the error rate behavior and ensure that it decreases when reaching the max interation. We can conlude that 0.01 lead us for the max execution and is not a good choice for α." ] }, { "cell_type": "code", "execution_count": 326, "metadata": {}, "outputs": [ { "data": { "image/png": "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\ncVkK0mM5AAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.close('all')\n", "\n", "plt.figure(figsize=(10,6))\n", "\n", "axes = plt.gca()\n", "axes.set_xlim([0,i])\n", "\n", "plt.plot(r)\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### How to use the model and perform a prediction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using the obtained model to perform a prediction is a very easy task when working with one variable linear regression. We will use matrice operations to obtain the prediction values for cities with 35.000 and 70.000 population" ] }, { "cell_type": "code", "execution_count": 327, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Predicting values for 35.000 population : 37.8530537174\n", "Predicting values for 35.000 population : 79.5989699615\n" ] } ], "source": [ "' Predicting values for 35.000 population '\n", "p = np.array([1., 35.000]).dot(t)\n", "print('Predicting values for 35.000 population : ' + str(p))\n", "\n", "' Predicting values for 70.000 population '\n", "p = np.array([1., 70.000]).dot(t)\n", "print('Predicting values for 35.000 population : ' + str(p))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Regression Line\n", "\n", "Finally we can evaluate if the obtained model has a good fit to the data." ] }, { "cell_type": "code", "execution_count": 329, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nwODBg2nbti2tW7fmjDPOYNmyZeWe4+CDD+af//wnl112Ga1bt+bPf/6zZ4yh4ZHnnnuOnj170rx5\ncz7//POE4ti1axfXXXcdrVu3pk2bNowYMYI777yz3HDLVVddxVlnncXDDz9M586dOfTQQ9m1axcA\nDz/8MD179qRFixZ0796de++9l71795Y+9sUXX+Tkk0+mVatWHHHEEZx66qmsWLECcN5ERo8eTceO\nHTn00EM55phjyvX0vYZ9Zs2aRa9evWjevDkdO3bkrrvuKne+RP9/ki07ev7JluyduUwg3PPaOj7d\nXIWNf6qpfdMG3NgvP6XneOGFFzj//POZPXs269ev549//COtWrVi5MiRAMycOZPRo0czfvx4evTo\nwYYNGxgxYgTff/89U6dOBZy1EZdeeinHHnssJSUlTJ06lWHDhrFkyRIOPPDA0nPdfffd3HzzzYwc\nOTLmxchNmzYxffp0HnzwQQ444ACaNWuWUBxjxozhpZde4qGHHqJt27bMmjWL6dOnc9BBB5V7/mXL\nlpGXl8cTTzxBTk4OderUYeLEicycOZNx48bRoUMHPv30U2688UZ2797NyJEj+fbbb/n973/PyJEj\nGTJkCLt372bFihWlw2gPP/wws2fPZurUqeTn57N582aWLFkS9XecP38+11xzDaNGjWLQoEGsXLmS\nG2+8EREp/bdP5P8nFSz5G5MFWrVqxbhxTumsdu3aMXToUBYuXFiaXCZNmsTo0aMZNmwYAPn5+UyY\nMIHBgwczfvx4GjVqxMCBA8s95+TJk5kzZw6vvvoq55xzTmn7gAEDEhr3LioqYurUqbRs2bK0LV4c\ntWvX5rHHHmPSpEkUuEOtf/3rX1m0aBE//PBDuefPycnhoYceKh2G2blzJw888AAzZszglFNOAeDw\nww9n1KhRjBw5sjT579mzh6FDh3LYYYcB0L59+9LnXL9+PW3atKF3796ICC1btqRLly5Rf8f77ruP\nM844g2uvvRaAtm3bsnnzZsaOHcsNN9xQOiQW7/8nFTI7+dtiLFMJqe59++nYY48t9/MhhxzC66+/\nDsCWLVv4+uuvufXWW7n99ttLjwmVu1i7di1dunThyy+/ZMKECSxdupTvvvsOVWXnzp2sX7++3HN3\n7tw5oZiaNGlSLvEnEkedOnUoLi6mW7fyNcu6devG/Pnzy7W1b9++3Pj7xx9/zK5du/jd735XbjV3\naLHfli1bOPbYY+nXrx8nnngiJ510Er1792bQoEG0aOHsM3X++edz9tln0717d0466ST69u1L//79\no17X+Pjjjxk6dGi5tl69elFUVMS6detK31hi/f+kSuYmf1uMZUypihc7w+eHh76PGzeOPn36RDz2\n0EMPBeCCCy7gwAMPZOLEibRo0YLatWszaNAgiouLyx1fv379hGJqUGH6dSJxrFmzpjT+eCrGEXoT\nmTZtGm3atIk4vnHjxuTm5vLUU0+xfPlyFi5cyAsvvMDYsWOZNm0a/fv3p2PHjhQWFrJw4UIWLVrE\nqFGjGD9+PPPmzWP//fdP6Pf2Euv/J1Uy94KvLcYyJiFNmzalRYsWrFmzhiOOOCLiq27duvzwww98\n8sknDB8+nH79+nHkkUdSt25dvvvuu7TG0bp1a+rUqcN7771X7rGFhYVxnz8U85dffun5/KGZRiJC\nly5duO6665gzZw69evVi5syZpc+Tl5fHwIEDGT9+PK+88gqffvopixcv9jznUUcdxdtvv12u7a23\n3qJevXrk5+dX8l8ouTK352/VPE0G27FjBytXrizXVrdu3SrVeAG45ZZbGD58OI0aNaKgoIBatWrx\n2Wef8corr3DvvfeWlhB+4oknyM/PZ+vWrdxxxx3Uq1cvGb9OwnE0aNCAiy++mLvuuosmTZrQpk0b\nnnrqKT755BMOPvjgmM+dl5fHtddey5133omI8Mtf/pKSkhJWr17NypUrue2221iyZAlvvPEGJ598\nMs2aNWPt2rV8+OGHXHTRRQDcf//9HHLIIXTs2JF69erx7LPPkpub6/lJAmD48OFceOGFTJkyhYED\nB7Jq1SomTZrEFVdckdAU2FTK3ORvi7FMBissLOTkk08u19a2bVveeeedKj3fsGHDyMvL47777mPy\n5Mnk5uaSn59fepE3JyeHadOmMWrUKE466SRatmzJ6NGjGTNmTLV/l8rEAXDrrbdSVFTE5ZdfTk5O\nDmeddRbnn38+b775Ztznv/HGG2nWrBnTpk3j1ltvpW7durRp04bzzjsPgIYNG7J06VKmT5/Ojz/+\nSNOmTTn77LO54YYbANh///2ZOnUqa9euRVVp164djz76aNQ33VNPPZX77ruPKVOmMGHCBA466CAu\nvfRS/vKXvyThX6t6fN3JK55q7eRlY/4mho8++ojWrVuzbds2Ww2bAYYOHUqjRo2YMWOG36GkzRdf\n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\n6VIIbUgaSQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.close('all')\n", "\n", "plt.figure()\n", "plt.plot(x[:,1],y,'ro',markersize=5)\n", "plt.tick_params(axis='both', direction='in', width=2, length=7,bottom='on', top='on', left='on', right='on')\n", "\n", "plt.ylabel('Profit in $10,000s')\n", "plt.xlabel('Population of City in 10,000s')\n", "\n", "plt.xticks(np.arange(4, 24, 2))\n", "plt.ylim(-5, 25)\n", "plt.xlim(4, 24)\n", "\n", "plt.plot(x[:, 1], x.dot(t), '-', label='Linear regression')\n", "plt.legend(loc='lower right', shadow=True, fontsize='x-large', numpoints=1)\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Contour Plot" ] }, { "cell_type": "code", "execution_count": 330, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "' Prepare grid interval and theta interval '\n", "\n", "plt.close('all')\n", "\n", "interval_0 = np.linspace(-10, 10, 100)\n", "interval_1 = np.linspace(-1, 4, 100)\n", "\n", "(t0, t1) = np.meshgrid(interval_0, interval_1, indexing='xy')\n", "\n", "' Filling costs '\n", "j_history = np.zeros(shape=t0.shape)\n", "\n", "' Generating bidimensional array '\n", "for (i, j), element in np.ndenumerate(j_history):\n", " theta = np.array([t0[i,j], t1[i,j]])\n", " j_history[i,j] = cost_function(x, y, theta)\n", "\n", "fig1 = plt.figure(figsize=(6,5))\n", "ax = plt.contour(t0, t1, j_history, np.logspace(-2, 3, 20), cmap=plt.cm.jet)\n", "plt.scatter(t[0], t[1], c='r')\n", "\n", "plt.xlabel('Theta 0')\n", "plt.ylabel('Theta 1')\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Surface Plot" ] }, { "cell_type": "code", "execution_count": 331, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n/wO9Sv9yiMH0bAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.close('all')\n", "\n", "fig = plt.figure()\n", "ax = fig.gca( projection='3d')\n", "\n", "surf = ax.plot_surface(t0, t1, j_history, rstride=1, cstride=1, alpha=1, cmap=plt.cm.coolwarm)\n", "\n", "# Customize the z axis\n", "zmin = j_history.min()\n", "zmax = j_history.max()\n", "\n", "ax.set_zlim(zmin, zmax)\n", "ax.view_init(elev=15, azim=190)\n", "\n", "plt.xlabel('Theta 0')\n", "plt.ylabel('Theta 1')\n", "\n", "fig.colorbar(surf, shrink=0.5, aspect=5)\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Regression with multiple variables\n", "\n", "In this stage of the work, we will perform Multivariate Linear Regression. For the data under study, it is necessary to perform a normalization task since the data are at different scales. Then, we will perform tasks similar to those performed in Simple Linear Regression, implementing a Gradient function capable of dealing with target data with various parameters.\n", "\n", "Lets initialize the new sort of data." ] }, { "cell_type": "code", "execution_count": 332, "metadata": { "collapsed": true }, "outputs": [], "source": [ "data = np.genfromtxt('data/ex1data2', delimiter=',')\n", "x = data[:,[0]]\n", "y = data[:,1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Feature scaling or feature normalization\n", "\n", "Feature scaling is a method used to standardize the range of independent variables or features of data. In data processing, it is also known as data normalization and is generally performed during the data preprocessing step." ] }, { "cell_type": "code", "execution_count": 333, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def standardization(x):\n", " mean_residual = []\n", " std_residual = []\n", " standardization = x\n", " \n", " dimension = x.shape[1] \n", " for i in range(dimension):\n", " mean = np.mean(x[:, i])\n", " std = np.std(x[:, i])\n", " \n", " mean_residual.append(mean)\n", " std_residual.append(std)\n", " \n", " standardization[:, i] = (1./std)*(standardization[:, i] - mean)\n", " \n", " return standardization" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The above function runs over our target data and scale all features for the same interval. Lets run it and output the first target row." ] }, { "cell_type": "code", "execution_count": 334, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 0.13141542 -0.22609337 0.48089023]\n" ] } ], "source": [ "print(standardization(data)[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cost Function" ] }, { "cell_type": "code", "execution_count": 335, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def cost_function(x, y, theta):\n", " m = y.size\n", " regression = x.dot(theta)\n", " regressionError = np.sum((regression - y)**2)\n", " return ((1./(2*m))*regressionError)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Gradient Descent" ] }, { "cell_type": "code", "execution_count": 270, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def gradient_descent(x, y, theta, alpha, tolerance, log=False):\n", " m = y.size\n", " episilon = 0.000001\n", " residual = np.ones(tolerance)\n", " interact = 0\n", " converge = False\n", " while not converge:\n", " ' step 1 : Start adjusting theta values '\n", " hypothesis = x.dot(theta)\n", " error = hypothesis - y\n", " gradient = (1./m) * (alpha) * (x.T.dot(error))\n", " \n", " tmpTheta = theta\n", " theta = theta - gradient\n", " \n", " ' step 2: Run the cost function over the data with new theta '\n", " residual[interact] = cost_function(x, y, theta)\n", " \n", " if interact % 100 == 0 and log:\n", " ' The main idea here is to minimize the error value when evaluating the hypothesis '\n", " print('Error ' + str(residual[interact]))\n", " \n", " ' step 3 : Verify convergence over the given episilon and residual given step, also verify tolerance tries '\n", " step = abs(np.linalg.norm(theta) - np.linalg.norm(tmpTheta)) \n", " converge = (step <= episilon)\n", " \n", " if (interact + 1) == tolerance:\n", " print('Caution! GD has reached the tolerance. Results may not converge.')\n", " converge = True\n", " \n", " interact = interact + 1\n", " \n", " return theta, residual, interact" ] }, { "cell_type": "code", "execution_count": 271, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Last interaction was 1745 and the output for θ is: \n", "[ -2.81630511e-17 8.84552670e-01 -5.29655019e-02]\n" ] } ], "source": [ "data = standardization(data)\n", "\n", "x = data[:, :2]\n", "y = data[:, [2]]\n", "y = y[:,0]\n", "\n", "x = np.insert(x, 0, np.ones(x.shape[0]), axis=1)\n", "\n", "theta = np.array([0., 0., 0.])\n", "\n", "(t,r,i) = gradient_descent(x, y, theta, 0.01, 4000)\n", "\n", "print('Last interaction was ' + str(i) + ' and the output for θ is: ')\n", "print(t) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This time, our Gradient Descent has converged and stoped before interaction counter reaches the tolerance limit. Lets visualize the error rate behavior while performing the task and make sure it deacrases until the max interaction." ] }, { "cell_type": "code", "execution_count": 272, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nxZxOAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.close('all')\n", "\n", "plt.figure(figsize=(10,6))\n", "\n", "axes = plt.gca()\n", "axes.set_xlim([0,i])\n", "\n", "plt.plot(r)\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Logistic Regression" ] }, { "cell_type": "code", "execution_count": 273, "metadata": {}, "outputs": [], "source": [ "data = np.genfromtxt('data/ex2data1.txt', delimiter=',')\n", "\n", "admitted = data[(data[:,2]==1)]\n", "notadmitted = data[(data[:,2]==0)]\n", "\n", "theta = np.array([0., 0., 0.])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Data Visualization\n", "\n", "A linear decision boundary can bee seen from the below plot. However, it is possible to verify that there is a slight slope, the line curves a bit, that prevents us from using the linear regression model to elaborate the model.\n", "\n", "The first step to output our model is to implement the sigmoid function." ] }, { "cell_type": "code", "execution_count": 274, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtcAAAHjCAYAAADojTN7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3X+cXHV59//3tYBQN+sPMF8KwRgrwQoIsVmp2siCIFKK\nMrt4E9QqtrS0vfFmsugN8f5+b7U+WrHYr+OgvWstFLhbG6M4O9gWbTX+DLa0G02rgtxBmlhMJJEf\nZRNFgbnuP845u7O7M7uzO2fm/Ho9H495nJ3PmZ397NnZmet8zvW5PubuAgAAANC9gaQ7AAAAAOQF\nwTUAAAAQE4JrAAAAICYE1wAAAEBMCK4BAACAmBBcAwAAADEhuAYAAABiQnANAAAAxITgGgAAAIjJ\n4Ul3oBvPec5zfM2aNUl3AwAAADm3Y8eOH7n7ysUel+nges2aNZqcnEy6GwAAAMg5M9vTyeNICwEA\nAABiQnANAAAAxITgGgAAAIhJpnOuAQAAsuqJJ57QAw88oMcffzzprqDJUUcdpRNOOEFHHHHEsr6f\n4BoAACABDzzwgIaGhrRmzRqZWdLdgSR310MPPaQHHnhAz3/+85f1HKSFAAAAJODxxx/XMcccQ2Cd\nImamY445pqurCQTXAAAACSGwTp9u/yYE1wAAAEBMCK4BAABSzN01MTEhd++ofTnq9brMTN/97ndb\n7n/rW9+q2267rePn27t3r17/+tdLknbu3Kk77rhjet+Xv/xlff3rX19yH9esWaMf/ehHS/6+fiO4\nBgAASLF6va6xsTGNj49PB9LurvHxcY2Njaler3f9M7Zs2aINGzZoy5YtXT+XJB1//PHTwXhcwXVW\nEFwDAACkWKlUUrlcVrVanQ6wx8fHVa1WVS6XVSqVunr+gwcPavv27brpppv0iU98QlIQvL/tbW/T\nC1/4Qp177rnav3//9OPXrFmjd77znVq3bp2Gh4f1jW98Q695zWv0ghe8QB/96EclSbt379app56q\nn/3sZ3rXu96lrVu3at26dfqjP/ojffSjH1WlUtG6dev0ta99TQcOHNDFF1+sl770pXrpS1+qO++8\nU5L00EMP6bzzztMpp5yi3/qt34plhL4felaKz8z+QtKFkva7+6lh29GStkpaI2m3pEvc/ZFw3zsl\nXS7pKUlXufvf96pvAAAAWWFmqlQqkqRqtapqtSpJKpfLqlQqXU/Au/3223X++efrpJNO0jHHHKMd\nO3Zoz549uvfee3X33XfrwQcf1Mknn6zf/M3fnP6e1atXa+fOnRofH9db3/pW3XnnnXr88cd16qmn\n6nd/93enH/e0pz1N733vezU5OamPfOQjkqSf/OQnWrFihd7xjndIkt74xjdqfHxcGzZs0Pe//329\n5jWv0T333KPf//3f14YNG/Sud71Lf/d3f6ebbrqpq9+zX3pZ5/oWSR+R9L+b2jZL2ubu7zezzeH9\na83sZEmXSjpF0vGSvmBmJ7n7Uz3sHwAAQCZEAXYUWEuKJbCWgpSQcrksSbr00ku1ZcsWPfnkk3rD\nG96gww47TMcff7xe9apXzfqe173udZKkF7/4xTp48KCGhoY0NDSkI488Uo8++uiSfv4XvvAF3X33\n3dP3H3vsMR08eFBf/epXVavVJEm/9mu/pmc/+9nd/Jp907Pg2t2/amZr5jRfJOms8OtbJX1Z0rVh\n+yfc/aeS/t3M7pN0hqR/7FX/AAAAsiJKBWk2Pj7edYD98MMP64tf/KK+9a1vycz01FNPycw0Ojq6\n4PcdeeSRkqSBgYHpr6P7Tz755JL60Gg09E//9E866qijlv4LpFC/c66Pdfd94dc/lHRs+PUqSf/R\n9LgHwrZ5zOwKM5s0s8kDBw70rqcAAAApMDfHutFozMvBXq7bbrtNb37zm7Vnzx7t3r1b//Ef/6Hn\nP//5OuaYY7R161Y99dRT2rdvn770pS8t+2cMDQ1pamqq7f3zzjtPH/7wh6fv79y5U5J05pln6q//\n+q8lSZ/97Gf1yCOPLLsP/ZTYhEYPXglLfjW4+8fcfdjdh1euXNmDngEAAKRHvV6fDqyjkepKpTId\nYHdTLWTLli3zRqkvvvhi7du3T2vXrtXJJ5+st7zlLXr5y1++7J9x9tln6+6779a6deu0detWvfa1\nr9XExMT0hMYbbrhBk5OTOu2003TyySdPT4p897vfra9+9as65ZRTVKvVtHr16mX3oZ+slzMvw7SQ\nv22a0HivpLPcfZ+ZHSfpy+7+wnAyo9z9uvBxfy/pPe6+YFrI8PCwT05O9qz/2TClYI7oLklrJW2U\nNJRojwAAwOLuuecevehFL1r0ce6uer2uUqk0KwWkXTu61+pvY2Y73H14se/t98j1ZyRdFn59maTb\nm9ovNbMjzez5CqLEf+5z3zJou4LsmU2Srg+3q8J2AACQB1EO9NwAul07ktXLUnxbFExefI6ZPSDp\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.close('all')\n", "\n", "fig, ax = plt.subplots(figsize=(12,8)) \n", "ax.scatter(admitted[:, 0], admitted[:,1], s=50, c='black', marker='x', label='Admitted') \n", "ax.scatter(notadmitted[:, 0], notadmitted[:,1], s=50, c='yellow', marker='o', label='Not Admitted') \n", "\n", "ax.legend() \n", "ax.set_xlabel('Exam 1 Score') \n", "ax.set_ylabel('Exam 2 Score')\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sigmoid Function\n", "\n", "The Sigmoid Function converts a continuous input into a value between zero and one. It helps us to work in the LOG domain when performing the Cost Function and Gradient Descent." ] }, { "cell_type": "code", "execution_count": 275, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def sigmoid_function(z): \n", " return 1 / (1 + np.exp(-z))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cost Function" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The implementation of the cost function has changed somewhat. The important thing to be noticed here, besides the use of the sigmoid function, is the control in not keeping zeros in vectors that will be operated by the LOG function." ] }, { "cell_type": "code", "execution_count": 276, "metadata": {}, "outputs": [], "source": [ "data = np.genfromtxt('data/ex2data1.txt', delimiter=',')\n", "\n", "' Insert ones on the data '\n", "data = np.insert(data, 0, np.ones(data.shape[0]), axis=1)\n", "\n", "' Slice arrays '\n", "x = data[:, :3]\n", "y = data[:, [3]]\n", "y = y[:, 0]\n", "\n", "theta = np.array([0., 0., 0.])" ] }, { "cell_type": "code", "execution_count": 277, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def cost_function(theta, x, y): \n", " \n", " m = len(x)\n", " zero = 0.000001\n", " \n", " param = (x.dot(theta))\n", " hyphotesis = sigmoid_function(param)\n", " hyphotesis[hyphotesis == 0] = zero\n", " \n", " interval = 1 - hyphotesis\n", " interval[interval == 0] = zero\n", " \n", " y1 = y * np.log(hyphotesis)\n", " y0 = (1 - y) * np.log(interval)\n", " \n", " cost = (-1./m) * np.sum(y1 + y0)\n", " \n", " return cost" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have the expected output in order to test our cost function. The output must be a number near to 0.6931" ] }, { "cell_type": "code", "execution_count": 278, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.69314718056\n" ] } ], "source": [ "print(cost_function(theta, x, y))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Gradient Descent" ] }, { "cell_type": "code", "execution_count": 279, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def gradient_descent(x, y, theta, alpha, tolerance, log=False):\n", " m = y.size\n", " episilon = 0.000001\n", " zero = 0.000001\n", " residual = np.ones(tolerance)\n", " J = np.zeros(tolerance)\n", " interact = 0\n", " converge = False\n", " \n", " while not converge:\n", " \n", " ' Start adjusting theta values '\n", " hypothesis = sigmoid_function(x.dot(theta))\n", " error = hypothesis - y\n", " \n", " error[error == 0] = zero\n", " \n", " gradient = (1./m) * alpha * (x.T.dot(error))\n", " \n", " tmpTheta = theta\n", " theta = theta - gradient\n", " \n", " ' Run the cost function over the data with new theta '\n", " J[interact] = cost_function(x, y, theta)\n", " \n", " step = abs(np.linalg.norm(theta) - np.linalg.norm(tmpTheta)) \n", " converge = (step <= episilon)\n", " \n", " residual[interact] = step\n", " \n", " if interact % 100 == 0 and log:\n", " ' The main idea here is to minimize the error value when evaluating the hypothesis '\n", " print('Interaction ' + str(interact) + ', Redidual error output :' + str(J[interact]) + ', Step size: ' + str(step))\n", " \n", " if (interact + 1) == tolerance:\n", " print('Caution! The routine has reached the maximum tolerance! Results may not converge.')\n", " converge = True\n", " \n", " interact = interact + 1\n", " \n", " return theta, J, interact, residual" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Prediction Function" ] }, { "cell_type": "code", "execution_count": 288, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def predict(target, theta):\n", " \n", " m = target.shape[0]\n", " p = np.zeros(m)\n", " \n", " param = target.dot(theta)\n", "\n", " h = sigmoid_function(param)\n", "\n", " for i in range(h.shape[0]):\n", " if h[i] > 0.5:\n", " p[i] = 1\n", " else:\n", " p[i] = 0\n", "\n", " return p" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Testing values for α\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### α = 0.001" ] }, { "cell_type": "code", "execution_count": 289, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Caution! The routine has reached the maximum tolerance! Results may not converge.\n", "Iteraction reached : 6000\n", "Theta : [-0.40825205 0.01326654 0.00362865]\n" ] }, { "data": { "image/png": "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\nPw1uzfVyT4wzAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "(t, j, i, r) = gradient_descent(x, y, theta, 0.001, 6000)\n", "\n", "print('Iteraction reached : ' + str(i))\n", "print('Theta : ' + str(t))\n", "\n", "' Verify error rate behavior '\n", "\n", "plt.close('all')\n", "\n", "plt.figure(figsize=(10,6))\n", "\n", "axes = plt.gca()\n", "axes.set_xlim([0,i])\n", "\n", "plt.plot(j)\n", "\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 290, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "' Verify step rate behavior '\n", "\n", "plt.close('all')\n", "\n", "plt.figure(figsize=(10,6))\n", "\n", "axes = plt.gca()\n", "axes.set_xlim([0,i])\n", "\n", "plt.plot(r)\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The above figure allows us to note that the value of the step given by theta does not change over the iterations until the execution tolerance is reached and the operation aborted. Therefore, there is no convergence for this alpha value." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### α = 0.002" ] }, { "cell_type": "code", "execution_count": 291, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iteraction reached : 2638\n", "Theta : [-0.39355875 0.01047832 -0.00254696]\n" ] }, { "data": { "image/png": "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\nCfn/4p88PtcMK2UAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "(t, j, i, r) = gradient_descent(x, y, theta, 0.002, 6000)\n", "\n", "print('Iteraction reached : ' + str(i))\n", "print('Theta : ' + str(t))\n", "\n", "' Verify error rate behavior '\n", "\n", "plt.close('all')\n", "\n", "plt.figure(figsize=(10,6))\n", "\n", "axes = plt.gca()\n", "axes.set_xlim([0,i])\n", "\n", "plt.plot(j)\n", "\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 292, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlYAAAFpCAYAAABeYWb6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmcX3Vh7//XZ/YlM5nMkplsk51sQEIIgQSK7AQEcasF\nrxVcSlHw2va2Fa9X7dXrbWt/9l69VZEKRa2VuqBFjLJZNsOSBEI2sq+TZZYks+8zn98f800cAkxm\n8ISZxNfz8fg+5nvO+XzP+XzzyZm8cz6fcz4hxogkSZJ+d2nDXQFJkqTThcFKkiQpIQYrSZKkhBis\nJEmSEmKwkiRJSojBSpIkKSEGK0mSpIQYrCRJkhJisJIkSUqIwUqSJCkhGcN14NLS0jhlypThOrwk\nSdKgrV69ui7GWHaicsMWrKZMmcKqVauG6/CSJEmDFkLYPZhydgVKkiQlxGAlSZKUEIOVJElSQgxW\nkiRJCTFYSZIkJcRgJUmSlBCDlSRJUkIMVpIkSQkxWEmSJCXkhMEqhHBvCKEmhLD+DbaHEMLXQgjb\nQghrQwgLk6+mJEnSyDeYK1b3AcsG2H4NMDP1uhX45u9eLUmSpFPPCYNVjPEp4PAARW4Avhv7PAcU\nhRDGJVVBSZKk4dTS0T3oskmMsZoA7O23XJVa9xohhFtDCKtCCKtqa2sTOLQkSdLJ9a0ntw+67Fs6\neD3GeHeMcVGMcVFZWdlbeWhJkqQ3paWzZ9BlkwhW+4BJ/ZYnptZJkiT9XkkiWD0IfDB1d+AFQEOM\n8UAC+5UkSTqlZJyoQAjhB8AlQGkIoQr4PJAJEGO8C1gOXAtsA1qBD52sykqSJI1kJwxWMcabTrA9\nArcnViNJkqQRJMbBl/XJ65IkSQkxWEmSJCXEYCVJkpQQg5UkSVJCDFaSJEkJMVhJkiQNIDL42wIN\nVpIkSQkxWEmSJCXEYCVJkpQQg5UkSVJCDFaSJEkDcEobSZKkYWCwkiRJSojBSpIkKSEGK0mSpIQY\nrCRJkhJisJIkSUqIwUqSJCkhBitJkqSEGKwkSZISYrCSJElKiMFKkiRpAHEIc9oYrCRJkhJisJIk\nSUqIwUqSJCkhBitJkqSEGKwkSZISYrCSJEkawODvCTRYSZIkJcZgJUmSlBCDlSRJUkIMVpIkSQkx\nWEmSJA1gCDPaGKwkSZKSYrCSJElKiMFKkiQpIQYrSZKkhBisJEmSEmKwkiRJGkAcwqQ2BitJkqSE\nGKwkSZISYrCSJElKiMFKkiQpIQYrSZKkATiljSRJ0jAwWEmSJCXEYCVJkpQQg5UkSVJCDFaSJEkJ\nMVhJkiQNYAg3BQ4uWIUQloUQNocQtoUQ7nyd7aNDCD8PIbwcQtgQQvjQEOogSZJ0WjhhsAohpANf\nB64B5gI3hRDmHlfsdmBjjHE+cAnwlRBCVsJ1lSRJGtEGc8VqMbAtxrgjxtgJ3A/ccFyZCBSEEAIw\nCjgMdCdaU0mSpBFuMMFqArC333JVal1//wTMAfYD64BPxhh7E6mhJEnSKSKpwetXA2uA8cAC4J9C\nCIXHFwoh3BpCWBVCWFVbW5vQoSVJkk6epKe02QdM6rc8MbWuvw8BD8Q+24CdwOzXVizeHWNcFGNc\nVFZWNvhaSpIknQIGE6xWAjNDCFNTA9JvBB48rswe4HKAEEI5MAvYkWRFJUmSRrqMExWIMXaHEO4A\nHgbSgXtjjBtCCLeltt8FfBG4L4SwDgjAp2KMdSex3pIkSSPOCYMVQIxxObD8uHV39Xu/H7gq2apJ\nkiSdWnzyuiRJUkIMVpIkSQMa/G2BBitJkqSEGKwkSZISYrCSJElKiMFKkiQpIQYrSZKkASQ9pY0k\nSZIGwWAlSZKUEIOVJElSQgxWkiRJCTFYSZIkJcRgJUmSNADvCpQkSRoGBitJkqSEGKwkSZISYrCS\nJElKiMFKkiRpAJHBj143WEmSJCXEYCVJkpQQg5UkSVJCDFaSJEkJMVhJkiQlxGAlSZI0AKe0kSRJ\nGgYGK0mSpIQYrCRJkhJisJIkSUqIwUqSJGkAQxi7brCSJElKisFKkiQpIQYrSZKkhBisJEmSEmKw\nkiRJSojBSpIkaQBOaSNJkjQMDFaSJEkJMVhJkiQlxGAlSZKUEIOVJEnSAOIQJrUxWEmSJCXEYCVJ\nkpQQg5UkSVJCDFaSJEkJMVhJkiQlxGAlSZI0EKe0kSRJeusZrCRJkhJisJIkSUqIwUqSJCkhgwpW\nIYRlIYTNIYRtIYQ736DMJSGENSGEDSGEJ5OtpiRJ0vAYwth1Mk5UIISQDnwduBKoAlaGEB6MMW7s\nV6YI+AawLMa4J4Qwdoh1liRJOuUN5orVYmBbjHFHjLETuB+44bgy7wceiDHuAYgx1iRbTUmSpJFv\nMMFqArC333JVal1/ZwBjQghPhBBWhxA+mFQFJUmSThUn7Aocwn7OBS4HcoFnQwjPxRi39C8UQrgV\nuBWgsrIyoUNLkiSNDIO5YrUPmNRveWJqXX9VwMMxxpYYYx3wFDD/+B3FGO+OMS6KMS4qKyt7s3WW\nJEkakQYTrFYCM0MIU0MIWcCNwIPHlfkP4KIQQkYIIQ84H3gl2apKkiS99WIc/H2BJ+wKjDF2hxDu\nAB4G0oF7Y4wbQgi3pbbfFWN8JYTwK2At0At8O8a4/k3VXpIk6RQ1qDFWMcblwPLj1t113PI/AP+Q\nXNUkSZJOLT55XZIkKSEGK0mSpIQYrCRJkgYwlCltDFaSJEkJMVhJkiQlxGAlSZKUEIOVJElSQgxW\nkiRJCTFYSZIkDWAIM9oYrCRJkpJisJIkSUqIwUqSJCkhBitJkqSEGKwkSZIG4JQ2kiRJw8BgJUmS\nlBCDlSRJUkIMVpIkSQkxWEmSJCXEYCVJkjSAOIQ5bQxWkiRJCTFYSZIkJcRgJUmSlBCDlSRJUkIM\nVpIkSQNwShtJkqRhYLCSJElKiMFKkiQpIQYrSZKkhBisJEmSEmKwkiRJGsgQbgs0WEmSJCXEYCVJ\nkpQQg5UkSVJCDFaSJEkJMVhJkiQNIA5h9LrBSpIkKSEGK0mSpIQYrCRJkhJisJIkSUqIwUqSJCkh\nBitJkqQBRKe0kSRJeusZrCRJkhJisJIkSUqIwUqSJCkhBitJkqQBOHhdkiRpGBisJEmSEmKwkiRJ\nSsigglUIYVkIYXMIYVsI4c4Byp0XQugOIbw3uSpKkiSdGk4YrEII6cDXgWuAucBNIYS5b1Du74FH\nkq6kJEnSqWAwV6wWA9tijDtijJ3A/cANr1PuE8BPgJoE6ydJkjSsIoO/LXAwwWoCsLffclVq3TEh\nhAnAu4BvDvrIkiRJp5mkBq//X+BTMcbegQqFEG4NIawKIayqra1N6NCSJEkjQ8YgyuwDJvVbnpha\n198i4P4QAkApcG0IoTvG+LP+hWKMdwN3AyxatGgIj9uSJEka+QYTrFYCM0MIU+kLVDcC7+9fIMY4\n9ej7EMJ9wEPHhypJkqTT3QmDVYyxO4RwB/AwkA7cG2PcEEK4LbX9rpNcR0mSpGEzlCltBnPFihjj\ncmD5ceteN1DFGG8Z/OElSZJOHz55XZIkKSEGK0mSpIQYrCRJkhJisJIkSUqIwUqSJGkAQ3nwpsFK\nkiQpIQYrSZKkhBisJEmSEmKwkiRJSojBSpIkaQBDmdLGYCVJkpQQg5UkSVJCDFaSJEkJMVhJkiQl\nxGAlSZKUEIOVJEnSgAZ/W6DBSpIkKSEGK0mSpIQYrCRJkhJisJIkSUqIwUqSJGkATmkjSZI0DAxW\nkiRJCTFYSZIkJcRgJUmSlBCDlSRJUkIMVpIkSQMYwk2BBitJkqSkGKwkSZISYrCSJElKiMFKkiQp\nIQYrSZKkAcQhzGljsJIkSUqIwUqSJCkhBitJkqSEGKwkSZISYrCSJElKiMFKkiRpAE5pI0mSNAwM\nVpIkSQkxWEmSJCXEYCVJkpQQg5UkSdIAhjCjjcFKkiQpKQYrSZKkhBisJEmSEmKwkiRJSojBSpIk\nKSEGK0mSpAE4pY0kSdIwMFhJkiQlZFDBKoSwLISwOYSwLYRw5+ts/y8hhLUhhHUhhBUhhPnJV1WS\nJGlkO2GwCiGkA18HrgHmAjeFEOYeV2wn8LYY41nAF4G7k66oJEnSSDeYK1aLgW0xxh0xxk7gfuCG\n/gVijCtijEdSi88BE5OtpiRJ0vCIQ5jTZjDBagKwt99yVWrdG/kI8MtB10CSJOk0kZHkzkIIl9IX\nrC56g+23ArcCVFZWJnloSZKkYTeYK1b7gEn9liem1r1KCOFs4NvADTHGQ6+3oxjj3THGRTHGRWVl\nZW+mvpIkSSPWYILVSmBmCGFqCCELuBF4sH+BEEIl8ADwxzHGLclXU5IkaeQ7YVdgjLE7hHAH8DCQ\nDtwbY9wQQrgttf0u4HNACfCNEAJAd4xx0cmrtiRJ0sgzqDFWMcblwPLj1t3V7/1HgY8mWzVJkqRT\ni09elyRJSojBSpIkKSEGK0mSpIQYrCRJkhJisJIkSRrAEGa0MVhJkiQlxWAlSZKUEIOVJElSQgxW\nkiRJCTFYSZIkJcRgJUmSNIDI4G8LNFhJkiQlxGAlSZKUEIOVJElSQgxWkiRJCTFYSZIkDcApbSRJ\nkoaBwUqSJCkhBitJkqSEGKwkSZISYrCSJElKiMFKkiRpAN4VKEmSNAwMVpIkSQkxWEmSJCXEYCVJ\nkpQQg5UkSdIAIoMfvW6wkiRJSojBSpIkKSEGK0mSpIQYrCRJkhJisJIkSUqIwUqSJGkATmkjSZI0\nDAxWkiRJCRm2YLVuXwNX/uOTPLO1jtW7D79qW0NrF109vcNUM0mSpDdnWK9Yba1p5gP3PM97vvks\nP395Pzff+wK76lqY/4VHuPjL/0ns16m5Zm897V091DS189mfrae5o/tV+zrU3EFv7xA6QSVJkhKW\nMdwVOOoTP3gJgKv+z1MAHGho599e2MNLe+qZUpLH//fIFhZNHkN5YQ6/WHeA7z23m2/+l4UsmV5C\nfnYG5/6vx5g3vpAxeVnMGVdAZUk+uZnpLJ5STEtnN3PGFfLE5hqWTC8hEMjKsBdUkiSd2FAu24yY\nYHVUZ78uwHVVDfx4ddWx5VW7j7yq7Me+/yI3LBjP/37XWQBs2N8IwDPb6l6z38f+4mJu+ZeVZKYH\nunoiH1wymS/ccCYAuw+1MG50Lk3tXXz+wQ187rq5jC3Mec0+YoyEEH73LylJkk5LIy5Y9dcziK69\nHbUtdA+i3M33rgSgq6ev7Hef3U19axcXzSjlr3+ylgWTivjIRVN5aO0BHlp7gJ1/ey0hBNbsreeL\nD21kbEE2a6sa+Pz1c3lySy1/evF0fr2pmhsXV/LiniMsmVZCfWsXY/KzfrcvLUmSTlkjOlitT12B\nOpEv/WLjCcvsq297zboHX97Pgy/vB/rGcPX2G9N1qKWT7p7IAy9WsbrflbJbv7cagO8/v+fYz601\nzbxj/ngefHk///3a2dzzzE7++urZPLvjEO+YP56DDe1MLcsnLyudzPQ0Kkbn0N7Vw9iCHHp6I+lp\nXgWTJOl0EOJQnnqVoOxxM+O4m//v77yfsyaMZt2+hgRqBNeeVcHydQcBmDuukI0HGsnOSKOjO9k7\nFBdPLeaFnYf5q6tn8Q8Pb+beWxbx1ce28rfvPpv7VuzkL6+exU9f3McfnTeJ9fsaWVBZRGNbF2UF\n2aSFQFrALklJkt4i7/vWs/zotqWrY4yLTlT2lA9Wv09K8rOYVpZPWggsmjKGA/XtXDWvnBf31POe\nhRN5YnMNf3TeJJ7aWse1Z1awdl8D50wq4khrF8X5WY4RkyTpTXjfXc/yo48NLliN6K5Avdqhlk4O\ntXQC8PzOvmd/PfDSPgDufmoHAN96ageHWzr5enkBm6ubuPiMMp7aUstNiyfx6MZq3n/+ZDYfbOS8\nKcV0dPdSmJvJhKIc6po7WVhZxNbqZpZOL2XjgUYWTy1m16EWppeNormjm1HZGYYzSZIGYLA6zRxO\nBa/N1U0APLWlFoAfvLAXgK89vhWAhzdUv+azOZlptHf1MisVyq6YU85jr1Tz3nMn8uPVVXzskun8\n2/N7+LMrZvLwhoO8c8EEttU0M6uigAikh0BlSR7769tYWDmGTQebWDq9hA37G1k0eQw76lqYMXYU\nDa1djM7LdHyZJOm0Y1egTorCnAwa27uPhbTzpxbz/M7DXDFnLI+9UsMNC8bzq/UHed+iSazf38CF\n00s53NrJhKJcRmVn0NzRzbzxhWzY38iVc8t5cnMt7144gUc2VvPOBRN4YnMNl88pZ83eehZMKmJ/\nfRvji3Jp6+whPzv9WNA7enHNq2ySpDdrKF2Bp0Wwumz2WH69qSaRfenUVpCdQVNH97Egd9PiSh5a\nu59PXj6Tf3t+D3+9bDb3PrOTT187m288sZ1PLZvNXU9u55OXz+Rfn9vdN0ZtSy1Lppey+1ALE8fk\n0dXTS0Z6YHRuJk3t3UwqzqO2qYOppfnD/XUlSW+B37tgdfQqiHQyFeVlUt/axfxJRby8t553L5zA\n46/U8J6FE8nMCJTmZ3PhjFJWbK+jtqmDRzZWs2jyGG5YMIGyguy+LtN+Y9QeWruf+36zi3tuOY+s\n9DT+8dHNLJlewpGWLsoLc7hoZikANU3tPLKhmpsWV7LvSBsZ6YEDDe2cO3kMDa1drNx1mMvnjKWt\nq4e8rMH17rd2dg+6rCT9vvu9C1ZXzS3nkY2vHTMkjSQv/PfLWfJ3v+ZTy2bxR4squewrTxy7GeH1\nXDSjlCmleRTmZPKNJ7a/ZvsXbpjHql1HePDl/WRlpNHZ3ctNiydx3pRiWjq6+cAFk6lp6mD17iMU\n5WYytjCH2qYO2rq6+fB9q7h6Xjk7alv407dNB2D9vgbee+5EDrV08szWWpo7ulm3r4Er5pTzq/UH\nuWXpFP591V7uuHQG9/5mJ5++Zg7ffXYXf3nVLGqbO5hVXsALOw9TPCqL2RWFr6rr5oNNdPf2Mm/8\naHbWtVCUm8mew63Mn1TEtpomygpyGJ2bSUNbF7/ZVsc1Z1YQQqCmsZ30tEDJqGzgt7Mf9PZG0gYx\nPq+9q4eczPQhtJIkvdYf3rWCH3/swt+fYHX1vPLXHYwtjSTvPmcCD7y0jxljR9HZ3cuew62D+tzC\nyiJe3FM/5OO91efFhy+cyr2/2Xls+Ws3ncPmg408urGaLdXNAMee3XbUn148jW+l7mh9+M8u5i9+\nuObY1FRLppXw7I5DAPyPt88hIy2w8UAjP1xVRQgQI3zuurnkZKazraaZd54zntkVhazb10DVkVYK\nczP50L+s5IJpxeyvb2fp9BIKczO5c9ls0tICL+45wqMbq7l5yRRqmtqpbuzgSEsn7ztvEu1dPTz+\nSg3NHV1cMaecUTkZfOan61m/r4HPXjeXzPQ0zp08ho9/fzUlo7K5cHophbkZ3PebXbzvvEk8sqGa\nC6YVs/tQKyWjsshIC7R19VBZnMe++nYumFZMdWM7l80u58kttZSNyuaM8lHHHpGy6WATZ5QX8HJV\nPWWjshlbmM2aPfWcN6WY3hj59aYaLppZSl5WBk3tXeRlZbCjtpnKkjyyM34bJLdUN5GTkU7F6L4p\nuo7OkXr09/6Jxh72LxdjJEZeN9Aef7ewdw/rdJN4sAohLAO+CqQD344x/t1x20Nq+7VAK3BLjPHF\ngfaZZLC6fv54fp56grqk31/paX0P0O3qiUwck0vVkdfOuFBZnDdgqM3PSqels+eEx/rqjQv45P1r\nfqf69ndG+Si2VDcfGyc4tTSfnXUtAFwwrZjndhx+zWcumVXGE5trX7XunMoi/uLKM5hQlMtlX3ny\nNZ+ZMXYUZ00YzU9f2sfXbjqHCUU53PXkDr70zjPZ39DOpx9YR1Z6oHRUNodbO3lpTz3lhdlMHJPH\n6t1HeN+iiXz2urn09EYONrZTdbiNj353FQCP/PnFlI7K5jsrdvHVx7fy7oUTeODFfSyYVMTkkjzG\nFmTzz0/v5LPXzWXv4VbuW7GL3Mx0zpxQyKHmTh76rxfR1tnDuf/rMc6aMPrYXc7nTy2mtrmDW5ZO\n4U++u4oLZ5Sy70gbuVnplBVks7W6mavnVfDMtloe+PiFLF93gNJRWVw2u5wYI4dbOjnY2M6mA018\n/sENfOldZ7Jq1xEqRufwi7UHuHnpZL733G7+21Wz+PUrNVx71jg6unv46uNbuWXpFB5cs58r55az\n8UAjM8eO4uIzyhiTn0VmWhqf+dk6rjt7HNWNHUwrzedHq6u449IZx/7upaVBd09kQWURNY0dlORn\n0RsjxflZ/GLdASYX5/OzNft4//mVPLzhIO9fXElRXha1TR2Ujsp6VUB9emstk4vzWbG9jneeM4Hs\njDRCCAPeYX005B5u6Tx2Zbs4P4sX9xwhKz2t7zE6wNTSfLbVNJGelkZRbiadPb3Ut3ZRUZjD6LxM\napraOdzSycQxeew70sasigIa27s42NDOzLGj6OjuJUaoa+5gUnHesePXt3aSnZFOblZf4D/6n8rp\nZflUHWlj4pjc14Tw44N/T2+ks7uX3Kx02jp7yE79B6Gtq4f87N8OaejpjQR+G/67enrJTE973T+X\n1/szGkiiwSqEkA5sAa4EqoCVwE0xxo39ylwLfIK+YHU+8NUY4/kD7TfJYHXzksl859ndiexLknR6\nmD+piB21zZxRXvCqqcmSMLkkj4WVY/hp6lmCSTp6RTYnM43rzx7Pl997Nr9af5CPff+Nr1d8atls\nNh9s5I7LZvKFhzZSWZzLiu2HmFaaz9LppXzhod9O/fald53JZ366/lWfv/3S6Xz9P1875ADgZ7df\nyAfveZ7G9u5j65ZOL6E3xtcN/O86ZwJXzytn+bqDx6aNu2BaMf/zHWfy/369lYfWHnhV+U9ePpPR\nuZk8vqmad58zkf/2o5dftf2PL+gLvrcsncJ9K3YBvOoO87MnFvHFft/vE5fN4Nebao5d/d76pWv4\n9tM7qW/r5OH1B6lv62Lp9BLeuWACJaOyeM83n2VsQTZffu/Z9MbID1dWMTo3k8vmjKW+tZPDLV18\n++kdvPi5qxILVkuAv4kxXp1a/jRAjPFv+5X5FvBEjPEHqeXNwCUxxgOvs0tgcMEqPS1QnN+X3Afy\nLx86jw/9y8oBy0iSJL1Zu//+ukEFqxNfI4MJwN5+y1WpdUMt8yrTy/K5Ys5Y/urqWSyeWgzAmLzM\nY9uXzatgxZ2X8YtPXMSPblvC9z6y+Ni2i88oA/rGC3zvI4u5dNZY/sfb5wDwXy+bAcCls/rKvGfh\nRACuObOCd8wf/6o6nD+1mAlFuXzggsqBqiol7s+umDncVZBeIy/Lgf7S72owV6zeCyyLMX40tfzH\nwPkxxjv6lXkI+LsY4zOp5ceBT8UYVx23r1uBWwEqKyvP3b37t913XT29pIfAPc/s5IJpJZw1cXQi\nX3Cw/unXW1k4eQxLp/fd4t7Z3cvzOw9RVpDN5OJ8mjq6KMjOPNZHnZEe6OrpJdDXL9vZ00tWehrN\nHd0U5GRwuKWTMUf7yQuyONDQTkVhDlVH2qgYncOBhjZK8rM50tpJXlY6Pb2Rtq4eCnIyOdjQxqQx\neWyraeaMigI27m9kzrhC1u9vYN64QtZWNXDWxNG8vLeeOeMK2XywicqSPOqaOsjKSCMrI42axg4m\nl+SxYX8j51QW8cLOw1wwrYQV2+u4YFoJv9l2iKXTS3h6Wx1Lp5ewYvshzq0cw4b9DVQW59HQ1kVP\nb984gK01zSyYVMSK7XVcMmssj79Sw+VzxvLoxmqumFPOoxsPcsXcch7ZUM1ls8fy5JZaFk0ew+bq\nJsYW5NDd28uR1i6mleazevcRLppZyqMbq1k2r4Ll6w+wbF4Fv1x/kGVnVvDLdQdSPw9y2Zyx/GZb\nHWdNKKLqSCu5WenkZKRTdaSNueMLeXb7IS6ZVcajG6u5al45D284yJVzK3hkw0GumlfBr9Yf4Kp5\nFTyyoZq3nVHGyl2HmVVeQE1TOyEEivIy2V7TwoLKIn6ztY5LZ/d9pyvnlvPIxoPH6vX2s8bx0Nr9\nXD+/76Gml88Zy4t76plUnEdrRze7D7eyYX8jL++tZ9m8CrIy0lhbVc/bzx7H1upmPnDBZP756R38\n0XmTGJOXRQDGFeXy5/++hvauHiaOyaWtq4eZYwvYWdfC2IJsdtS18InLZrDpYBMfvWgq//z0Tg40\ntHHWhNEsX3eArIw03nbGWDbsb2BrdTNZGWl09fRSkJPBzPIC0kNg3vhCntlWx6icDApzMplQlMum\ng03Hxus8t+MQeVnppIXARTNL+fbTO7l+/jjmjitkzd56tqSe3n/xzDIe21TDuZVjWLX7MBfOKOVA\nfRt52RmUpv5+XD2vgn99bjddPb0cbu3k6rkVLJlewo9XV9HdG5lQlMvaqnoun1POz1/ez6aDffu+\nZekU9te3setQC9ecOY5vPLGNkvxssjLSyM5I48MXTeXfV+7lo38wldW7j/CDF/bQ3tXLdWePY/eh\nVhZWFhGBAJw1sYjndxxiyfQSttY08/7FlXzxoY1sOthEZnpgVHYGOZnplIzKorsnHruTOCsjjUlj\ncvnOhxfzwXteoLapg6aObuZPKqK2sZ39De1cc2YF6/Y1kJUar7HzUAu3XzKD/fVtrNx9mEA4Nm5r\ndkUBc8YVsmF/A5PG9I3nmj2ukHVV9X3nz6ZqPnLhVH760j6mluZT39bF/vo2rppbwbef2UFFYQ6z\nKwp5ae8RZowdxYGGdt5+1ji+s2IXM8aOoiAnk6ojrWRnpPMnF0/l2e2HeGpLHWdUFFB1uJXzphST\nm5XO01trmTt+NC/sPER+VgY7UuO1sjPS+IOZZazZW09dcwczxo5iW00zP75tCWdPLOJ/L3+F7bXN\nvLy3ng8umcKK7XUU5mbS2tnDKwcamVKSz5xxBQQCj2+qYXZFAc9sq6O8MJs/v+IMnt1xiGXzKvjb\nX27i8jlj2VrdzJHWTqob28nNSqexrZvbL53OKweaWLO3nq6eXq6c2zfLw+Wzy/n3lXvJyugb+3Pm\nhEI2HWw6dmfqtLJ8nt5aR0l+FmMLczjc0sGUkr6xaBfNKOWprbV89rq5/OTFfTy1pZar55XT3tV7\n7O/Tmr0ev1mzAAAGqElEQVT1VB1po6wg+1hPSEZa4Mq55azYfoir5pYfm7WidFQ2VUdaOZIaZ1TT\n1M6sikJ21Dbzyctn0tDWxTsWjOevf7yWXXUtvO2MMr7z7G7S0wJLp5dwzqQi/u2FPdQ1d7Jo8hh2\n1rWwcPIYLj6jjB21zZQX5vDDVXvZUdvXLuWF2TS0dbGwcgxnTyzinmd28Pnr5/HcjkO8f3Eli6YU\n85VHN/OtJ/tu9rhybjnnTh5D1ZFWHttYw7dvXsT3nt3NkdZOcjLTWbnrMLdfOoODDe1cP388t/3r\nahrbujjU0sn188eTl5nOAy9VUZKfzcHGdr783rN5Yedhfry6ivefX8mPV1fR2d1LSX4W99xyHi/t\nOcL//PlG/mBmKa8caOTimWVcv2A8H/vX1Vw+u5zapg5e2NXXLfiH507k5qVT+MA9z1Pf2gX03Uwz\nOjeTy2aX8/HvryYrI43eCNNK83nPwon8Yt0Bdta18MM/XcLn/mM9L+w6zNF4Mn50Dvsb2nnH/PEU\n52fxwItVvHvhRO5bsYvLZo/lU8tm8+H7VrKvvo20AO86ZyI/ebEKgHGjc/iP2y+kurGD7zy7i+21\nzby0p57M9MDHL5nBHy6ayCfvX0Ndcwd/8gfT2HO4lZaObsaNziEtLTCtNJ+/+tFaZlUU8JOPJzfG\n6qR0BS5atCiuWrXqjTZLkiSNGCGExLoCVwIzQwhTQwhZwI3Ag8eVeRD4YOhzAdAwUKiSJEk6HZ3w\n0csxxu4Qwh3Aw/Q9buHeGOOGEMJtqe13AcvpuyNwG32PW/jQyauyJEnSyDSoOS1ijMvpC0/9193V\n730Ebk+2apIkSaeWwXQFSpIkaRAMVpIkSQkxWEmSJCXEYCVJkpQQg5UkSVJCDFaSJEkJMVhJkiQl\nxGAlSZKUEIOVJElSQgxWkiRJCQl9s9EMw4FDaAI2D8vBNRSlQN1wV0InZDuNfLbRqcF2OjUMRztN\njjGWnajQoOYKPEk2xxgXDePxNQghhFW208hnO418ttGpwXY6NYzkdrIrUJIkKSEGK0mSpIQMZ7C6\nexiPrcGznU4NttPIZxudGmynU8OIbadhG7wuSZJ0urErUJIkKSHDEqxCCMtCCJtDCNtCCHcORx3U\nJ4SwK4SwLoSwJoSwKrWuOITwaAhha+rnmH7lP51qt80hhKuHr+antxDCvSGEmhDC+n7rhtwuIYRz\nU+27LYTwtRBCeKu/y+nsDdrpb0II+1Ln1JoQwrX9ttlOb7EQwqQQwn+GEDaGEDaEED6ZWu/5NIIM\n0E6n3vkUY3xLX0A6sB2YBmQBLwNz3+p6+DrWHruA0uPWfRm4M/X+TuDvU+/nptorG5iaasf04f4O\np+MLuBhYCKz/XdoFeAG4AAjAL4Frhvu7nU6vN2invwH+8nXK2k7D00bjgIWp9wXAllRbeD6NoNcA\n7XTKnU/DccVqMbAtxrgjxtgJ3A/cMAz10Bu7AfhO6v13gHf2W39/jLEjxrgT2EZfeyphMcangMPH\nrR5Su4QQxgGFMcbnYt9vm+/2+4wS8Abt9EZsp2EQYzwQY3wx9b4JeAWYgOfTiDJAO72REdtOwxGs\nJgB7+y1XMfAfnk6uCDwWQlgdQrg1ta48xngg9f4gUJ56b9sNr6G2y4TU++PX6+T7RAhhbaqr8GgX\nk+00zEIIU4BzgOfxfBqxjmsnOMXOJwev66IY4wLgGuD2EMLF/TemEr+3jo4wtsuI9k36hjosAA4A\nXxne6ggghDAK+AnwZzHGxv7bPJ9Gjtdpp1PufBqOYLUPmNRveWJqnYZBjHFf6mcN8FP6uvaqU5dT\nSf2sSRW37YbXUNtlX+r98et1EsUYq2OMPTHGXuCf+W13ue00TEIImfT9Y/39GOMDqdWeTyPM67XT\nqXg+DUewWgnMDCFMDSFkATcCDw5DPX7vhRDyQwgFR98DVwHr6WuPm1PFbgb+I/X+QeDGEEJ2CGEq\nMJO+QYJ6awypXVLdHI0hhAtSd8V8sN9ndJIc/cc65V30nVNgOw2L1J/pPcArMcZ/7LfJ82kEeaN2\nOiXPp2Ea/X8tfSP+twOfGY46+IrQd3n15dRrw9G2AEqAx4GtwGNAcb/PfCbVbpvxjpiT2TY/oO+y\ndxd9YwQ+8mbaBVhE3y+i7cA/kXoosK+T2k7fA9YBa+n75T/OdhrWNrqIvm6+tcCa1Otaz6eR9Rqg\nnU6588knr0uSJCXEweuSJEkJMVhJkiQlxGAlSZKUEIOVJElSQgxWkiRJCTFYSZIkJcRgJUmSlBCD\nlSRJUkL+fxyw45ZYoJ5TAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "' Verify step rate behavior '\n", "\n", "plt.close('all')\n", "\n", "plt.figure(figsize=(10,6))\n", "\n", "axes = plt.gca()\n", "axes.set_xlim([0,i])\n", "\n", "plt.plot(r)\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The above figure allows us to note that the value of the step given by theta undergoes small variations until it reaches a variation lower than what we defined as zero. Therefore, the value set for alpha guides the Gradient function to convergence." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### α = 0.003" ] }, { "cell_type": "code", "execution_count": 293, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Caution! The routine has reached the maximum tolerance! Results may not converge.\n", "Iteraction reached : 6000\n", "Theta : [-1.36272301 0.14946863 0.06518017]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "(t, j, i, r) = gradient_descent(x, y, theta, 0.003, 6000)\n", "\n", "print('Iteraction reached : ' + str(i))\n", "print('Theta : ' + str(t))\n", "\n", "' Verify error rate behavior '\n", "\n", "plt.close('all')\n", "\n", "plt.figure(figsize=(10,6))\n", "\n", "axes = plt.gca()\n", "axes.set_xlim([0,i])\n", "\n", "plt.plot(j)\n", "\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 294, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "' Verify step rate behavior '\n", "\n", "plt.close('all')\n", "\n", "plt.figure(figsize=(10,6))\n", "\n", "axes = plt.gca()\n", "axes.set_xlim([0,i])\n", "\n", "plt.plot(r)\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The figure above illustrates the wide variation between the steps given by theta until the tolerance of the Gradient function is reached. Such a value for alpha may result in convergence for a greater number of interactions, but in our case study, within the 6000 that have been established, the value presented for alpha is not a good option." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### How to use the model and perform a prediction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's test our model for a student who has taken 45 and 85 on the first grades of the assessments. The template should indicate that it is approved.\n", "\n", "The procedure is similar to that done previously. Let us operate the values according to the theta values obtained." ] }, { "cell_type": "code", "execution_count": 295, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 1.]\n" ] } ], "source": [ "(t, j, i, r) = gradient_descent(x, y, theta, 0.002, 6000)\n", "p = predict(np.matrix([1., 85, 45]), t)\n", "print(p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The model accuracy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The function below will return the accuracy of our Gradient to the value of alpha 0.002" ] }, { "cell_type": "code", "execution_count": 296, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "74.0\n" ] } ], "source": [ "(t, j, i, r) = gradient_descent(x, y, theta, 0.002, 6000)\n", "p = predict(x, t) \n", "print((y[np.where(p == y)].size / float(y.size)) * 100.0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Can we improve the accuracy of the model?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To find the minimum cost function you need to set a good value for alpha. However, numerous tests are required until a value that implies the Gradient convergence is obtained.\n", "\n", "One way to choose the best parameters and best the accuracy of the model is to use an embedded function called fmin_bfgs to find the best theta parameters for the logistic regression cost function." ] }, { "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.6.1" } }, "nbformat": 4, "nbformat_minor": 2 }