├── 1. Linear Regression - Profit vs Population.ipynb ├── 2. Linear Regression - Price vs Size and # of Bedrooms.ipynb ├── 3. Logistic Regression - Admission vs Exam1 and Exam2.ipynb ├── 4. Logistic Regresion - Quality vs Chip test 1 and chip test 2.ipynb ├── 5. SVM Classification.ipynb ├── 6. K-means Clusterization.ipynb ├── 7. OneVsAll - Prediction of Drawn Numbers.ipynb ├── 8. Neural Network - Prediction of Numbers.ipynb ├── Notes Machine Learning in Coursera by AnrewNg.pdf ├── README.md └── data ├── data1.txt ├── data2.txt ├── data3.txt ├── data4.txt ├── data5a.mat ├── data5b.mat ├── data6.mat └── data7.mat /1. Linear Regression - Profit vs Population.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Profit vs Population\n", 8 | "In this exercise I estimate the profit of a company base on the population of the city." 9 | ] 10 | }, 11 | { 12 | "cell_type": "code", 13 | "execution_count": 1, 14 | "metadata": { 15 | "collapsed": false 16 | }, 17 | "outputs": [], 18 | "source": [ 19 | "import numpy as np\n", 20 | "import pandas as pd\n", 21 | "from scipy.optimize import fmin_cg\n", 22 | "import matplotlib.pyplot as plt\n", 23 | "%matplotlib inline" 24 | ] 25 | }, 26 | { 27 | "cell_type": "code", 28 | "execution_count": 2, 29 | "metadata": { 30 | "collapsed": false 31 | }, 32 | "outputs": [ 33 | { 34 | "data": { 35 | "text/html": [ 36 | "
\n", 37 | "\n", 38 | " \n", 39 | " \n", 40 | " \n", 41 | " \n", 42 | " \n", 43 | " \n", 44 | " \n", 45 | " \n", 46 | " \n", 47 | " \n", 48 | " \n", 49 | " \n", 50 | " \n", 51 | " \n", 52 | " \n", 53 | " \n", 54 | " \n", 55 | " \n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | "
PopulationProfit
06.110117.5920
15.52779.1302
28.518613.6620
37.003211.8540
45.85986.8233
\n", 73 | "
" 74 | ], 75 | "text/plain": [ 76 | " Population Profit\n", 77 | "0 6.1101 17.5920\n", 78 | "1 5.5277 9.1302\n", 79 | "2 8.5186 13.6620\n", 80 | "3 7.0032 11.8540\n", 81 | "4 5.8598 6.8233" 82 | ] 83 | }, 84 | "execution_count": 2, 85 | "metadata": {}, 86 | "output_type": "execute_result" 87 | } 88 | ], 89 | "source": [ 90 | "#load the data from a .txt file and observed first 5 examples\n", 91 | "df = pd.read_csv('data/data1.txt', names = ['Population','Profit'])\n", 92 | "df.head()" 93 | ] 94 | }, 95 | { 96 | "cell_type": "code", 97 | "execution_count": 3, 98 | "metadata": { 99 | "collapsed": false 100 | }, 101 | "outputs": [ 102 | { 103 | "data": { 104 | "text/plain": [ 105 | "" 106 | ] 107 | }, 108 | "execution_count": 3, 109 | "metadata": {}, 110 | "output_type": "execute_result" 111 | }, 112 | { 113 | "data": { 114 | "image/png": "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\n", 115 | "text/plain": [ 116 | "" 117 | ] 118 | }, 119 | "metadata": {}, 120 | "output_type": "display_data" 121 | } 122 | ], 123 | "source": [ 124 | "#Plot the data with scaled units\n", 125 | "plt.scatter(df['Population'], df['Profit'])\n", 126 | "plt.xlabel('Population/(10,000)')\n", 127 | "plt.ylabel('Profit/(10,000)')" 128 | ] 129 | }, 130 | { 131 | "cell_type": "code", 132 | "execution_count": 30, 133 | "metadata": { 134 | "collapsed": false 135 | }, 136 | "outputs": [], 137 | "source": [ 138 | "#Pass data to a matrix to be handle\n", 139 | "x = df.as_matrix(columns = ['Population'])\n", 140 | "y = df.as_matrix(columns = ['Profit'])\n", 141 | "\n", 142 | "#Number of examples\n", 143 | "m = x.shape[0]\n", 144 | "\n", 145 | "#Number of features + 1\n", 146 | "n = x.shape[1] + 1\n", 147 | "\n", 148 | "#Initialize fitting parameters\n", 149 | "theta_initial = np.zeros(n)" 150 | ] 151 | }, 152 | { 153 | "cell_type": "code", 154 | "execution_count": 46, 155 | "metadata": { 156 | "collapsed": false 157 | }, 158 | "outputs": [], 159 | "source": [ 160 | "#Function that normalizes the data to match unit scales\n", 161 | "def normalize_data(x):\n", 162 | " # normalizaing such that data has mean 0 and std of 1\n", 163 | " mu = x.mean()\n", 164 | " sigma = x.std()\n", 165 | " x = (x - mu) / sigma\n", 166 | " return (x, mu, sigma)\n", 167 | "\n", 168 | "def add_column_ones(x):\n", 169 | " x = np.append(np.ones((x.shape[0], 1)), x, axis = 1)\n", 170 | " return x\n", 171 | "\n", 172 | "#Function that we want minimized\n", 173 | "def cost_function(theta, x, y):\n", 174 | " theta = theta.reshape((len(theta), 1))\n", 175 | " pred = np.dot(x, theta)\n", 176 | " J = np.mean((pred - y) ** 2) / 2\n", 177 | " return J\n", 178 | "\n", 179 | "#Gradient of costFunction\n", 180 | "def gradient(theta, x, y):\n", 181 | " theta = theta.reshape((len(theta), 1))\n", 182 | " pred = np.dot(x, theta)\n", 183 | " grad = np.dot(x.T, pred - y) / m\n", 184 | " return grad.flatten()\n", 185 | "\n", 186 | "#Prediction for data x using parameters theta\n", 187 | "def prediction(theta, x, mu = 0, sigma = 1):\n", 188 | " theta = theta.reshape((len(theta), 1))\n", 189 | " x = x.reshape(len(x), 1)\n", 190 | " x = (x - mu) / sigma\n", 191 | " x = add_column_ones(x)\n", 192 | " pred = np.dot(x, theta)\n", 193 | " return pred" 194 | ] 195 | }, 196 | { 197 | "cell_type": "code", 198 | "execution_count": 47, 199 | "metadata": { 200 | "collapsed": false 201 | }, 202 | "outputs": [ 203 | { 204 | "data": { 205 | "image/png": "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\nfgAAAABJRU5ErkJggg==\n", 206 | "text/plain": [ 207 | "" 208 | ] 209 | }, 210 | "metadata": {}, 211 | "output_type": "display_data" 212 | } 213 | ], 214 | "source": [ 215 | "#Normalize data and plot it\n", 216 | "X, mu, sigma = normalize_data(x)\n", 217 | "plt.scatter(X,y)\n", 218 | "plt.title('Normalized Data')\n", 219 | "\n", 220 | "X = add_column_ones(X)" 221 | ] 222 | }, 223 | { 224 | "cell_type": "code", 225 | "execution_count": 63, 226 | "metadata": { 227 | "collapsed": false 228 | }, 229 | "outputs": [ 230 | { 231 | "name": "stdout", 232 | "output_type": "stream", 233 | "text": [ 234 | "Optimization terminated successfully.\n", 235 | " Current function value: 4.476971\n", 236 | " Iterations: 1\n", 237 | " Function evaluations: 2\n", 238 | " Gradient evaluations: 2\n", 239 | "The fitting parameters that minimize the costFunction are Theta = (5.839135,4.593041). \n", 240 | "The plot shows the evolution of the costFunction.\n" 241 | ] 242 | }, 243 | { 244 | "data": { 245 | "image/png": "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\n", 246 | "text/plain": [ 247 | "" 248 | ] 249 | }, 250 | "metadata": {}, 251 | "output_type": "display_data" 252 | } 253 | ], 254 | "source": [ 255 | "#Perform the minimization of the cost function with the use of its gradient\n", 256 | "theta, thetas = fmin_cg(cost_function, theta_initial, fprime = gradient, \n", 257 | " args = (X, y), retall = 1, disp = 1)\n", 258 | "\n", 259 | "#Calculate the evolution of the costFunction with every iteration\n", 260 | "J = np.zeros(len(thetas))\n", 261 | "for i, theta in enumerate(thetas):\n", 262 | " J[i] = cost_function(theta, X, y)\n", 263 | " \n", 264 | "plt.plot(range(J.size), J)\n", 265 | "plt.xlabel('Iterations')\n", 266 | "plt.ylabel('Cost Function')\n", 267 | "\n", 268 | "print 'The fitting parameters that minimize the costFunction are Theta = (%f,%f). \\\n", 269 | " \\nThe plot shows the evolution of the costFunction.' %(theta[0],theta[1])" 270 | ] 271 | }, 272 | { 273 | "cell_type": "code", 274 | "execution_count": 72, 275 | "metadata": { 276 | "collapsed": false 277 | }, 278 | "outputs": [ 279 | { 280 | "name": "stdout", 281 | "output_type": "stream", 282 | "text": [ 283 | "This curve achieves a cost function of J = 4.476971\n" 284 | ] 285 | }, 286 | { 287 | "data": { 288 | "image/png": "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\nYII=\n", 289 | "text/plain": [ 290 | "" 291 | ] 292 | }, 293 | "metadata": {}, 294 | "output_type": "display_data" 295 | } 296 | ], 297 | "source": [ 298 | "#Plot prediction curve with data\n", 299 | "population = np.linspace(5,25,100)\n", 300 | "pred = prediction(theta, population, mu, sigma)\n", 301 | "\n", 302 | "plt.scatter(df['Population'], df['Profit'])\n", 303 | "plt.plot(population, pred, 'r')\n", 304 | "plt.xlabel('Population/(10,000)')\n", 305 | "plt.ylabel('Profit/(10,000)')\n", 306 | "\n", 307 | "print 'This curve achieves a cost function of J = %f' % J[-1]" 308 | ] 309 | }, 310 | { 311 | "cell_type": "code", 312 | "execution_count": 71, 313 | "metadata": { 314 | "collapsed": false 315 | }, 316 | "outputs": [ 317 | { 318 | "name": "stdout", 319 | "output_type": "stream", 320 | "text": [ 321 | "For a population of 150 thousand we expect a profit of $139997.237845\n" 322 | ] 323 | } 324 | ], 325 | "source": [ 326 | "#Make an specific prediction\n", 327 | "\n", 328 | "population = np.array([15])\n", 329 | "expected_profit = prediction(theta, population, mu, sigma)\n", 330 | "\n", 331 | "print 'For a population of %d thousand we expect a profit of $%f' \\\n", 332 | " %(population*10,expected_profit*10000) \n" 333 | ] 334 | } 335 | ], 336 | "metadata": { 337 | "kernelspec": { 338 | "display_name": "Python 2", 339 | "language": "python", 340 | "name": "python2" 341 | }, 342 | "language_info": { 343 | "codemirror_mode": { 344 | "name": "ipython", 345 | "version": 2 346 | }, 347 | "file_extension": ".py", 348 | "mimetype": "text/x-python", 349 | "name": "python", 350 | "nbconvert_exporter": "python", 351 | "pygments_lexer": "ipython2", 352 | "version": "2.7.6" 353 | } 354 | }, 355 | "nbformat": 4, 356 | "nbformat_minor": 0 357 | } 358 | -------------------------------------------------------------------------------- /3. Logistic Regression - Admission vs Exam1 and Exam2.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Admission vs (Exam 1 and Exam 2)\n", 8 | "Here I predict if an student is admitted depending on his grades in two exams" 9 | ] 10 | }, 11 | { 12 | "cell_type": "code", 13 | "execution_count": 1, 14 | "metadata": { 15 | "collapsed": false 16 | }, 17 | "outputs": [ 18 | { 19 | "name": "stdout", 20 | "output_type": "stream", 21 | "text": [ 22 | "Populating the interactive namespace from numpy and matplotlib\n" 23 | ] 24 | } 25 | ], 26 | "source": [ 27 | "#Load Modules\n", 28 | "from pandas import read_csv\n", 29 | "from numpy import ones, zeros, append, linspace, reshape, mean ,std, sum, array, dot, exp, meshgrid, rint\n", 30 | "from pylab import plot, scatter, xlabel, ylabel, contour,figure, show, axes, legend, title\n", 31 | "from scipy.optimize import fmin_bfgs\n", 32 | "%matplotlib inline\n", 33 | "%pylab inline" 34 | ] 35 | }, 36 | { 37 | "cell_type": "code", 38 | "execution_count": 2, 39 | "metadata": { 40 | "collapsed": false 41 | }, 42 | "outputs": [ 43 | { 44 | "name": "stdout", 45 | "output_type": "stream", 46 | "text": [ 47 | " Exam 1 Exam 2 Acceptance\n", 48 | "0 34.623660 78.024693 0\n", 49 | "1 30.286711 43.894998 0\n", 50 | "2 35.847409 72.902198 0\n", 51 | "3 60.182599 86.308552 1\n", 52 | "4 79.032736 75.344376 1\n" 53 | ] 54 | } 55 | ], 56 | "source": [ 57 | "#Read data from file\n", 58 | "dataFrame = read_csv('data/data3.txt', names = ['Exam 1','Exam 2','Acceptance'])\n", 59 | "print dataFrame[:5]" 60 | ] 61 | }, 62 | { 63 | "cell_type": "code", 64 | "execution_count": 3, 65 | "metadata": { 66 | "collapsed": false 67 | }, 68 | "outputs": [ 69 | { 70 | "data": { 71 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEPCAYAAABcA4N7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8VPW5+PHPE5YadkIkBFmCWK7VuuHaKjIoAfVlaUVx\naUVqrd62tyotbUFbJVRRRLlW++vyE5dArf7cwItchUSaKbForRVUBJq6BHBhExEFRCDP749zMswM\nyTCZ7Zwz87xfr3kxc+acOc/MkPPMdxdVxRhjjGlNkdcBGGOM8TdLFMYYYxKyRGGMMSYhSxTGGGMS\nskRhjDEmIUsUxhhjEspaohCRB0Vko4i8EbVtnIi8KSL7RGRo3P43iMi/RWSNiIzKVlzGGGPaJpsl\nioeAc+K2vQFcACyN3igiRwGXAEe5x/xeRKy0Y4wxPpC1i7Gq1gMfx21bo6oNLez+TeBRVd2jqo3A\nW8Ap2YrNGGNM8vzyq70v8F7U4/eAwzyKxRhjTBS/JIqW2NwixhjjA+29DsD1PtA/6nE/d1sMEbHk\nYYwxKVBVSfVYL0sU0UEvAC4VkY4iMgj4MvBySwepqu9uU6dO9TwGi8liKsS4LKbkbunKWolCRB4F\nhgOlIrIemApsBX4LlAL/KyLLVfVcVV0lIo8Dq4C9wI80E+/OGGNM2rKWKFT1slaeerqV/W8DbstW\nPMYYY1Lj58bswAiFQl6HcACLKTkWU/L8GJfFlBsSpBoeEbEaKWOMaSMRQdNozPZLrydjTBaJpHyN\nMAGTjR/TliiMKRBWGs9/2fpBYG0UxhhjErJEYYwxJiFLFMYYYxKyRGGMCZTvfve73HTTTSkde/vt\nt3P11VdnOKJYRUVFvPPOO1k9R65ZojDG+EYoFKKkpIQvvvii1X1EJOVG2xtuuIHZs2cD0NjYSFFR\nEU1NTZHnq6urGTZsWEqvnc8sURhjEmpoaODWW6czY8YM1q1bl7XzNDY28vLLL9O7d28WLFiQcN9M\n9uCy3mAHZ4nCmAJXU1PDnXfeybx58w64aL766qsMHXo6VVVbuPnm9Rx77Km89dZbWYlj7ty5jBw5\nkvHjxzNnzpzI9uXLlzN06FC6devGpZdeyueffx55LhwO069fP+6880569+5N3759efrpp3n22WcZ\nMmQIvXr1YsaMGZH9q6qqGD9+PABnnnkmAD169KBbt2689NJL/OAHP+DFF1+ka9eulJSUALB7925+\n9rOfMXDgQPr06cMPf/jDmBjuvPNO+vbtS79+/XjwwQez8tl4zutZDds4A6IaY9qutb+dG2+s0s6d\nj9AOHX6inTufoJdd9j1tamqKPH/22d9S+L2CKqgWFf1ax4+/JuY16uvrtaLiq1pc3EOHDTtXP/zw\nw5RiHDx4sD788MPa0NCgHTp00E2bNunu3bt1wIAB+pvf/Eb37t2rTz75pHbo0EFvuukmVVWtq6vT\n9u3b6y233KJ79+7V2bNna69evfTb3/62fvbZZ/rmm29qcXGxNjY2qqpqVVWVXn755aqq2tjYqCKi\n+/bti8RQXV2tZ5xxRkxcEydO1G9+85v68ccf66effqrf+MY39IYbblBV1eeee07Lysr0zTff1B07\nduhll12mIqJvv/12Sp9Bulr7nt3tqV970zk41zdLFMakpqW/nc2bN2vHjt0UNrqJYId26jRAV6xY\nEdnnxBPPUngukijgT3reeZdEnl+3bp127lyq8LTCZm3f/hd67LFfa3N89fX1esghh+j27dtVVfW4\n447Tu+++W//6179q3759Y/b9+te/HpMoiouLI8lt+/btKiL68ssvR72HE/V//ud/VFV16tSpkUTx\n7rvvHpAoHnrooZhE0dTUpJ07d4658C9btkwHDRqkqqpXXnllJGmoqjY0NORlorCR2cYUqG3bttGh\nQwlffNHb3dKJDh0G8tFHH0X2ufTSb7B69U3s3DkQ2E2nTrdy6aX7exwtW7aMoqIzcZa9h717Z7B6\ndVe2b99Ot27dko5lzpw5jBo1iq5duwIwbtw45syZQ3l5OYcdFrsq8sCBA2Me9+rVK9K4XVxcDEBZ\nWVnk+eLiYj777LOkY4m2efNmdu7cyYknnhjZpqqRBvAPP/yQk08+OfLcgAEDUjqP31miMKZADRw4\nkB49OrBz529Q/R7wLPBvjj/++Mg+P/3pdWzb9gl//OM5FBW14xe/uI7x478Teb5nz56ovoOzjEx7\nYD3QFLlgJ2PXrl08/vjjNDU1UV5eDjjtAp988gnl5eW8/37sYpdr167liCOOSPl9N2up51T8ttLS\nUoqLi1m1alUktmjl5eUxDfzZbOz3kjVmG1OgOnToQDj8LF/96uN07FjOoEG38fzzz0QaccEZE3Dr\nrVPZsmUtmza9w89+NjHmNc4++2yGDi2nc+eRFBVNoVOn4UyfPp0OHTokHcfTTz9N+/btWb16Na+9\n9hqvvfYaq1ev5owzzmD+/Pm0b9+ee++9lz179jBv3jz+8Y9/ZOT9H3rooRQVFfH2229HtvXp04f3\n3nuPPXv2RN7/1VdfzcSJE9m8eTMA77//PjU1NQBcfPHFVFdXs3r1anbu3Mm0adMyEpvfZC1RiMiD\nIrJRRN6I2lYiIrUi0iAiNSLSI+q5G0Tk3yKyRkRGZSsuY8x+RxxxBK+/vozdu3fwzjuvc9JJJ7Xp\n+Hbt2rFkyQJ+97sr+fWvu7Jgwf38/Oc/adNrzJ07l+9973v069eP3r1707t3b8rKyvjxj3/MY489\nxvz586murqZXr148/vjjXHjhhTHHx5cCEo2xiB6D0alTJ375y19y+umn07NnT15++WXOOussjj76\naPr06UPv3k6V3B133MERRxzBaaedRvfu3amsrKShoQGAc845h4kTJ3LWWWcxZMgQzj777LycqTdr\n61GIyDDgM2Cuqh7jbpsJbFHVmSIyGeipqlNE5CjgEeBk4DDgeWCIqjbFvaZmK15j8pm7HoHXYZgs\na+17Tnc9iqyVKFS1Hvg4bvMYoLmD9BzgW+79bwKPquoeVW0E3gJOyVZsxhhjkpfrNooyVd3o3t8I\nNHdN6Au8F7XfezglC2OMMR7zrNeTqqqIJCoLt/hcVVVV5H4oFAre+rTr10NjIzTPJ1NfDxUV0L+/\nl1EZY/JIOBwmHA5n7PWyuma2iFQAz0S1UawBQqq6QUTKgTpVPVJEpgCo6gx3v0XAVFX9e9zrBb+N\nor4exo6FJ55wHo8bB/Pm7U8cxmSBtVEUhsC1UbRiATDBvT8BeDpq+6Ui0lFEBgFfBl7OcWy5MWyY\nkyRGjHBuTzxhScIY42vZ7B77KLAM+A8RWS8iVwIzgEoRaQDOch+jqquAx4FVwHPAj4JfdDAmOYsX\nL2bUqAsZNepCFi9e7HU4xhwgq1VPmWZVT8lbvHgxs2bdB8CkSdcwevTojL6+yYzFixdzwQUT2LXr\nDgCKiyczf/6cjH9fVvVUGLJV9WSJItdy0Jidq4tPPstVoh016kJqa8ewv0Z2DpWVC6ipeSqj57FE\nURjypY3C9O8fW3oYNizjPZ5mzbrPTRITACdhNF/0TMuiq3+mT5/OBRdMoLZ2DLW1Y7jggglWJVSA\nKioqWLJkSUrHnnfeefzpT3/KcET7hcNh+uewp6QlClPwmktgzYnh5pvvzlminTTpGoqLJ+OMP51D\ncfFkJk26JmGs+dieUVFRQVlZGTt37oxsu//++xkxYkRSx4dCIR544IGD7vfZZ5/RpUsXzjvvvIPu\nm86Sq88++2xkgaSWlldNZ91vL1iiyKb1652qpWb19c62LGvrxafQxZfAmpq+nLNzjx49mvnzneqm\nysoFCasI4xNaTko6n34K0bO3vvsuRK3ulklNTU3cc889KR2b7AX9qaeeYsCAAYTDYTZu3HjwA4wj\nncUscn0jaAsXLV2qWlqqWlfn3EpLnW05sGjRIq2sHKuVlWN10aJFOTlnUFVWjlWojlqcZ5IWFfV0\nt1VrcXGZLz7DA+Os1srKsUkd2+rfztq1qlEr2unatbHPP/KI6uDBquvWqa5Zo3rYYapZ+CwqKip0\nxowZWlJSotu2bVNV1dmzZ2soFIrs87e//U1POukk7d69u5588sm6bNkyVVW98cYbtV27dnrIIYdo\nly5d9Nprr231PCNGjNBZs2bpyJEj9a677op5bu7cuTpgwADt1auXTp8+XSsqKnTJkiWq6ix4dNFF\nF+nll1+uXbt21WOOOUYbGhr0tttu0969e+uAAQO0pqYm8lrDhw/X+++/X1evXq1f+tKXtF27dtql\nSxft0aOH3nfffdqhQwft2LGjdunSRceMGaOqqu+//76OHTtWDz30UB00aJDee++9kdfbuXOnTpgw\nQXv27KlHHXWUzpw5U/v163fA+2vte8ZWuPO5ujqN/GXX1XkdjWnBokWLtLi4LCYx3Hrrrb5LtBlP\nFE1NqqefrvrLXzr3//AH1SOOUN29O3a/u+7a/3/4wQdjn/v0U9XrrlP97DPn8cqVqtOmtfm9VVRU\n6PPPP69jx47VX/3qV6oamyg++ugj7dGjhz788MO6b98+ffTRR7Vnz566detWVVUNhUL6wAMPJDxH\nY2OjtmvXTtevX6/33XefHnvssZHn3nzzTe3SpYvW19fr7t279ac//am2b98+JlEccsghWlNTo3v3\n7tUrrrhCBw4cqLfddltkCdbmVe/i42lpedXvfve7kVX6VFX37dunQ4cO1VtuuUX37Nmj77zzjh5+\n+OG6ePFiVVWdPHmynnnmmfrxxx/r+vXr9eijj9b+/fsf8B4tUViiMFkUhBJYSwkt2Vhb/dvZtEn1\nmGNUe/VSHTBA9a23DtxnzZr9/4fXrYt9bt8+1SuvVD3zTNW//121vFz14Yfb+M408ut95cqV2r17\n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\nAAAASUVORK5CYII=\n", 72 | "text/plain": [ 73 | "" 74 | ] 75 | }, 76 | "metadata": {}, 77 | "output_type": "display_data" 78 | } 79 | ], 80 | "source": [ 81 | "#Extract and plot data\n", 82 | "x = dataFrame.as_matrix(columns = ['Exam 1','Exam 2'])\n", 83 | "y = dataFrame.as_matrix(columns = ['Acceptance'])\n", 84 | "\n", 85 | "pos = where(y==1)[0]\n", 86 | "neg = where(y==0)[0]\n", 87 | "\n", 88 | "scatter(x[pos,0],x[pos,1], marker = 'o', c = 'b')\n", 89 | "scatter(x[neg,0],x[neg,1], marker = 'x', c = 'r')\n", 90 | "xlabel('Exam 1')\n", 91 | "ylabel('Exam 2')\n", 92 | "legend(['Admitted','Not Admitted'])\n", 93 | "\n", 94 | "m = x.shape[0]\n", 95 | "n = x.shape[1]+1\n", 96 | "\n", 97 | "#make initial theta as an array of 1D\n", 98 | "inTheta = zeros(n)\n" 99 | ] 100 | }, 101 | { 102 | "cell_type": "code", 103 | "execution_count": 4, 104 | "metadata": { 105 | "collapsed": false 106 | }, 107 | "outputs": [], 108 | "source": [ 109 | "#functions to be used\n", 110 | "\n", 111 | "def normalizeData(x):\n", 112 | " mu = mean(x,axis=0)\n", 113 | " sigma = std(x,axis=0)\n", 114 | " x = (x-mu)/sigma\n", 115 | " x = append(ones((x.shape[0],1)),x,axis=1)\n", 116 | " return (x,mu,sigma)\n", 117 | "\n", 118 | "def sigmoid(z):\n", 119 | " return 1/(1+exp(-z))\n", 120 | "\n", 121 | "def costFunction(theta,x,y):\n", 122 | " theta = reshape(theta,(theta.size,1))\n", 123 | " pred = sigmoid(dot(x,theta))\n", 124 | " J = mean(-y*log(pred)-(1-y)*log(1-pred))\n", 125 | " return J\n", 126 | "\n", 127 | "def gradient(theta,x,y):\n", 128 | " theta = reshape(theta,(theta.size,1))\n", 129 | " pred = sigmoid(dot(x,theta))\n", 130 | " grad = dot(x.T,pred-y)/m\n", 131 | " return grad.flatten()\n", 132 | "\n", 133 | "def prediction(theta,x,mu=0,sigma=1):\n", 134 | " theta = reshape(theta,(theta.size,1))\n", 135 | " x.shape = (1,x.shape[0])\n", 136 | " x = (x-mu)/sigma\n", 137 | " x = append(ones((x.shape[0],1)),x,axis=1)\n", 138 | " pred = sigmoid(dot(x,theta))\n", 139 | " return pred\n", 140 | "\n", 141 | "def accuracy(theta,x,y):\n", 142 | " theta = reshape(theta,(theta.size,1))\n", 143 | " pred = rint(sigmoid(dot(x,theta)))\n", 144 | " return sum(pred == y)/float(x.shape[0])*100" 145 | ] 146 | }, 147 | { 148 | "cell_type": "code", 149 | "execution_count": 5, 150 | "metadata": { 151 | "collapsed": false 152 | }, 153 | "outputs": [ 154 | { 155 | "data": { 156 | "text/plain": [ 157 | "" 158 | ] 159 | }, 160 | "execution_count": 5, 161 | "metadata": {}, 162 | "output_type": "execute_result" 163 | }, 164 | { 165 | "data": { 166 | "image/png": "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\n3jy/s+Op8847jxtuuCGn195+++1cdNFFec5RsrKyMj744ANP36NQLGiEVWMjTJjglDAaGpztxDaO\nPCmlL55iMm/ePE4+eSL19SdSX38iJ588MbSfXyQSoVevXmzZsiVtGhHJubH3mmuuYerUqQA0NTVR\nVlZGS0tL/Pj06dMZPXp0TucuRtZ7KqyqqmDWLIj9Z541y9mXR7EvnubmnwOwYMFEnn22jrFjx+b1\nfUz+TZnyoPu5TQSgudnZl6/PbsOGDTz88MOsW/clY8eO4dBDD83LeVtramri9ddfZ8iQIcyePZtT\nTz01bdp8VrVZtV16VtIIq8rKHQEDnO3KyvTpc5D8xeMEjylTHszre5SSMJXali5dyi9+8QumTp3K\nxo0bk45t3LiRH/zgUK6+eiG33LKNY445hSeeeDLNmTrmkUce4ZhjjuGcc86hrq4uvn/x4sUceOCB\ndO/enTPOOINvvvkmfiwajTJ48GDuuusu+vXrx8CBA3nuued48cUX2Xvvvenduzd33HFHPH1tbS3n\nnHMOAEcccQQAPXr0oHv37vzlL3/h3//933n11Vfp1q0bvXr1AuDbb7/lyiuvZOjQofTv359LLrkk\nKQ933XUXAwcOZPDgwTz00EOe3Bvf+D3LYp5malSTf9XVNQrTFdR9TNfq6hq/sxUac+fO1erqGq2u\nrtFbb71Vy8sr3Ps5XcvLK3Tu3Lmevnd775fu76a+vl53372Pdulyqe6++0k6bNgIXb9+ffz4Aw88\noOXlNQn/LxZqRcXwpHOsXr1aDztsrJaX99Bhw76vCxcuzOk69tprL33sscf03Xff1V122UU/++wz\n/fbbb3XIkCF677336rZt2/Tpp5/WXXbZRW+44QZVVW1oaNDOnTvrLbfcotu2bdOpU6dq79699ayz\nztJNmzbp0qVLtby8XJuamlRVtba2Vs8++2xVVW1qalIR0e3bt8fzMH36dD388MOT8nXFFVfoSSed\npF9++aVu3LhRTzjhBL3mmmtUVfWll17SiooKXbp0qX799dd65plnqojo+++/n9M9yId0n7W7P7vv\n22xfEMSHBQ1vZPLFY1Jrfe/KynoXPAAnBq1Un1u6v5vvfGekwvPxvO6665l69913x4/fdttt2qnT\npIRr+VT32KN3/HhLS4vut9/B2qnTtQqfKzyjXbv21dWrV2eV/8bGRt1tt910w4YNqqp6wAEH6D33\n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\nY6N+++23+p//+Z/auXNn/eMf/+he4mTdbbfddP78+bpt2zY999xzdejQoXrbbbfFl5mNrebXOj+p\nlpA977zz4jP1qqpu375dDzzwQL3lllt069at+sEHH+jw4cN13rx5qqp61VVX6RFHHKFffvmlrlq1\nSkeMGJE0u2+idJ81OcxyayUNUzJiXU7r60+kvv5ETj55IvPmzfM7W8Fzww0wZAgMGOCs3/Lgg/C9\n7yWnGTkStmxxts84Azp1Sj4+fDgcfTQsWgTjx0NzM7gr6GVDRLj55pu5//77Wbt2bdKxF154ge9+\n97v86Ec/oqysjDPOOIN99tmH2bNnx9NoO73DHn30UUaNGsXgwYOpqanhnXfeYcmSJQA8/fTTnHDC\nCRx++OF06dKFW265hbKy5K/MI444gurqajp16sSpp57KF198wdVXX02nTp04/fTTaWpqYsOGDTu9\nb7p8Je5ftGgRa9eu5frrr6dz584MGzaMCy+8kCeeeAKAmTNnct1119GjRw8GDx7M5ZdfXpDecBY0\nTCDMmzePMWNOYcyYUzz7Im89Irq5+ec2D1MqnTrBf/wHbNwImzbBMcckH49VSZ11FvzpT3DuuU5V\nVaJzz4XrroNRo0AEfvMbKMvt62bEiBEcf/zx3HHHHUntFJ988slOS6kOHTqUTz75JP68vXaNRx55\nhAkTJgDOErGRSITp06fHzz948OB42t13353evXsnvb5fv37x7fLycvr06bPTMrO5Liu7cuVKPvnk\nE3r27Bl/3H777Xz22Wfx/CX2lirUsrIWNIzvrAQQMG+84QSFWbNg4kRnO7GNY+NGOPRQmDYNjjjC\nSde6IXzjRpgxA3bdFVasgHff7VCWbrrpJqZOnZq0zOugQYNYuXJlUrqVK1fG1w9vL2AsXLiQFStW\ncOuttzJgwAAGDBjAq6++yuOPP8727dsZOHAgqxKua/PmzXzxxRdtnDFzmSwrO2TIEIYNG8aXX34Z\nf2zYsIE5c+YA/i0ra0HD+K5QJYCdl2C9ikmTLs77+4Te//6vUyV18slOYBg5EhJ7FfXvD7feuqNK\n6vDD4YILks9x9tmw776weTPccQdUVzullhzttddenH766Uk9qY499ljeffddZsyYwbZt23jyySdZ\nvnw5xx9/PAAVFRVJy7a2VldXx5gxY5KWlH377bdpbm7mpZde4tRTT2XOnDn8+c9/ZsuWLdx44420\nxBZ576CKioqkJWRj+z744IP481GjRtGtWzfuvPNOmpub2b59O2+//TZvvPEG4Cwre/vtt/PVV1/x\n8ccfJzWSe8mChikZY8eO5dln60KxTrev/u3fwO29Q6dOMGWK00aRjXvv3VElde65TjVW164dytaN\nN97I5s2b47/Ie/fuzZw5c5gyZQp9+vTh7rvvZs6cOfTq1QuAyy+/nKeffppevXpxxRVXJJ3rm2++\nYebMmfz0pz+lX79+8UdVVRXnnHMOjzzyCPvttx+/+tWvOOussxg4cCC9evVKqg5KNWajvecxRx99\nNCNGjKB///7xKq4LLriAd955h549e1JTU0NZWRlz5szhzTffZPjw4fTt25eLL7443kYyefJkhg4d\nyrBhwxg3bhznnntuzmNIsmHTiJicJU5JMWnSxTl/AbeeE6m8/Cr7Qi8AW+61dNjcU61Y0Ci8fH/R\n5ysAmcxZ0CgdFjRasaBReGPGnEJ9/YnsWJfBqfYp9TmNwhT8LGiUjnwGjaAv92pMaLQufS1YMNGq\n2UzRsYZwkxPribSzIIwDKcR4F1PafA0aIvKQiKwRkbfaSHOfiLwnIktEZGQh82fSs55IwWPjXUwh\n+NqmISKjgU3AI6r6/RTHxwOXqup4Efkh8EtVPSRFOmvTML7zuxdYtu1M1qZROoqmTUNVG0Wkqo0k\nJ+LUf6Cqr4lIDxGpUFWbv9gETqz0taMhPPilr0L06zfFJegN4YOAxPkJPgYGAxY0TCCNHTvWt0Ax\nadLFLFgwkeZm57nTzlSXNn02pYxUpZhevW7hoIMOCHwvMZNfQQ8aAK1/CqX8n15bWxvfjkQiRCIR\n73JkTAAVuqRz0EEHlHwX67CJRqNEo9EOncP3cRpu9dTzado0fgNEVfUJ9/ly4MjW1VPWpmGMt/xu\nrzHeyKVNI+hdbmcD5wKIyCHAV9aeYUzhWW85E+N376kZwJFAH5x2isnALgCq+ls3zQPAOOBr4HxV\n/VuK81hJwxhjsmTTiBhjjMlYMVZPGWOMCRALGsYYYzJmQcOYgLB5o0wYWJuGMQFgXVqNH6wh3JiQ\nsvVJjB+sIdwYY4ynwjCNiDFFL9t5o4zxi1VPGRMQYVoq1hQHa9MwhbFqFTQ1wejRzvPGRqiqgspK\nP3NljMmStWmYwmhqgpoaiEadR02Ns8+EjnXzNdmykkYx8OOXfzQKRx3lbDc0gE1F32GFrp6ybr4m\ndCv3mTyJ/fKfOdN5PmECzJpl1UUh0voLfMGCiZ5/gU+Z8qD7fk433+ZmZ58FDdMWq54qBqNHOwHj\nqKOcx8yZO0odXmhsdAJTQ4PzmDDB2WdylvwF7gSPWKnDhE8xV/tZScNkr6rKKcnEAtOsWc4+EyrW\nzdcbfpQaC0pVQ/9wLqOEvfKKap8+qg0NzqNPH2efCY25c+dqeXmFwnSF6VpeXqFz584tyPtWV9do\ndXVNQd4vF2HIY6Lq6hr3c1T3MV2rq2v8zlZK7ndnVt+3VtIoBvn65W9daX1T6PW9E983yL+Ai/5X\nexhlG2Xy+cBZkW858B5wVYrjEWA9sNh9XJ/mPHmNviUrRCWWIPz6DEIeil2YfrXH+FVqzAU5lDT8\nDBidgBVAFc4Sr28C+7ZKEwFmZ3CufN7H0tbQoPG/0IYGv3OTUhD+KIOQhzDKNtCGMWiohucHRdiC\nxr8AcxOeXw1c3SpNBHg+g3Pl7y6GyUcfJZcEXnnF2dcRIQgaQfgiCUIewiaXQGvB2Vu5BA0/u9wO\nAlYlPP/Y3ZdIgUNFZImIvCgi+xUsd2GQ75HZ1pXWeCiXbsWxtp7q6tlUV8+29owA8LMhPJMh3H8D\nKlV1s4gcCzwH7J0qYW1tbXw7EokQKYURyonjM8D5ou/I+IyQdKUNQlfRIOShGKxdu4YxY04B0o+C\nD3pjfZhEo1Gi0WiHzuHbNCIicghQq6rj3OfXAC2q+vM2XvMhcJCqrmu1X/26Dt+V6HQeQZgRNgh5\nCJPWPaG6dLkC2IUtW+4CbBoTP4RqllsR6Qz8HTga+AR4HThTVZclpKkAPlNVFZFRwFOqWpXiXKUZ\nNBobU08f4uVocGM6IDHQrl37BYsXn4+tVuifUM09parbRORSYB5OT6ppqrpMRH7sHv8tcCpwiYhs\nAzYDZ/iV30AKSXVSqbESSHqJVU2xaikTLjbLbTGyQXq+2bkK5r8YMWJv+vSpsADSis2y6z9bT8M4\nbL0L37TuIbRly10sXryd+voTOfnkiUU3eV1HWM+o7AVhIkQraRSrEm0g99uYMadQX38iifX0MBt4\nBquzNx3hRcksVG0axhSj1l1x4UrgMR9zZIpFUNY/seqpYmSD9HyTWOUycuTDdOmyDfgHUOeO5bjY\n7ywa0yFWPVWM8tEQbo3peWE9qUy+BKV6yoKGSc3GgJgcWaD0Tr7vrQUNk1/WmG6yZN1ow8W63BoT\ncEHoMpmLTPMd1rXOw/q5+CLbaXGD+KBUp0b3UogWZEoU5HUMwjrNdzb5DuOU8WH9XPKBMK2nkc+H\nBQ0PeLFWh8eC/scfxi9U1ezy3foz6NKlr44ceVggg3hMWD+XfMglaFj1lEmtsjK50Xv06MD3nApr\n1Ugxad3lGLayePFFNiI+Q+mqyQJVfZZtlAniAytpGA3+L8agl4TSyTXfQf88YoLyuaTLh5f5w6qn\nTCkLyh9/W4Lc5tKWXPIdlqChGozPJd398vI+5hI0bBoRUzRiVSM7+rEHr6tnWFehyyXfYVrdMKyf\nix9snIYxxjM20C9z6ca4AJ6Nfcn74D4R2RcYCLymqpsS9o9T1bk55zThPMC9OIsw/U5TLPUqIvcB\nx+IswnSeqi5OkcaChjEm9NIFWa+Cb16DhohcBvwEWAaMBC5X1efcY4tVdWQHM9sJZ7nXY4DVwCJ2\nXu51PHCpqo4XkR8Cv1TVQ1Kcy4JGENn8VZ6yX/Gmo/I9NfrFwEGquklEqoCnRaRKVe/tQB4TjQJW\nqGoTgIg8AZyEE6RiTsRZkABVfU1EeohIhaquyVMejJdii0G1nr/KgkaHta7KWLBgok3XYQqirXEa\nEquScr/YI8CxInIPkFVkSmMQsCrh+cfuvvbSDM7De5tCGD3aCRhHHeU8Zs60CQ/zxMakeCdQYyIC\nqK2g8ZmI/CD2xA0gxwO9gf3z8N6Z1ie1DlBWD2WM8USsBFdff2KHByQWa/Bpq3rqXGBr4g5V3Soi\nE4F8/KRZDSTWU1TilCTaSjPY3beT2tra+HYkEiFiM7Jmzqu2h8TFoCCw06uHsW0gTN1ZwyRfq+MF\ntfowGo0SjUY7dpJsB3bk64ETsN4HqoAuwJvAvq3SjAdedLcPAf6S5lzZjmkxibyanDAE81eFYUBg\nOkEYkFZs8jWQLiwDGwnT4D5V3SYilwLzcLrcTlPVZSLyY/f4b1X1RREZLyIrgK+B8/3Kb1FLbHsA\np2SQj9JAZWVyaSVgJQwIzrrLubABaflnJbj2+ToiXFVfAl5qte+3rZ5fWtBMGWNKVr5mFSjm4JPx\niHAR6U5CkFHVdV5lKls2TqODSnhpV1tpznglDG1lniz36lYX3QR8C7S4u1VVh+eUSw9Y0OigYhqE\nl8O1hOGP2xgveBU0VgCHqOrajmTOSxY0TFwJl5qMyZZXQWM+cLKqft2RzHnJgoZJEo0mN+pb92tj\nUsr3NCIxVwOvisirwBZ3n6rqZdlm0BhjTLhlEjQeBF4G3sJp0xBsVLYJqpAMKDQmrDKpnurwjLZe\ns+opE1diJpTFAAATWUlEQVRMjfrGeCyX6qm25p6KeUlEfiwiA0SkV+yRYx6N8VZlpRMkGhud56NH\nO0Fk1aq2XhUqxTqnkUkvSJ95JiWNJlJUR6nqMI/ylLWSLmnYL+udFXEPKhtXUnq8/MxzKWn4NvdU\nPh+U8txTXs0bFXYNDRqf+Kehwe/c5E1Y5jQy+ePlZ45Xc0+JyPeA/YDdEoLNI1lFJ+MNr+aNChor\nURkTCO22aYhILXA/8ABwFHAnzop6xhRObBXAaNR51NQ4+1JJ7EHV0OBsx9o4shSkumRwRqyXl1+F\ns6BlnTun0cV+Z8t4KHCfeXtFEeBtnFlol7jPK4CXsy3SePnAqqdKo3oq0yqnPE3JHtRp021K9NLj\n1WdODtVTmTSEL1LVg0Xkr8C/AhuA5ar6Xe9CWXasIbypNKptCjzSe8yYU6ivP5HYtOlQR3X1bObP\nf8bT9zWmULwaEf6GiPQEpgJv4KxrsTCH/BkvhGDNirywQXvGBELGU6MDiMgwoLuqLvEuS9kr6ZJG\nqfChRGXdW02x82rCwgtUdVrC887Adap6U27ZBHdw4JPAUKAJOE1Vv0qRrgmnOmw7sFVVR6U5nwUN\n4wmbNt0UM6+CxgxgT+BCoBfwMPCKqk7qQEbvBNaq6p0ichXQU1WvTpHuQ+AgbWfBJwsaxpgYC/SZ\n8yRouCc+A6fL7dfAj1R1QW5ZjJ9vOXCkqq4Rkf5AVFX3SZHuQ+CfVfWLds5nQcMYY1WKWfJk7ikR\n2Ru4DJgFfAScLSJ75JbFuApVXeNur8HpxpuKAi+LyBsiclEH39P4ZdWq5HESjY1FNReU8UeqMTRT\npjzoBoyJgBM8YqUOkx+Z9J6aDVyqqi+LSBnwM2ARzgjxtESkHuif4tB1iU9UVUUkXTHhMFX9VET6\nAvUislxVcxulZfwTG5jXei6oYuwWbAqidYliwYKJPPtsnc+5Kg2ZBI0fqup6AFVtAaaIyPPtvUhV\nq9MdE5E1ItJfVf8hIgOAz9Kc41P3389F5FlgFJAyaNTW1sa3I5EIEVutLThKZaoTUzDJJQpobnb2\nTZp0MQsWTKS52UnnjJ62YBITjUaJRqMdOkfaoCEi/62qd6rqehGZoKozEw6fB1zbgfedjfNpxz71\n51K8/+5AJ1Xd6FaHjQHS9thKDBrGmNI0duxYnn22LqEh3NozErX+QX3TTdl3gk3bEJ64+FLrhZg6\nujCT2+X2KWAICV1uRWQgMFVVjxOR4TjtKOAEt9+r6u1pzmcN4UFWxFOVG39Yg3d+5LX3lJdBI98s\naARcKU11YgrGutZ2nAUNY4wxGct30NgObHaflgPNCYfLVTWjtTgKwYKGMcZkL68TFqpqp45nyRhj\nTDFpd3CfMcYYE2NBw5giFLQVB03xyGpq9KCyNg2TlSLvzWXdUU2mPJl7yhhfeTFvVTbrjedTgebg\nsvmXjJcC0wPKmJS8mLfKr2lNbA4uUwQsaJhgK6Z5qwp0LTb/kvGSVU+Z0pO43nhDg7PdWDyTJ8fm\nX6qunk119WxrzzB5ZQ3hJti8mLfKr4Zwm4PLBIxnK/cFnQWNIlYMPZ1i11BVtaPBPbYdtmsxRcV6\nT4WNrWjXvsrK5F/iicEjJuj3LdYA/v77sH37jt5ao0dbwDChYw3hfrLeNLkJ230rpsZ8U/IsaPjJ\nvkxyM3o0/OpXyfcNnNJGUAOHMUXCqqdMOP3jHzu233yzcAP0clHkvbVMafElaIjIBBFZKiLbReTA\nNtKNE5HlIvKeiFxVyDwWhH2Z5KaxEW65Be65x3n+s5/BDTcEt5RWVeVUn0UizmPWLGefyYnNq+Uv\nX3pPicg+QAvwW2CSqv4tRZpOwN+BY4DVwCLgTFVdliJtOHtPFUPPID/E7tv27TuqqJ58Ek47zdds\nGe/ZvFr5FZreU6q6XFXfbSfZKGCFqjap6lbgCeAk73NXQKl6BlnAaF/sHiWW0n7yEyulBYDXpQCb\nV8t/QW4IHwQk9qP8GPihT3kJh1IqucSqfGLXalU+vmtdCliwYKKVAoqQZ0FDROqB/ikOXauqz2dw\niqzqm2pra+PbkUiESCSSzcuLQ9i6onZEZWXydcUGy8X2FXPAbC0gPxaSSwHQ3Ozsy2fQsHm1OiYa\njRKNRjt2ElX17QE0AAemOXYIMDfh+TXAVWnSqnE1NKiC82ho8Ds3hfPKK6p9+jjX3NDgbL/yit+5\nKowCX/vcuXO1urpGq6trdO7cufH91dU1CtPj//1gulZX1xTs/U323O/O7L63s31BPh9u0DgozbHO\nwPtAFdAFeBPYN03afN7HcCvVoKFq116Aa587d66Wl1e4wWG6lpdXxL+42zpmgimXoOFXl9uTRWQV\nTmniBRF5yd0/UERecKPANuBSYB7wDvCkpug5ZRKUYhfe1lOxGE+11RBts+umVnRdhLONMkF8YCUN\nx0cfJVdLvPKKs6+YxapmfvlL1e7dVffc09m26ilP3qpQVVB+y1cVWNBLX4SteipfDwsaJS5V1Uwp\nBMyYAv5Y8OJLMGhtFPm8xqAH2VyCRpC73BqTu6CODvdC655kHl57rAoqViU1aVLHqqCC2E23EL3A\nwsyCRpgFpKulrxLbccAWNiqAsWPH5u0LtNi/oIuxi7AFDb915Iu/lMZlpGOD/Eye5fOLPt8ls0DI\ntj4riA/C3KaRSSNmW3XWpdzN1IRePtoPvGgTiZ1z5MgjdeTIwwLT3pJvWEN4SLX3xd9WYLGgYUKu\nI1/6XvZOCnrPp3ywoBFWmXzxp+shVKqjoIOqUD2ZSqF7dQbX6GXvpKD3fMqHXIKGLcLkt44MyLN1\nGoIn1s4UjToPrxaHKtT7+KkUrjGMso0yQXwQ5pJGJr8YrUQRLoWqMiyFqsl2rtGqpzoGG6cRQpn0\nsbceQiYIAtjF28veSUXZ8ykPfFm5L99Cu3KfKT6Njam7Qedj3Ejil3ZjI5xwAjz4IPTrV5jxKV5e\nWxDerwTlsnKflTSMyScvS4WJ43I++8zZN2CA816FKH2OHu28d2yJ3YYGb7/Aq6rgf/4HOnXacY1r\n1jjBs5TGIgWMBQ1j8snLKT3a+tIuxl/flZU7D2C95JLSG8AaMBY0jDGZ8WPKlkKXbky7LGgYExZ+\nz7NlHTIM1hBuTLIA9hCKC3LevGKN4Z7KpSHcl6AhIhOAWmAf4GBV/VuadE3ABmA7sFVVR6VJZ0HD\n5Id9SQVLGAJlGPKYRpiCxj5AC/BbYFIbQeNDnDXE17VzPgsaJn+i0eQ69EjEz9yYoAvxD43QdLlV\n1eXgZDgDWV2QMcYUVDaN9SEulcQEfe4pBV4WkTdE5CK/M2NKQEfmAjOmPUUwn5ZnJQ0RqQf6pzh0\nrao+n+FpDlPVT0WkL1AvIstVNeVfcG1tbXw7EokQsSoFkwvrIWSylU2vNp+7EEejUaLRaIfO4Wvv\nKRFpoI02jVZpJwObVHVKimPWpmGM8Ue2VU4BajMLTZtGKykzLCK7A51UdaOI7AGMAW4qaM6MMaY9\n2cwC4PdYmzzwq/fUycB9QB9gPbBYVY8VkYHAVFU9TkSGA7Pcl3QGfq+qt6c5n5U0jDHBF7CG8NB0\nuc03CxrGGJO9XIJG0HtPGeO9VauSe0g1Njr7jDE7saBhTBF0gzSmUKx6yhgIVI8WYwrFqqeMMcZ4\nyoKGMTYK3JiMWfWUMQHrBmlMoViXW2OMMRmzNg1jjDGesqBhjDEmYxY0jDHGZMyChjHGmIxZ0DDG\nGJMxCxrGGGMyZkHDGJM5m9yx5FnQMMZkziZ3LHk2uM8Ykx2b3LFohGZwn4jcJSLLRGSJiMwSkT3T\npBsnIstF5D0RuarQ+TTGGJPMr+qp+cAIVT0AeBe4pnUCEekEPACMA/YDzhSRfQuaS2NMMpvcseR1\n9uNNVbU+4elrwCkpko0CVqhqE4CIPAGcBCzzPIPGmNSqqmDWrB2TO86a5ewzJcOXoNHKvwEzUuwf\nBCR2y/gY+GFBcmSMSa2yMnn231jwMCXDs6AhIvVA/xSHrlXV59001wFbVPXxFOmyatmura2Nb0ci\nESLWOGeMMUmi0SjRaLRD5/Ct95SInAdcBBytqt+kOH4IUKuq49zn1wAtqvrzFGmt95QxxmQpTL2n\nxgH/BZyUKmC43gD+SUSqRKQLcDowu1B5NMYYszO/ek/dD3QF6kVksYj8GkBEBorICwCqug24FJgH\nvAM8qarWCG6MMT6ywX3GGFOiQlM9ZYwxJpwsaBhjjMmYBQ1jjDEZs6BhjDEmYxY0jDHGZMyChjHG\nmIxZ0DDGGJMxCxrGGGMyZkHDGGNMxixoGGOMyZgFDWOMMRmzoGGMMSZjFjSMMcZkzIKGMcaYjFnQ\nMMYYkzHP1ghvi4jcBRwPbAHeB85X1fUp0jUBG4DtwFZVHVXIfBpjjEnmV0ljPjBCVQ8A3gWuSZNO\ngYiqjgxbwOjo4u1esDxlLoj5sjxlxvLkLV+ChqrWq2qL+/Q1YHAbybNaVSoogvifxPKUuSDmy/KU\nGcuTt4LQpvFvwItpjinwsoi8ISIXFTBPxhhjUvCsTUNE6oH+KQ5dq6rPu2muA7ao6uNpTnOYqn4q\nIn2BehFZrqqNHmXZGGNMO0RV/XljkfOAi4CjVfWbDNJPBjap6pQUx/y5CGOMCTlVzaoJwK/eU+OA\n/wKOTBcwRGR3oJOqbhSRPYAxwE2p0mZ70cYYY3LjS0lDRN4DugDr3F2vqup/iMhAYKqqHiciw4FZ\n7vHOwO9V9faCZ9YYY0ycb9VTxhhjwicIvaeyJiJ3icgyEVkiIrNEZM806ZpE5H9FZLGIvB6QPI0T\nkeUi8p6IXOVxniaIyFIR2S4iB7aRrpD3KdM8FfI+9RKRehF5V0Tmi0iPNOk8v0+ZXLeI3OceXyIi\nI73IR7b5EpGIiKx3781iEbne4/w8JCJrROStNtIU9D61l6dC3yP3PStFpMH9m3tbRC5Lky7ze6Wq\noXsA1UCZu30HcEeadB8CvYKSJ6ATsAKoAnYB3gT29TBP+wB7Aw3AgW2kK+R9ajdPPtynO4H/drev\n8uv/UybXDYwHXnS3fwj8pQCfWSb5igCzC/F/yH2/0cBI4K00x/24T+3lqaD3yH3P/sAP3O2uwN87\n+n8qlCUNDeDgwAzzNApYoapNqroVeAI4ycM8LVfVdzNMXqj7lEmeCnqfgBOBOne7Dvg/baT18j5l\nct3xvKrqa0APEanwME+Z5gsKOBBXna73X7aRpOD3KYM8QYEHK6vqP1T1TXd7E7AMGNgqWVb3KpRB\no5UgDg5Ml6dBwKqE5x+7+/wWtEGUhb5PFaq6xt1eA6T7g/H6PmVy3anStPWjqVD5UuBQt3rjRRHZ\nz+M8tceP+9QeX++RiFThlIRea3Uoq3vlS5fbTARxcGAe8pT3XgeZ5CkDBb9P7Sjkfbou6Y1VtY1x\nP14PNs30ulv/WvW6N0sm5/8bUKmqm0XkWOA5nGpIPxX6PrXHt3skIl2Bp4HL3RLHTklaPU97rwIb\nNFS1uq3j7uDA8cDRbZzjU/ffz0XkWZxids5/5HnI02qgMuF5JU5Uz1l7ecrwHAW9Txko6H1yGy/7\nq+o/RGQA8Fmac+T1PqWQyXW3TjPY3eeldvOlqhsTtl8SkV+LSC9VXYc//LhPbfLrHonILsAzwGOq\n+lyKJFndq1BWT8mOwYEnaRuDA0Wkm7sdGxyYtqdFIfIEvAH8k4hUiUgX4HRgtld5ap3FlDsLfJ8y\nyROFv0+zgYnu9kScX4BJCnSfMrnu2cC5bj4OAb5KqFrzSrv5EpEKERF3exROd36/Agb4c5/a5Mc9\nct9vGvCOqt6bJll296qQLfl57BHwHrASWOw+fu3uHwi84G4Px+nl8SbwNnCN33lynx+L04NhRQHy\ndDJOXWUz8A/gpQDcp3bz5MN96gW8jDNN/3ygh1/3KdV1Az8GfpyQ5gH3+BLa6BVXyHwBP3Hvy5vA\nQuAQj/MzA/gEZ02eVTjtiL7ep/byVOh75L7n4UCL+56x76ZjO3KvbHCfMcaYjIWyesoYY4w/LGgY\nY4zJmAUNY4wxGbOgYYwxJmMWNIwxxmTMgoYxxpiMWdAwJg1xpm9fnPD47wK+d7tTfxvjBxunYUwa\nIrJRVbv59N6jgU3AI6r6fT/yYEwqVtIwJgsisqe7GNHe7vMZInKBu/0/IrLIXeymNuE1TSJym1ta\neUNEDhRnsacVIvLjVO+jmU2zbUzBWdAwJr3yVtVTE1R1PXApMF1EzgD2VNVpbvprVfVg4ADgSBH5\nnrtfgZWqOhJ4BZiOM53KIcBNhbwgYzoqsLPcGhMAze4XfRJVfVlETsOZr2f/hEOnu+tsdAYGAPvh\nzDUEOyb4ewvYQ1W/Br4WkW9FpLuqbvDsKozJIytpGJMlESkD9gW+xpnsEBEZBkwC/lVVDwBeAHZL\neNm37r8tOBPakfDcfryZ0LCgYUz2fgYsBX4EPCwinYHuOEFkg7tU5rFpXlvQ5T6NyTf7hWNMeuUi\nsjjh+Us47REXAAer6tci8gpwnare5KZdjjMt9oI051SSV0VL2X1RRGYARwK9RWQVcKOqPtyhqzEm\nD6zLrTHGmIxZ9ZQxxpiMWdAwxhiTMQsaxhhjMmZBwxhjTMYsaBhjjMmYBQ1jjDEZs6BhjDEmYxY0\njDHGZOz/A+Jkgb5IOc17AAAAAElFTkSuQmCC\n", 167 | "text/plain": [ 168 | "" 169 | ] 170 | }, 171 | "metadata": {}, 172 | "output_type": "display_data" 173 | } 174 | ], 175 | "source": [ 176 | "#Normalize data and plot it in a simple way\n", 177 | "X,mu,sigma = normalizeData(x)\n", 178 | "scatter(X[pos,1],X[pos,2], marker = 'o', c = 'b')\n", 179 | "scatter(X[neg,1],X[neg,2], marker = 'x', c = 'r')\n", 180 | "xlabel('Exam 1')\n", 181 | "ylabel('Exam 2')\n", 182 | "legend(['Admitted','Not Admitted'])\n", 183 | "title('Normalized Data')" 184 | ] 185 | }, 186 | { 187 | "cell_type": "code", 188 | "execution_count": 6, 189 | "metadata": { 190 | "collapsed": false 191 | }, 192 | "outputs": [ 193 | { 194 | "name": "stdout", 195 | "output_type": "stream", 196 | "text": [ 197 | "The optimize values for Theta are: [ 1.71835728 3.99274735 3.7249355 ] \n", 198 | "The Accuracy of the algorithm is: 89.000000\n" 199 | ] 200 | }, 201 | { 202 | "data": { 203 | "image/png": "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\njhHOAAAAAElFTkSuQmCC\n", 204 | "text/plain": [ 205 | "" 206 | ] 207 | }, 208 | "metadata": {}, 209 | "output_type": "display_data" 210 | } 211 | ], 212 | "source": [ 213 | "theta, theta_i = fmin_bfgs(costFunction,inTheta,fprime = gradient,args=(X,y),retall = 1, disp = 0)\n", 214 | "\n", 215 | "J = zeros(len(theta_i))\n", 216 | "for i,th in enumerate(theta_i):\n", 217 | " J[i] = costFunction(th,X,y) \n", 218 | "plot(J)\n", 219 | "\n", 220 | "\n", 221 | "print 'The optimize values for Theta are: %s '%theta\n", 222 | "\n", 223 | "acc = accuracy(theta,X,y)\n", 224 | "print 'The Accuracy of the algorithm is: %f' %acc\n" 225 | ] 226 | }, 227 | { 228 | "cell_type": "code", 229 | "execution_count": 7, 230 | "metadata": { 231 | "collapsed": false 232 | }, 233 | "outputs": [ 234 | { 235 | "data": { 236 | "text/plain": [ 237 | "" 238 | ] 239 | }, 240 | "execution_count": 7, 241 | "metadata": {}, 242 | "output_type": "execute_result" 243 | }, 244 | { 245 | "data": { 246 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYEAAAEKCAYAAAD0Luk/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd4FOX2wPHvG4qEnhAIoQZRFKUjWIGgBhQBBUTlelHa\nRUV/osIVsBEURVEsF5UmESxgAzSikgQkECyAShcElFBEOkgVSHJ+f8wmbEJ6dndms+fzPPOwOzu7\nc7Ihc+btRkRQSikVmILsDkAppZR9NAkopVQA0ySglFIBTJOAUkoFME0CSikVwDQJKKVUACttdwCF\nYYzR/qxKKVUEImJy2u93JQERKfI2evToYr3fW5sT43JiTBqXxqVxFW3Li98lAaWUUp6jSUAppQJY\nQCWBqKgou0PIkRPjcmJMoHEVlsZVOIEYl8mvvqjIH2xMLHALsE9Emrr2hQIfA/WBFOAOETniem0U\nMABIAx4WkYQcPlO8Fa9SSpVUxhgkl4ZhbyaBdsBx4D23JDAeOCAi440xI4AQERlpjLkMmAW0AWoD\nC4FGIpKe7TM1CShVBMbk+PevSqCcrpF5JQGvdREVkWRjTGS23d2BDq7HM4EkYCRwKzBbRM4CKcaY\nrUBb4EdvxadUoNEbqJKvKMne120C4SKy1/V4LxDuelwL2OV23C6sEoFSSikvsq1h2FWvk9etiS23\nLVOm/MRffx2z49RKKeVzvh4xvNcYU1NE9hhjIoB9rv1/AnXdjqvj2neemJiYzMdRUVEebTUXEXbu\nPErz5pN5+eVo7rmnufPqUnfuhJQUaNfOep6cDJGRULduXu9SSgWQpKQkkpKSCnSs1xqGAVxtAl9m\naxg+KCIvGWNGAlWzNQy35VzD8EXZW4F91TC8atVfDBgQR3h4BaZO7Ua9elW8fs4CS06Gnj3h00+t\n5717w9y555KCUjlwNQzaHYZH9OvXj7p16/Lcc88V+r3jxo3jjz/+YNq0aV6IzBIUFMTWrVu58MIL\nvXaO3OT2e86rYdhr1UHGmNnA98Alxpidxpj+wItAtDFmM3C96zki8ivwCfAr8A0wxM5uQC1bRrBi\nxSDatatH69ZTmTRpJenpDvkDatfOSgAdO1rbp59qAlAlRlRUFKGhoZw5cybXY4wxRS6hjxo1KjMB\npKSkEBQURHr6uU6IM2bMoF2A/T15LQmISB8RqSUiZUWkroi8KyKHRORGEWkkIp0yxgi4jn9BRC4S\nkUtFJN5bcRVUmTKlePLJ9ixZ0o/33lvL9dfPZOvWQ3aH5TPx8fF06tSLTp16ER9v+69DFZA3fm+b\nN29m7NjnefHFF9mxY4dHPjMnKSkprFixgho1ahAXF5fnsZ68RywpJaQis3tipEJOgiR2SE1Nk1df\n/V6qVXtJXnnlO0lNTbMlDhERWbpUJCxMZPFiawsLs/Z50IIFCyQ4OFxghsAMCQ4OlwULFnj0HMrz\n8vq95fW3Ex8fL+PHj5c5c+ZIenp6ltd+/vlnqVAhTEqVekTKlBkiVarUlC1btngl/jFjxki3bt1k\n7Nix0rVr18z9v/zyi7Rs2VIqVaokd955p9x1113y1FNPiYjI4sWLpXbt2jJ+/HipXr26REREyLx5\n8+Srr76Siy++WEJDQ2XcuHGZnzV69Gj597//LSIidevWFWOMVKxYUSpVqiQ//PCDXHDBBVKqVCmp\nWLGihISEiIjIP//8I8OGDZN69epJeHi43H///XLq1KnMzxw/frxERERI7dq1Zfr06WKMkd9//90r\n31F+cvs9u/bnfF3N7QUnbnYlgQxbtx6UqKgZ0rbtNFm/fq89QezYkfWiv3Sptc+DoqN7ui4k4tpm\nSHR0T4+eI1AsWLBAoqN7SnR0T68n0rx+b7n97TzxRIxUqHCRlCnzqFSo0FL69BmQJRHccMNtAm9n\nfmZQ0LPSt+/gLJ+RnJwskZFNJDi4qrRrd7P89ddfRYq/YcOG8sEHH8jmzZulTJkysm/fPjl9+rTU\nq1dPXn/9dUlNTZXPPvtMypQpI08//bSIWEmgdOnS8txzz0lqaqpMmzZNqlWrJv/617/k+PHjsmHD\nBgkODpaUlBQREYmJiclMAikpKWKMkbS0czd1M2bMkOuuuy5LXI888ojceuutcvjwYTl27Jh069ZN\nRo0aJSIi33zzjYSHh8uGDRvkxIkT0qdPH00C3tzsTgIiImlp6TJ58koJCxsvzz23RM6cSbU7JI/T\nJFB07hf9sWPH+rREVdgksH//filbtrLAXtfxJ6R8+XqyevXqzGNat75e4Bu3z3xfunS5M/P1HTt2\nSIUKYQKfC+yX0qUfl2bNri507MnJyVKuXDk5evSoiIg0b95cXnvtNVmyZInUqlUry7HXXHNNliQQ\nHBycmbiOHj0qxhhZsWKF28/QWr744gsRyVoS2LZt23lJ4N13382SBNLT06VChQpZLurff/+9NGjQ\n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\n", 247 | "text/plain": [ 248 | "" 249 | ] 250 | }, 251 | "metadata": {}, 252 | "output_type": "display_data" 253 | } 254 | ], 255 | "source": [ 256 | "#Plot classification line\n", 257 | "\n", 258 | "x1 = linspace(20,100,100)\n", 259 | "x2 = linspace(20,100,100)\n", 260 | "\n", 261 | "J = empty((100,100))\n", 262 | "for i,iv in enumerate(x1):\n", 263 | " for j,jv in enumerate(x2):\n", 264 | " xa = array([iv,jv])\n", 265 | " J[i,j]=prediction(theta,xa,mu,sigma)\n", 266 | "\n", 267 | "#Plot boundary for admission and non-admission elements\n", 268 | "contour(x1,x2,J,[.5])\n", 269 | "scatter(x[pos,0],x[pos,1], marker = 'o', c = 'b')\n", 270 | "scatter(x[neg,0],x[neg,1], marker = 'x', c = 'r')\n", 271 | "xlabel('Exam 1')\n", 272 | "ylabel('Exam 2')\n", 273 | "legend(['Admitted','Not Admitted'])" 274 | ] 275 | }, 276 | { 277 | "cell_type": "code", 278 | "execution_count": 8, 279 | "metadata": { 280 | "collapsed": false 281 | }, 282 | "outputs": [ 283 | { 284 | "name": "stdout", 285 | "output_type": "stream", 286 | "text": [ 287 | "For grades Exam 1: 45 and Exam 2: 85, the probability of admission is: 0.776247\n" 288 | ] 289 | } 290 | ], 291 | "source": [ 292 | "#Make an specific prediction\n", 293 | "exam1 = 45\n", 294 | "exam2 = 85\n", 295 | "\n", 296 | "inp = array([exam1,exam2])\n", 297 | "pred = prediction(theta,inp,mu,sigma)\n", 298 | "\n", 299 | "print 'For grades Exam 1: %d and Exam 2: %d, the probability of admission is: %f' %(exam1,exam2,pred)" 300 | ] 301 | } 302 | ], 303 | "metadata": { 304 | "kernelspec": { 305 | "display_name": "Python 2", 306 | "language": "python", 307 | "name": "python2" 308 | }, 309 | "language_info": { 310 | "codemirror_mode": { 311 | "name": "ipython", 312 | "version": 2 313 | }, 314 | "file_extension": ".py", 315 | "mimetype": "text/x-python", 316 | "name": "python", 317 | "nbconvert_exporter": "python", 318 | "pygments_lexer": "ipython2", 319 | "version": "2.7.10" 320 | } 321 | }, 322 | "nbformat": 4, 323 | "nbformat_minor": 0 324 | } 325 | -------------------------------------------------------------------------------- /6. K-means Clusterization.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# K-mean - Clusterization\n", 8 | "Here I will use the K-means algorithm to classify the data" 9 | ] 10 | }, 11 | { 12 | "cell_type": "code", 13 | "execution_count": 1, 14 | "metadata": { 15 | "collapsed": false 16 | }, 17 | "outputs": [ 18 | { 19 | "name": "stdout", 20 | "output_type": "stream", 21 | "text": [ 22 | "Populating the interactive namespace from numpy and matplotlib\n" 23 | ] 24 | } 25 | ], 26 | "source": [ 27 | "#Load Modules\n", 28 | "from pandas import read_csv\n", 29 | "import pandas as pd\n", 30 | "from time import sleep\n", 31 | "from numpy import ones, zeros, reshape, sum, array, dot,apply_along_axis, trace, bincount\n", 32 | "from numpy.random import rand\n", 33 | "from numpy.linalg import norm\n", 34 | "from scipy.optimize import fmin as fmini\n", 35 | "from pylab import plot, scatter, xlabel, ylabel, contour,figure, show, axes\n", 36 | "from sklearn.svm import SVC\n", 37 | "%matplotlib inline\n", 38 | "%pylab inline" 39 | ] 40 | }, 41 | { 42 | "cell_type": "code", 43 | "execution_count": 2, 44 | "metadata": { 45 | "collapsed": false 46 | }, 47 | "outputs": [ 48 | { 49 | "name": "stdout", 50 | "output_type": "stream", 51 | "text": [ 52 | "5 Examples of the data\n", 53 | "[[ 1.84207953 4.6075716 ]\n", 54 | " [ 5.65858312 4.79996405]\n", 55 | " [ 6.35257892 3.2908545 ]\n", 56 | " [ 2.90401653 4.61220411]\n", 57 | " [ 3.23197916 4.93989405]]\n" 58 | ] 59 | }, 60 | { 61 | "data": { 62 | "text/plain": [ 63 | "" 64 | ] 65 | }, 66 | "execution_count": 2, 67 | "metadata": {}, 68 | "output_type": "execute_result" 69 | }, 70 | { 71 | "data": { 72 | "image/png": "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\ngg==\n", 73 | "text/plain": [ 74 | "" 75 | ] 76 | }, 77 | "metadata": {}, 78 | "output_type": "display_data" 79 | } 80 | ], 81 | "source": [ 82 | "#Here we import the data from a .mat file\n", 83 | "import scipy.io\n", 84 | "dataA = scipy.io.loadmat('data/data6.mat')\n", 85 | "x = dataA['X']\n", 86 | "#We observe 5 examples\n", 87 | "print '5 Examples of the data'\n", 88 | "print x[:5]\n", 89 | "\n", 90 | "\n", 91 | "#Plot Data in same color since they have no label\n", 92 | "scatter(x[:,0],x[:,1], marker = 'o', c='c')\n", 93 | "\n", 94 | "#Declaration of useful global variables\n", 95 | "global K, m\n", 96 | "m = x.shape[0]\n", 97 | "K = 3 #This defines the number of centroids to be used, or the number of bins we want our data to be separated in\n", 98 | "\n", 99 | "#Example of random initialization of centroids\n", 100 | "ind = randint(x.shape[0],size = K)\n", 101 | "inCentroids = x[ind]\n", 102 | "scatter(inCentroids[:,0],inCentroids[:,1], marker = 'o', c='r', s=50)\n", 103 | "title('Data and example of %d random centroids'%K)" 104 | ] 105 | }, 106 | { 107 | "cell_type": "code", 108 | "execution_count": 3, 109 | "metadata": { 110 | "collapsed": false 111 | }, 112 | "outputs": [], 113 | "source": [ 114 | "#This function calculates the sum the distances from the data to their respective centroid\n", 115 | "#This is the function to minimize\n", 116 | "#We could also use the recursive algorithm of moving the centroids to the mean position but\n", 117 | "#if we have a this cost function it is much easier to minimize using a minimization algorithm\n", 118 | "def Kmeans(centroids,x):\n", 119 | " centroids = reshape(centroids,(K,2))\n", 120 | " N = empty((m,K))\n", 121 | " for k in range(K):\n", 122 | " N[:,k] = norm(x-centroids[k],axis=1)\n", 123 | " d = amin(N,axis = 1)\n", 124 | " J = mean(d)\n", 125 | " return J\n", 126 | "\n", 127 | "def clusterData(centroids,x):\n", 128 | " centroids = reshape(centroids,(K,2))\n", 129 | " N = empty((m,K))\n", 130 | " for k in range(K):\n", 131 | " N[:,k] = norm(x-centroids[k],axis=1)\n", 132 | " index = argmin(N,axis = 1)\n", 133 | " return index" 134 | ] 135 | }, 136 | { 137 | "cell_type": "code", 138 | "execution_count": 4, 139 | "metadata": { 140 | "collapsed": false 141 | }, 142 | "outputs": [ 143 | { 144 | "name": "stdout", 145 | "output_type": "stream", 146 | "text": [ 147 | "The algorithm achieves a minimization function of J = 0.792363\n", 148 | "Data should be clustered indicating each cluster with a different color\n" 149 | ] 150 | }, 151 | { 152 | "data": { 153 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXMAAAEACAYAAABBDJb9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd8zdf/wPHX567ce7NFYoUgglDU3sTeihotHWhtWh06\ntCVUa1XXt2oVFUoVVS21iRmrVmtTuxIjCUnuvbnr/P74XCk/MxJCep6Px31I7v18zjn3E3nfk/fn\nDEUIgSRJkvRk0+R0AyRJkqSsk8FckiQpF5DBXJIkKReQwVySJCkXkMFckiQpF5DBXJIkKRfIUjBX\nFKWUoih7bnhcVRTltexqnCRJknR/lOwaZ64oigY4D1QTQpzNlkIlSZKk+5KdaZbGwAkZyCVJkh69\n7AzmzwFzs7E8SZIk6T5lS5pFURQDaoqljBDiUpYLlCRJkjJFl03ltAD+uF0gVxRFLv4iSZL0AIQQ\nyv0em11plueBeXd6UQiRax/Dhw/P8TbI9yffm3x/ue+RWVkO5oqieKPe/Pw5q2VJkiRJDybLaRYh\nRBqQNxvaIkmSJD0gOQM0i6KionK6CQ9Vbn5/ufm9gXx//zXZNmnojhUoinjYdUiSJOU2iqIgcuAG\nqCRJkpSDZDCXJEnKBWQwlyRJygVkMJckScoFZDCXJEnKBWQwlyRJygVkMJckScoFZDCXJEnKBWQw\nlyRJygVkMJckScoFZDCXJEnKBWQwlyRJygVkMJckScoFZDCXJEnKBWQwlyRJygVkMJckScoFZDCX\nJEnKBbJjQ+cARVEWKopySFGUg4qi1MiOhkmSJEn3L8sbOgNfAb8LIToqiqIDvLOhTEmSJCkTsrQH\nqKIo/sAeIUTxuxwj9wCVJEnKpEe9B2gx4JKiKDMVRdmtKMo0RVHMWSxTkiRJyqSsBnMdUAn4VghR\nCUgD3styqyRJkqRMyWrO/BxwTgix0/P9Qm4TzKOjozO+joqKIioqKovVSpIk5S6xsbHExsY+8PlZ\nypkDKIqyEXhVCHFUUZRowCSEePeG12XOXJIkKZMymzPPjmBeAfgOMAAngB5CiKs3vC6DufTA7HY7\nR44cwdvbm2LFiqEo9/1/W5KeaI88mN+zAhnMpQd07tw5GtWtS8rly1icTlq2acPsefPQarU53TRJ\neuge9WiWXMtms/Fyt274mEwEBwQw8ZtvcqQdVquVDRs2sGXLFhwOR460Iaf07t6dQmfP0js1lQE2\n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\n", 154 | "text/plain": [ 155 | "" 156 | ] 157 | }, 158 | "metadata": {}, 159 | "output_type": "display_data" 160 | } 161 | ], 162 | "source": [ 163 | "#Since the algorithm can achieve local minimum due to the random initialization of the centroids\n", 164 | "#we execute the algorithm several times and keep the solution that gives the lowest cost function (Kmeans)\n", 165 | "\n", 166 | "num = 5 #Number of times to run the algorithm\n", 167 | "\n", 168 | "centroids = empty((num,2*K))\n", 169 | "J = empty(num)\n", 170 | "\n", 171 | "for i in range(num):\n", 172 | " ind = randint(x.shape[0],size = K) #Random initialization of centroids\n", 173 | " inCentroids = x[ind] \n", 174 | " ans = fmini(Kmeans, inCentroids.flatten() ,args = (x,), disp=0, full_output = 1)\n", 175 | " centroids[i,:] = ans[0]\n", 176 | " J[i] = ans[1]\n", 177 | "\n", 178 | "centroid = centroids[argmin(J),:]\n", 179 | "index = clusterData(centroid,x) \n", 180 | "centroid = reshape(centroid,(K,2))\n", 181 | "scatter(x[:,0],x[:,1], marker = 'o', c = index)\n", 182 | "scatter(centroid[:,0],centroid[:,1], marker = 'o', c='m',s = 100)\n", 183 | "\n", 184 | "print 'The algorithm achieves a minimization function of J = %f' %amin(J)\n", 185 | "print 'Data should be clustered indicating each cluster with a different color'" 186 | ] 187 | } 188 | ], 189 | "metadata": { 190 | "kernelspec": { 191 | "display_name": "Python 2", 192 | "language": "python", 193 | "name": "python2" 194 | }, 195 | "language_info": { 196 | "codemirror_mode": { 197 | "name": "ipython", 198 | "version": 2 199 | }, 200 | "file_extension": ".py", 201 | "mimetype": "text/x-python", 202 | "name": "python", 203 | "nbconvert_exporter": "python", 204 | "pygments_lexer": "ipython2", 205 | "version": "2.7.10" 206 | } 207 | }, 208 | "nbformat": 4, 209 | "nbformat_minor": 0 210 | } 211 | -------------------------------------------------------------------------------- /Notes Machine Learning in Coursera by AnrewNg.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rragundez/coursera-machine-learning-AndrewNg-Python/1c0cb4af55e7cdbbc752c1e336c0fbbadf3276b1/Notes Machine Learning in Coursera by AnrewNg.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Material I made during the Machine Learning course by Andre Ng course from Coursera-Stanford 2 | 3 | This contains notes and exercises made in Python I made a long time ago from the Andrew Ng course in Coursera. 4 | The Course and material provided is made in Octave or R. When I made the course I also made the scripts in Python, 5 | here I share those notebooks plus the notes I took. I have found these notes very helpful in more than one 6 | ocassion, perhaps they help you too. My handwriting is pretty bad sorry! I will clean them up soon. 7 | 8 | I hope nothing is broken as I haven't touch these files in a while. 9 | -------------------------------------------------------------------------------- /data/data1.txt: -------------------------------------------------------------------------------- 1 | 6.1101,17.592 2 | 5.5277,9.1302 3 | 8.5186,13.662 4 | 7.0032,11.854 5 | 5.8598,6.8233 6 | 8.3829,11.886 7 | 7.4764,4.3483 8 | 8.5781,12 9 | 6.4862,6.5987 10 | 5.0546,3.8166 11 | 5.7107,3.2522 12 | 14.164,15.505 13 | 5.734,3.1551 14 | 8.4084,7.2258 15 | 5.6407,0.71618 16 | 5.3794,3.5129 17 | 6.3654,5.3048 18 | 5.1301,0.56077 19 | 6.4296,3.6518 20 | 7.0708,5.3893 21 | 6.1891,3.1386 22 | 20.27,21.767 23 | 5.4901,4.263 24 | 6.3261,5.1875 25 | 5.5649,3.0825 26 | 18.945,22.638 27 | 12.828,13.501 28 | 10.957,7.0467 29 | 13.176,14.692 30 | 22.203,24.147 31 | 5.2524,-1.22 32 | 6.5894,5.9966 33 | 9.2482,12.134 34 | 5.8918,1.8495 35 | 8.2111,6.5426 36 | 7.9334,4.5623 37 | 8.0959,4.1164 38 | 5.6063,3.3928 39 | 12.836,10.117 40 | 6.3534,5.4974 41 | 5.4069,0.55657 42 | 6.8825,3.9115 43 | 11.708,5.3854 44 | 5.7737,2.4406 45 | 7.8247,6.7318 46 | 7.0931,1.0463 47 | 5.0702,5.1337 48 | 5.8014,1.844 49 | 11.7,8.0043 50 | 5.5416,1.0179 51 | 7.5402,6.7504 52 | 5.3077,1.8396 53 | 7.4239,4.2885 54 | 7.6031,4.9981 55 | 6.3328,1.4233 56 | 6.3589,-1.4211 57 | 6.2742,2.4756 58 | 5.6397,4.6042 59 | 9.3102,3.9624 60 | 9.4536,5.4141 61 | 8.8254,5.1694 62 | 5.1793,-0.74279 63 | 21.279,17.929 64 | 14.908,12.054 65 | 18.959,17.054 66 | 7.2182,4.8852 67 | 8.2951,5.7442 68 | 10.236,7.7754 69 | 5.4994,1.0173 70 | 20.341,20.992 71 | 10.136,6.6799 72 | 7.3345,4.0259 73 | 6.0062,1.2784 74 | 7.2259,3.3411 75 | 5.0269,-2.6807 76 | 6.5479,0.29678 77 | 7.5386,3.8845 78 | 5.0365,5.7014 79 | 10.274,6.7526 80 | 5.1077,2.0576 81 | 5.7292,0.47953 82 | 5.1884,0.20421 83 | 6.3557,0.67861 84 | 9.7687,7.5435 85 | 6.5159,5.3436 86 | 8.5172,4.2415 87 | 9.1802,6.7981 88 | 6.002,0.92695 89 | 5.5204,0.152 90 | 5.0594,2.8214 91 | 5.7077,1.8451 92 | 7.6366,4.2959 93 | 5.8707,7.2029 94 | 5.3054,1.9869 95 | 8.2934,0.14454 96 | 13.394,9.0551 97 | 5.4369,0.61705 98 | -------------------------------------------------------------------------------- /data/data2.txt: -------------------------------------------------------------------------------- 1 | 2104,3,399900 2 | 1600,3,329900 3 | 2400,3,369000 4 | 1416,2,232000 5 | 3000,4,539900 6 | 1985,4,299900 7 | 1534,3,314900 8 | 1427,3,198999 9 | 1380,3,212000 10 | 1494,3,242500 11 | 1940,4,239999 12 | 2000,3,347000 13 | 1890,3,329999 14 | 4478,5,699900 15 | 1268,3,259900 16 | 2300,4,449900 17 | 1320,2,299900 18 | 1236,3,199900 19 | 2609,4,499998 20 | 3031,4,599000 21 | 1767,3,252900 22 | 1888,2,255000 23 | 1604,3,242900 24 | 1962,4,259900 25 | 3890,3,573900 26 | 1100,3,249900 27 | 1458,3,464500 28 | 2526,3,469000 29 | 2200,3,475000 30 | 2637,3,299900 31 | 1839,2,349900 32 | 1000,1,169900 33 | 2040,4,314900 34 | 3137,3,579900 35 | 1811,4,285900 36 | 1437,3,249900 37 | 1239,3,229900 38 | 2132,4,345000 39 | 4215,4,549000 40 | 2162,4,287000 41 | 1664,2,368500 42 | 2238,3,329900 43 | 2567,4,314000 44 | 1200,3,299000 45 | 852,2,179900 46 | 1852,4,299900 47 | 1203,3,239500 48 | -------------------------------------------------------------------------------- /data/data3.txt: -------------------------------------------------------------------------------- 1 | 34.62365962451697,78.0246928153624,0 2 | 30.28671076822607,43.89499752400101,0 3 | 35.84740876993872,72.90219802708364,0 4 | 60.18259938620976,86.30855209546826,1 5 | 79.0327360507101,75.3443764369103,1 6 | 45.08327747668339,56.3163717815305,0 7 | 61.10666453684766,96.51142588489624,1 8 | 75.02474556738889,46.55401354116538,1 9 | 76.09878670226257,87.42056971926803,1 10 | 84.43281996120035,43.53339331072109,1 11 | 95.86155507093572,38.22527805795094,0 12 | 75.01365838958247,30.60326323428011,0 13 | 82.30705337399482,76.48196330235604,1 14 | 69.36458875970939,97.71869196188608,1 15 | 39.53833914367223,76.03681085115882,0 16 | 53.9710521485623,89.20735013750205,1 17 | 69.07014406283025,52.74046973016765,1 18 | 67.94685547711617,46.67857410673128,0 19 | 70.66150955499435,92.92713789364831,1 20 | 76.97878372747498,47.57596364975532,1 21 | 67.37202754570876,42.83843832029179,0 22 | 89.67677575072079,65.79936592745237,1 23 | 50.534788289883,48.85581152764205,0 24 | 34.21206097786789,44.20952859866288,0 25 | 77.9240914545704,68.9723599933059,1 26 | 62.27101367004632,69.95445795447587,1 27 | 80.1901807509566,44.82162893218353,1 28 | 93.114388797442,38.80067033713209,0 29 | 61.83020602312595,50.25610789244621,0 30 | 38.78580379679423,64.99568095539578,0 31 | 61.379289447425,72.80788731317097,1 32 | 85.40451939411645,57.05198397627122,1 33 | 52.10797973193984,63.12762376881715,0 34 | 52.04540476831827,69.43286012045222,1 35 | 40.23689373545111,71.16774802184875,0 36 | 54.63510555424817,52.21388588061123,0 37 | 33.91550010906887,98.86943574220611,0 38 | 64.17698887494485,80.90806058670817,1 39 | 74.78925295941542,41.57341522824434,0 40 | 34.1836400264419,75.2377203360134,0 41 | 83.90239366249155,56.30804621605327,1 42 | 51.54772026906181,46.85629026349976,0 43 | 94.44336776917852,65.56892160559052,1 44 | 82.36875375713919,40.61825515970618,0 45 | 51.04775177128865,45.82270145776001,0 46 | 62.22267576120188,52.06099194836679,0 47 | 77.19303492601364,70.45820000180959,1 48 | 97.77159928000232,86.7278223300282,1 49 | 62.07306379667647,96.76882412413983,1 50 | 91.56497449807442,88.69629254546599,1 51 | 79.94481794066932,74.16311935043758,1 52 | 99.2725269292572,60.99903099844988,1 53 | 90.54671411399852,43.39060180650027,1 54 | 34.52451385320009,60.39634245837173,0 55 | 50.2864961189907,49.80453881323059,0 56 | 49.58667721632031,59.80895099453265,0 57 | 97.64563396007767,68.86157272420604,1 58 | 32.57720016809309,95.59854761387875,0 59 | 74.24869136721598,69.82457122657193,1 60 | 71.79646205863379,78.45356224515052,1 61 | 75.3956114656803,85.75993667331619,1 62 | 35.28611281526193,47.02051394723416,0 63 | 56.25381749711624,39.26147251058019,0 64 | 30.05882244669796,49.59297386723685,0 65 | 44.66826172480893,66.45008614558913,0 66 | 66.56089447242954,41.09209807936973,0 67 | 40.45755098375164,97.53518548909936,1 68 | 49.07256321908844,51.88321182073966,0 69 | 80.27957401466998,92.11606081344084,1 70 | 66.74671856944039,60.99139402740988,1 71 | 32.72283304060323,43.30717306430063,0 72 | 64.0393204150601,78.03168802018232,1 73 | 72.34649422579923,96.22759296761404,1 74 | 60.45788573918959,73.09499809758037,1 75 | 58.84095621726802,75.85844831279042,1 76 | 99.82785779692128,72.36925193383885,1 77 | 47.26426910848174,88.47586499559782,1 78 | 50.45815980285988,75.80985952982456,1 79 | 60.45555629271532,42.50840943572217,0 80 | 82.22666157785568,42.71987853716458,0 81 | 88.9138964166533,69.80378889835472,1 82 | 94.83450672430196,45.69430680250754,1 83 | 67.31925746917527,66.58935317747915,1 84 | 57.23870631569862,59.51428198012956,1 85 | 80.36675600171273,90.96014789746954,1 86 | 68.46852178591112,85.59430710452014,1 87 | 42.0754545384731,78.84478600148043,0 88 | 75.47770200533905,90.42453899753964,1 89 | 78.63542434898018,96.64742716885644,1 90 | 52.34800398794107,60.76950525602592,0 91 | 94.09433112516793,77.15910509073893,1 92 | 90.44855097096364,87.50879176484702,1 93 | 55.48216114069585,35.57070347228866,0 94 | 74.49269241843041,84.84513684930135,1 95 | 89.84580670720979,45.35828361091658,1 96 | 83.48916274498238,48.38028579728175,1 97 | 42.2617008099817,87.10385094025457,1 98 | 99.31500880510394,68.77540947206617,1 99 | 55.34001756003703,64.9319380069486,1 100 | 74.77589300092767,89.52981289513276,1 101 | -------------------------------------------------------------------------------- /data/data4.txt: -------------------------------------------------------------------------------- 1 | 0.051267,0.69956,1 2 | -0.092742,0.68494,1 3 | -0.21371,0.69225,1 4 | -0.375,0.50219,1 5 | -0.51325,0.46564,1 6 | -0.52477,0.2098,1 7 | -0.39804,0.034357,1 8 | -0.30588,-0.19225,1 9 | 0.016705,-0.40424,1 10 | 0.13191,-0.51389,1 11 | 0.38537,-0.56506,1 12 | 0.52938,-0.5212,1 13 | 0.63882,-0.24342,1 14 | 0.73675,-0.18494,1 15 | 0.54666,0.48757,1 16 | 0.322,0.5826,1 17 | 0.16647,0.53874,1 18 | -0.046659,0.81652,1 19 | -0.17339,0.69956,1 20 | -0.47869,0.63377,1 21 | -0.60541,0.59722,1 22 | -0.62846,0.33406,1 23 | -0.59389,0.005117,1 24 | -0.42108,-0.27266,1 25 | -0.11578,-0.39693,1 26 | 0.20104,-0.60161,1 27 | 0.46601,-0.53582,1 28 | 0.67339,-0.53582,1 29 | -0.13882,0.54605,1 30 | -0.29435,0.77997,1 31 | -0.26555,0.96272,1 32 | -0.16187,0.8019,1 33 | -0.17339,0.64839,1 34 | -0.28283,0.47295,1 35 | -0.36348,0.31213,1 36 | -0.30012,0.027047,1 37 | -0.23675,-0.21418,1 38 | -0.06394,-0.18494,1 39 | 0.062788,-0.16301,1 40 | 0.22984,-0.41155,1 41 | 0.2932,-0.2288,1 42 | 0.48329,-0.18494,1 43 | 0.64459,-0.14108,1 44 | 0.46025,0.012427,1 45 | 0.6273,0.15863,1 46 | 0.57546,0.26827,1 47 | 0.72523,0.44371,1 48 | 0.22408,0.52412,1 49 | 0.44297,0.67032,1 50 | 0.322,0.69225,1 51 | 0.13767,0.57529,1 52 | -0.0063364,0.39985,1 53 | -0.092742,0.55336,1 54 | -0.20795,0.35599,1 55 | -0.20795,0.17325,1 56 | -0.43836,0.21711,1 57 | -0.21947,-0.016813,1 58 | -0.13882,-0.27266,1 59 | 0.18376,0.93348,0 60 | 0.22408,0.77997,0 61 | 0.29896,0.61915,0 62 | 0.50634,0.75804,0 63 | 0.61578,0.7288,0 64 | 0.60426,0.59722,0 65 | 0.76555,0.50219,0 66 | 0.92684,0.3633,0 67 | 0.82316,0.27558,0 68 | 0.96141,0.085526,0 69 | 0.93836,0.012427,0 70 | 0.86348,-0.082602,0 71 | 0.89804,-0.20687,0 72 | 0.85196,-0.36769,0 73 | 0.82892,-0.5212,0 74 | 0.79435,-0.55775,0 75 | 0.59274,-0.7405,0 76 | 0.51786,-0.5943,0 77 | 0.46601,-0.41886,0 78 | 0.35081,-0.57968,0 79 | 0.28744,-0.76974,0 80 | 0.085829,-0.75512,0 81 | 0.14919,-0.57968,0 82 | -0.13306,-0.4481,0 83 | -0.40956,-0.41155,0 84 | -0.39228,-0.25804,0 85 | -0.74366,-0.25804,0 86 | -0.69758,0.041667,0 87 | -0.75518,0.2902,0 88 | -0.69758,0.68494,0 89 | -0.4038,0.70687,0 90 | -0.38076,0.91886,0 91 | -0.50749,0.90424,0 92 | -0.54781,0.70687,0 93 | 0.10311,0.77997,0 94 | 0.057028,0.91886,0 95 | -0.10426,0.99196,0 96 | -0.081221,1.1089,0 97 | 0.28744,1.087,0 98 | 0.39689,0.82383,0 99 | 0.63882,0.88962,0 100 | 0.82316,0.66301,0 101 | 0.67339,0.64108,0 102 | 1.0709,0.10015,0 103 | -0.046659,-0.57968,0 104 | -0.23675,-0.63816,0 105 | -0.15035,-0.36769,0 106 | -0.49021,-0.3019,0 107 | -0.46717,-0.13377,0 108 | -0.28859,-0.060673,0 109 | -0.61118,-0.067982,0 110 | -0.66302,-0.21418,0 111 | -0.59965,-0.41886,0 112 | -0.72638,-0.082602,0 113 | -0.83007,0.31213,0 114 | -0.72062,0.53874,0 115 | -0.59389,0.49488,0 116 | -0.48445,0.99927,0 117 | -0.0063364,0.99927,0 118 | 0.63265,-0.030612,0 119 | -------------------------------------------------------------------------------- /data/data5a.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rragundez/coursera-machine-learning-AndrewNg-Python/1c0cb4af55e7cdbbc752c1e336c0fbbadf3276b1/data/data5a.mat -------------------------------------------------------------------------------- /data/data5b.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rragundez/coursera-machine-learning-AndrewNg-Python/1c0cb4af55e7cdbbc752c1e336c0fbbadf3276b1/data/data5b.mat -------------------------------------------------------------------------------- /data/data6.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rragundez/coursera-machine-learning-AndrewNg-Python/1c0cb4af55e7cdbbc752c1e336c0fbbadf3276b1/data/data6.mat -------------------------------------------------------------------------------- /data/data7.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rragundez/coursera-machine-learning-AndrewNg-Python/1c0cb4af55e7cdbbc752c1e336c0fbbadf3276b1/data/data7.mat --------------------------------------------------------------------------------