Skip to content

Instantly share code, notes, and snippets.

@lubaochuan
Last active August 29, 2015 14:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lubaochuan/a4a123b65eb81fafeecc to your computer and use it in GitHub Desktop.
Save lubaochuan/a4a123b65eb81fafeecc to your computer and use it in GitHub Desktop.
{
"metadata": {
"name": "",
"signature": "sha256:682f7f34d305eb59d820a513fb51e28737cb548264d41a0258813cdd787f0841"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"Example 1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This examples show two possible ways to fit a straigt line to the data points; (2, 4), (3, 6), (2, 6), and (3, 8). Both regression lines yield the same value for the sum of errors (0) and the sum of absolute errors (4). This indicates that the neither of the measures are not appropriate because we cannot get a unique solution by minimizing such type of measurements. "
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"\n",
"xData = [2, 3, 2, 3]\n",
"yData = [4, 6, 6, 8]\n",
"plt.scatter(xData,yData)\n",
"plt.xlabel('x')\n",
"plt.ylabel('y')\n",
"x = np.linspace(0, 5, 50)\n",
"y = 4*x-4\n",
"plt.plot(x, y, 'r--')\n",
"x = np.linspace(0, 5, 50)\n",
"y = x*0+6\n",
"plt.plot(x, y, 'b--')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 23,
"text": [
"[<matplotlib.lines.Line2D at 0x10e5a6f50>]"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAEPCAYAAACqZsSmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFVZJREFUeJzt3XuUlXW9x/H3yC0uIQKHqxAcMASXHhsVbyGTmqmdylym\nqZlGt3VKLUvTdIXjKY+Kec2sloqlJF4DJRFFFjtvmA4ooogKgopcFQIRCIbZ54/fVgEHnD2z9/7t\nZz/v11p7zZ7NnpkPrOEzz/ye7/PbIEmSJEmSJEmSJEmSJEmSpBTrB0wHXgJeBM7OPd4VmAq8CjwC\ndImSTpJUFL2AfXP3OwGvAEOBMcAvco+fD1xe+miSpFKZCBwJzAN65h7rlXtfklSBBgBvAJ8GVm/1\neNV270uSKkQnYCZwXO797ct+VWnjSFJ6tS7R12kD3AfcTlj2AVhOWO5ZBvQGVmz/QYMGDcouWLCg\nRBElqWIsAAbv7Am7lCBEFXALMBe4dqvHHwBOz90/nY9+KHxowYIFZLPZxN4uvvji6BnSmj/J2c0f\n/5b0/MCgTyrmUhz5Hwp8C3gBeC732C8J0z13A98FFgEnliCLJInSlP8T7Pg3jCNL8PUlSdspxbJP\natXU1MSO0CJJzp/k7GD+2JKevymqYgf4BNnc+pUkqYmqqqrgE/rdI39JSiHLX5JSyPKXpBSy/CUp\nhSx/SUohy1+SUsjyl6QUsvwlKYUsf0lKIctfklLI8pekFLL8JSmFLH9JSiHLX5JSyPKXpBSy/CUp\nhSx/SUohy1+SUsjyl6QUsvwlKYUsf0lKIctfklLI8pekFLL8JSmFLH9JSiHLX5JSyPKXpBSy/CUp\nhSx/SUohy1+SUsjyl6QUsvwlpduyZbB0aewUJWf5S0qvRx+F6mqYOjV2kpJrHTuAJJVcfT1ccgmM\nHQvjxsHhh8dOVHKlOPIfCywH5mz1WC2wGHgudzu6BDkkCZYsgSOPhKefhlmzUln8UJryv5WPl3sW\nuBr4XO42pQQ5JAnuvBOOOAKmTIGePWOniaYUyz6PAwMaebyqBF9bkrb1s5/FTlAWYp7wPQuYDdwC\ndImYQ5JSJ9YJ3z8A/5u7/2vgKuC7jT2xtrb2w/s1NTXU1NQUOZqkirF6Ney2W+wURZfJZMhkMnl9\nTKmWXgYAk4C98/yzbDabLV4qSZVp82a46CKYNg3q6qAqXavMVeHvu9O/dKxln95b3f86204CSVLz\nvfkmjBwJL74IDz+cuuJvqlKU/3jgKWAI8BYwCrgCeIGw5j8SOKcEOSRVukmT4IAD4Ljj4O9/h+7d\nYycqW+X+I9FlH0lN8/rrYX5/3Dg45JDYaaJqyrKP5S+pcmzaBG3bxk4RneUvSSlUzid8Jan5Ghpi\nJ0g8y19Ssrz+Ohx8MMycGTtJoln+kpLjvvvgoIPg1FPDVsxqNrd0llT+Nm6Ec8+FyZPhwQfDOKda\nxPKXVP5OOAHatQtbMHdxK7BCcNpHUvlbvBj69vVq3SZy1FOSUshRT0lSoyx/SeVj/Hi4/PLYKVLB\nE76S4tuwAX76U5g+He6+O3aaVPDIX1Jc8+bBgQfC2rVh7/19942dKBUsf0nxTJ0KI0bAWWfBHXdA\n586xE6WG0z6S4lm+PNz22Sd2koriqKckpZCjnpKkRln+kopv3bowwllfHzuJcix/ScU1Z07YiO2V\nV2Dz5thplGP5SyqObBZuvhkOPxwuuABuvRXat4+dSjle5CWp8DZsgO99D2bPhsceg6FDYyfSdjzy\nl1R4bdvCfvvBM89Y/GXKUU9JqjCOekqSGmX5S2qZ556DJUtip1CeLH9JzZPNwo03wlFHwdy5sdMo\nT077SMrfmjVhmmf+fHjqKdhjj9iJlCeP/CXlp64OqquhZ0+YMcPiTyinfSTl5+qroX9/OOGE2Em0\nA+7qKUkp5KinJKlRlr+kxmWzsGhR7BQqEqd9JH3cqlVwxhnhB8CkSbHTqAg88pe0rRkzwjTP4MFw\n332x06hIPPKXFDQ0wFVXwW9/CzfdBF/9auxEKqJSHPmPBZYDc7Z6rCswFXgVeAToUoIcknZm9my4\n//6wE6fFX/FKMeo5AlgH3AbsnXtsDPBO7u35wG7ABY18rKOeUills1BV7hPg+iTlNOc/AJjER+U/\nDxhJ+I2gF5AB9mzk4yx/ScpTOc/59yQUP7m3PSPlkNJp48bYCRRZOUz7ZHM3SaXw2GMwZEjYlE2p\nFWva54PlnmVAb2DFjp5YW1v74f2amhpqamqKHE2qUA0NcNllcMMN4cXUBw+OnUgFkslkyGQyeX1M\nrDX/McC7wBWEE71d8ISvVDzLl8Npp4XlnvHjoW/f2IlUROVywnc84eRud8IR/2jgfuBuoD+wCDgR\n+FcjH2v5Sy2VzcLw4XD00XDxxdDay3sqXbmUf0tY/lIhrF0LnTvHTqESsfwlKYXKedRTkhSR5S9V\nivp6GD0aLr88dhIlgGd+pEqwZAmccko4mTtuXOw0SgCP/KWke/hh2G8/OOKIcL9Xr9iJlAAe+UtJ\n9pe/wEUXwZ13wsiRsdMoQZz2kZJsRe7i+B494uZQWXHUU5JSyFFPSVKjLH8pCd58E845J4xzSgVg\n+UvlbtIkOOAA6N0bdvG/rArD7ySpjEyYMIFu3frRps2nOPzzR7PhRz+CM8+ECRPgF7+w/FUwnvCV\nysScOXM46KAjWb9+Il3pw+SqA6nv0sChr70M3brFjqcE8YSvlCD/+Mc/aGg4HjiYf7E712THMHLN\narJdu8aOpgpk+Utlonv37rRq9RLQQAOtuIu96PTpbh8cxUkFZflLZeL4449n2LBWdOx4OO3anUX7\n9l/mj3+8LnYsVaimHFKcDdwOrC5ylsa45q/KN2ECHHgg9OnDpk2buOeee1i5ciWHHXYY1dXVsdMp\ngQp1he+lwEnALGAs8DBQqka2/FW5Nm6Ec8+FyZNh4kTYZ5/YiVQhCnXC9yLgs4TiPwN4Dfg/YFDL\n4kkpNn8+HHooLFsGs2ZZ/Cq5pq75NwDLCC/AvgXYDbgXuLJIuaTKdffdcPDB8J3vwD33QJcusRMp\nhZqypfNPgG8D7wI3A+cCmwk/OF4DzitaOqkSvfsuTJkS9uCXImnKmv8lhCWfNxr5s2HA3IIm2pZr\n/pKUJ7d0lqQU8gpfKab16+GFF2KnkBpl+UvFMG9emN2/6abYSaRGWf5SoY0bByNGwNlnw/XXx04j\nNcoXcJcK5f334ayz4KmnYNo0Z/dV1ix/qVCefx62bIG6OujUKXYaaaec9lHF2bhxIytWrKBXr160\nbds2dpy8rVu3jtWrV9OnTx9atWoVO44SyGkfpc7EiffTrVsfhg49mB49+vP444/HjpSXMWOuoVu3\nXgwZMpyBA/di/vz5sSOpQnnkr4qxdOlSBg/em/XrHwIOAKbQufPpLF26kA4dOhT2i73zDnTvXtBP\n+eSTT3LUUSezfv2TQD+qqq5lzz3vYO7cZwr6dVT5PPJXqrz88su0abMXofgBjqahoTNvvNHYxenN\nlM3CzTfDXnvBihWF+7zAzJkz2bLlK0C/3Jf6H155ZRYeAKkYLP8iqq2FqqqP32prfX4xnt+/f382\nbXoZWJL7iHdYt+41hg0bWpg8770H3/oWXHcdZDLU3tijoPkHDhxI69ZPABtyH/EmDQ317LJLVSL+\n/Svt+ZXOZR9VlEsvvZJLL72KNm0+x+bNddxww28ZNer0ln/i2bPhxBPD/P7110Ohl5GAbDbLN785\nigcffIzWrfdgy5ZZPPjgvRx22GEF/1qqbO7to1SaO3cuCxYsYOjQoQwePLjln7C+PuzAef75cMop\nLf98O5HNZnn22WdZuXIl1dXV9O7du6hfT5XJ8pcKpb4eWntZjJIhCeW/CFhLeIGYzcDw7f7c8pek\nPDWl/GMfymSBGmBV5BxSkM1CQwN4cZUqXDlM+8T+7UMK1qyBb3wDfv/72Emkootd/lngUaAO+H7k\nLEqzujqoroZeveAHP4idRiq62Ms+hwJLgf8ApgLzgGRdj69ky2bhd7+D3/wGbrwRTjghdiKpJGKX\n/9Lc25XABMIJ323Kv3arKzBqamqoqakpUTSlwmWXwd/+BjNmwKBBsdNIzZLJZMhkMnl9TMz19g5A\nK+A9oCPwCOHF4h/Z6jlO+6i4Vq2Cjh2hXbvYSaSCKfdpn56Eo/0PcvyVbYtfKr6uXWMnkKIo90kb\nj/wlKU/u6il9YMYMOO20cIJXkuWvyrNw4UKmTZvG4sWLwwVbV14Jxx0XZviryv2XXak0Yk/7SAV1\n7bU3cOGFl9C27V50+vcL/HPoAPq2awfPPAOf+UzseFLZKPfDINf81WQLFy5kr72Gs2HDTD5DA49x\nMPe1Xs13l71N527dYseTSsY1f6XKwoULadt2GNCft+jHydzL6E/14+0Cv+KWVAksf1WMIUOGsGnT\nS8ALNNCKp6gH/kX//v1jR5PKjuWvitG3b1/Gjr2R9u1H0qnTHnTqdAITJoynY8eOsaNJZcc1fyXb\nli1w9dVw6qnQpw8Aa9euZcmSJfTr18/iVyol4cVcPonlrx1bvjy8oPqmTTB+/IflL6WdJ3xVuaZP\nD6+re9BBMG2axS/lyTl/Jc+ll8INN8Btt8EXvxg7jZRIlr+SZ+BAmDULeveOnURKLNf8JanCuOYv\nSWqU5a/ytWRJ2I1TUsFZ/ipPDz8cpnmeeSZ2EqkiecJX5aW+HkaPDpM8d94JI0fGTiRVJMtf5WPx\nYjj5ZOjQIUzz9OgRO5FUsVz2UflYsACOOQYeesjil4rMUU9JqjCOekqSGmX5K45XX42dQEo1y1+l\ntWkT/Pzn8KUvwbp1sdNIqWX5q3QWLYIRI+C116CuDjp1ip1ISi3LX6UxcSIMHw4nnQT33w++oLoU\nldM+Kr733w9bL19zDRx4YOw0UsXzlbxUPrJZqCr3bzepMjjqqfJh8UtlxfJXYf3732F/HkllzfJX\n4cyfD4ccAnfdFTuJpE9g+asw7r47FP+oUXDKKbHTSPoE7uqpltm4Ec45B6ZOhSlToLo6diJJTWD5\nq2XOOw/efRdmzoRdd42dRlITlfsIhqOe5W79emjf3mkeqYw45y9JKeScvwrLH8RSxYhd/kcD84DX\ngPMjZ9HO3H47nHhi7BSSCiTmCd9WwA3AkcDbwLPAA8DLETNpe+vXw5lnwlNPhXFOSRUh5pH/cGA+\nsAjYDNwJfC1iHm1v7lw44ADYvDlswbzPPrETSSqQmOXfF3hrq/cX5x5TOXj+eRg5Mrzwym23ufe+\nVGFiLvs06exhbW3th/dramqoqakpUhxtY++9YcYMGDw4dhJJnyCTyZDJZPL6mJijngcBtYSTvgC/\nBBqAK7Z6jqOekpSnch/1rAP2AAYAbYGTCCd8JUlFFrP864EzgYeBucBdOOlTeu+9Bz/+MSxZEjuJ\npBKKPef/EDAEGAxcFjlL+syeDfvvD5s2QZcusdNIKqHY5a8Ysln405/gyCNh9Gi46Sbo0CF2Kkkl\n5K6eaZPNwmmnwZw58MQTMGRI7ESSInBjtzSaPBm+8IWwG6ekiuOunpKUQuU+6ilJisTyr2R1dZDn\nVX+S0sHyr0TZLFx3HRx7LKxZEzuNpDLktE+lWb0aRo2Ct94Ke/MMGhQ7kaQy5JF/JXn2Waiuhn79\n4MknLX5JO+S0TyXJZGDVKjj++NhJJEXkqKckpZCjnpKkRln+SdTQELZmkKRmctonad55B844I0z1\nZDLQpk3sRJISyCP/JHniiTDNM2yYxS+pRTzyT4KGBhgzBq69Fm65Bb785diJJCWc5Z8Eq1eHrRrq\n6mD33WOnkVQBHPWUpArjqKckqVGWf7lZuRLq62OnkFThLP9yMn067Luv2zBLKjrLvxxs2QKXXAKn\nngp//nN4YXVJKiKnfWJbtiyUfkMDzJwJvXvHTiQpBZz2ie2008LWy7/6FbRqFTuNpArgrp5JsGWL\npS+poBz1TAKLX1IEln8pOcIpqUxY/qVQXw8XXhjW9yWpDDjtU2yLF8PJJ0OHDnD77bHTSBLgkX9x\nTZ4M++8PxxwDDz0EPXrETiRJgEf+xTNtGvzwh3DPPTBiROw0krQNRz2LZcsWWLMGunaNnURSyjjn\nL0kp5Jy/JKlRlr8kpVCs8q8FFgPP5W5HR8ohSakUq/yzwNXA53K3KZFyFFUm4fvyJzl/krOD+WNL\nev6miLnsU+4nm1ss6d9ASc6f5Oxg/tiSnr8pYpb/WcBs4BagS8QckpQ6xSz/qcCcRm5fBf4ADAT2\nBZYCVxUxhyRpO+Ww9DIAmATs3cifzQcGlTSNJCXfAmDwzp4Qa3uH3oQjfoCvE34jaMxOw0uSkuU2\n4AXCmv9EoGfcOJIkSZKi+wbwErAFqI6cpamOBuYBrwHnR86Sr7HAcna8FFfu+gHTCd8zLwJnx42T\nt08B/wSeB+YCl8WN0yytCBdvToodpJkWEVYmngOeiRslb12Ae4GXCd8/B8WN0zJ7Ap8l/IdOQvm3\nIpyoHgC0IfwnHhozUJ5GEC68S2r59yJMkQF0Al4hWf/+AB1yb1sDTwOfj5ilOX4G/BV4IHaQZloI\nJHU73r8Ao3L3WwO77uiJSdjbZx7wauwQeRhOKP9FwGbgTuBrMQPl6XFgdewQLbCM8AMXYB3hCKhP\nvDjNsj73ti3hYGJVxCz52h04FriZ8pgmbK4kZt+VcPA2Nvd+PbBmR09OQvknTV/gra3eX5x7TKU3\ngPBbzD8j58jXLoQfYMsJv/HOjRsnL9cA5wENsYO0QBZ4FKgDvh85Sz4GAiuBW4FZwE189Fvkx5RL\n+e/ogrCvxAzVTL4AQXnoRFj7/AnhN4AkaSAsXe0OHAbURE3TdP8NrCCslSfxyPkDhxIOGo4Bfkw4\nmk6C1oSl8Rtzb98HLtjZk8vBF2MHKKC3CScdP9CPcPSv0mkD3AeMI4wSJ9Ua4EFgfyATN0qTHEK4\ngv9YwonrzoSx7m/HDNUMH1yDtBKYQFjKfTxenCZbnLs9m3v/XnZS/kkyHdgvdogmaE24um4AYc02\naSd8IWRP6gnfKkLhXBM7SDN156O9rtoDjwFHxIvTbCNJ5rRPB+DTufsdgSeBo+LFydtjhAEZCFvn\nXxEvSst9nbCGvoFwMu+huHGa5BjClMl84JeRs+RrPLAE+Dfh3/07cePk7fOEZZPnSebrRexNWK99\nnjBueF7cOM02kmRO+wwk/Ns/TxgVTtr/3/8iHPnPBv7GTqZ9JEmSJEmSJEmSJEmSJEmSJEmSJEmS\nEuMAwtWT7QiX/78IDIuaSGqGJO+8J8Xya8LGZe0JW2Akev8USVLTtCEc/T+NB1BKqHLZz19Kku6E\nJZ9OhKN/KXE8apHy9wBwB/CfQG/grLhxJEnF9m3gntz9XQhLPzXR0kiSJEmSJEmSJEmSJEmSJEmS\nJEmSpOT5fzpeRCcQMvncAAAAAElFTkSuQmCC\n",
"text": [
"<matplotlib.figure.Figure at 0x10dfdaad0>"
]
}
],
"prompt_number": 23
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The best fit for the data turns out to be regression line (as shown below), which can be found by minimizing the sum of squared errors (exactly what the code did). "
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"\n",
"xData = np.array([2, 3, 2, 3])\n",
"yData = np.array([4, 6, 6, 8])\n",
"def linear_regress(xData, yData):\n",
" n = xData.size\n",
" x_avg = np.average(xData)\n",
" y_avg = np.average(yData)\n",
" S1=np.dot(xData,yData)-n*x_avg*y_avg\n",
" sum_x_squared = np.sum(np.square(xData))\n",
" S2=sum_x_squared-n*x_avg**2\n",
" a1=S1/S2\n",
" a0=y_avg-a1*x_avg\n",
" return a0, a1\n",
"a0, a1 = linear_regress(xData, yData)\n",
"print \"a1=\", a1\n",
"print \"a0=\", a0\n",
"plt.scatter(xData,yData) \n",
"x = np.linspace(0, 5, 50)\n",
"y = a0+a1*x\n",
"plt.plot(x, y, 'r--')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"a1= 2.0\n",
"a0= 1.0\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 24,
"text": [
"[<matplotlib.lines.Line2D at 0x10e52e210>]"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAW4AAAEACAYAAACTXJylAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAE4RJREFUeJzt3WuQVOWdx/EvMIA6hotRYgJYIEa8BNEgxijG1oAoiBqj\nrrewi9nkxbqJbirsRq0y8yIVNQq5WYmJBgq8QBbwDuqi0kJCBJMAmsGATiAirGBFZJZRZgbofXF6\ndESG6enb0+f091M1Rfd4pvtXCH9OP/3r54AkSZIkSZIkSZIkSZIkSUq4GcBW4JV237sTeBVYAzwM\n9A2QS5LUgbOAU/jo4B4HdM/evj37JUkqk+6d/PdlwPZ9vrcY2Ju9vQIYVOxQkqSOdTa4O3MdsKgY\nQSRJuSlkcN8CtAAPFSmLJCkHNXn+3L8AE4Avd3TAsGHDMg0NDXk+vCRVrQbgmAMdkM8Z9/nAVOBi\nYFeHz9zQQCaTie3X97///eAZzB8+R7VlN3/4L2BYZ0O4s8E9B1gODAc2Ea1p/xw4lOhNylXAL3IY\n9pKkIulsqeSq/XxvRimCSJJyU2irJLFSqVToCAUxfzhxzg7mj4NuJXzsTHa9RpKUo27dukEns9kz\nbkmKGQe3JMWMg1uSYsbBLUkx4+CWpJhxcEtSzDi4JSlmHNySFDMObkmKGQe3JMWMg1uSYsbBLSk5\nmppCJygLB7ekZEinYfhw2LAhdJKSc3BLir9HH4Urr4SZM2Ho0NBpSs5tXSXF37vvQmMjHHVU6CQF\ny2VbVwe3JFUQ9+OWpARycEuKj5YWmDYNmptDJwnKwS0pHrZsgXPOidojDm5JqnAvvACnngoTJsBj\nj0GfPqETBVUTOoAkdSiTgbvuipZH7r8fxo0LnagiOLglVbbGRli5MhFVv2KxDihJFcQ6oCQlkINb\nUmVoaYGtW0OniAUHt6TwNm+Gc8+N3ohUpzob3DOArcAr7b53GLAYWA/8D9CvNNEkVYV0GkaPhgsu\ngDvuCJ0mFjob3DOB8/f53veIBvexwHPZ+5LUNZkM3HlntKvfrFlwyy3Q3UWAXHT2u7QM2L7P9y4C\nZmVvzwIuKXYoSVXgiSdg3ryo6mc/u0tyqQMOAZ4ARmTvbwf6t/v5d9rdb886oKSOZTLQ2gq9eoVO\nUlHKUQfMZL8kqWu6dXNo5ymfT05uBY4E3gI+DWzr6MC6uroPbqdSKVKpVB5PJ0nJlU6nSafTXfqZ\nfJZKfgT8A7iD6I3Jfuz/DUqXSiRFVb9vfhPuuQcGDw6dpuIVY6lkDrAcGA5sAqYAtwPjiOqA52bv\nS9LHtVX9zjgDBg4MnSYx3KtEUvG5q1/ecjnjdndAScWVycDVV0NDg7v6lYhn3JKKL52GL34RevcO\nnSR2vMq7JMWM27pKUgI5uCXlb/NmeO650CmqjoNbUn7aqn5r1oROUnVslUjqGqt+wTm4JeWusRGm\nTIFNm6z6BeRSiaTcvf46fPrTsGyZQzsg64CSVEGsA0pSAjm4Je1fY2PoBOqAg1vSx6XTcNxx8Oqr\noZNoPxzckj607wV8jz8+dCLth3VASRGrfrHhGbekyJVXwoABVv1iwDqgpMj27dC/f+gUVc9tXSUp\nZuxxS1ICObilapNOw623hk6hAji4pWrRvup31lmh06gA1gGlamDVL1E845aSrqEhuuCBVb/EsFUi\nJd2OHfDMM3DFFaGTKAfWASUpZqwDSlICObilJHnxRdi1K3QKlZiDW0qCtqrfJZfAa6+FTqMSsw4o\nxZ1Vv6pTyBn3TUA98ArwENC7KIkk5a6+3qpfFcp3cA8BvgF8HhgB9ACuLFImKZa2bdvGlCn/xpgx\nE7n55jqam5tL/6R33w233AK//CX09typWuRbBzwM+ANwOvB/wCPAT4Fn2x1jHVBVo6mpiRNPHM2W\nLefT2pri4IN/zdixh/L443NDR1PM5FIHzHeN+x1gGvAG8D7wDB8d2lJVWbp0Ke+8czitrdMBeP/9\n83j66SPYvn07/d3jWkWW7+AeBtxItGSyA5gHXAM82P6gurq6D26nUilSqVSeTyeJ3buhxj5B0qTT\nadLpdJd+Jt+lkn8CxgH/mr3/NaJlk+vbHeNSiarGh0sl47NLJfcWb6kkk4G77oLnn4ennir88VTR\nSvnJyb8SDeqDs08wFlib52NJsVdbW8vKlWmuvbaZMWPu5cYbT2X+/NmFP3BjI1x2GcybB7/6VeGP\np0QoZK+S/wT+GdgL/Jno7Lu13X/3jFsqRH09XHopnHsu/OQntkaqhJtMSXG1fj2ceSZMmwaTJ4dO\nozJycEtxlcnAxo0wdGjoJCozB7ckxYzbukpSAjm4pZAyGZg+3R391CUObimUtqrf3Lk2RtQlDm4p\nBHf1UwEc3FK5/fa3kEq5q5/y5sYHUrnt2QOLF8PJJ4dOopiyDihJFcQ6oCQlkINbKpVMBtatC51C\nCeQat1QKbRfwffddePZZ6FbKVUlVG8+4pWJrq/odcQQsWuTQVtE5uKVimjMnqvrdfDPcc49VP5WE\nrRKpWN58E84/Hx58EEaODJ1GMeXugFK57d0L3X0hq/xZB5TKzaGtMvBPmZQPX00qIAe31FWNjXD5\n5fDkk6GTqEo5uKWuaF/1GzcudBpVKQe3lKu2qp+7+ikwPzkp5eK22+A3v4k+BWnVT4FZB5RysW5d\ndNGD/v1DJ1HC2eOWpJixxy1JCeTgltprbIT77gudQjogB7fUpq3q98c/Rh9dlyqUg1uCj1b97rnH\nj66rohVSB+wH3AecCGSA64AXixFKKpuWFvjud6N9s636KSYKGdw/BRYBl2Ufp7YoiVS1MpkMDz/8\nMKtXr+GYY4Zx7bXX0qNHj9I+6a5d0bLISy8VXPVrbW1l9uzZbNz4d047bTSTJk0qUkjpo/KtA/YF\nVgFHH+AY64Dqkm99ayozZz5DU9NXqK19jnPOGcjjj89tq0dVtD179jB27MWsXPke7713FrW1v+XG\nG6/mBz+4NXQ0xUwpe9wnA78C1gIjgT8BNwDvtTvGwa2cvf322wwadAwtLRuB/kAztbUn8MIL/82o\nUaMCp+tcOp1m0qRvsXPnKqIXoFvp2fNotm/fRm2tL0aVu1wGd75LJTXA54F/B14CfgJ8D/jI6UVd\nXd0Ht1OpFKlUKs+nU9I1NjZSU9OXlpZ+2e/0pkePz7Bjx45iPgn06gUHHVS8x8zasWMH3bsP5sO/\nUgPo3r03TU1NDm4dUDqdJp1Od+ln8j3jPhL4AzA0e38M0eC+sN0xnnErZ7t37+bYY0/hjTeuYM+e\n6+jW7Sn696+joeEv9OvXr/MH6Ex9PVx6Kdx6K1xzTeGPt49t27bx2c+eRGPjNOBsamruZvjwJbzy\nyouxWOpR5SjlJyffAjYBx2bvjwXq83wsiZqaGtLphXzhC7+jT59RfO5zM3nhhaeLM7TbX8C3BEMb\nYMCAATz//EKOP/5n9OkzmjFj6nn22ccc2iqJQv5UjSSqA/YCGoApQPvXtZ5xK6z2Vb8FC6z6KRZK\nucYNsAYYXcDPS6V1222wYUNRqn5SJXF3QCXXrl3Rm5F+ClIx4raukhQzbusqSQnk4Fb81ddHV11v\naQmdRCoLB7fibe7cqOp34YXRerZUBbxYsOKppQWmToUnn4TFi+Hkk0MnksrGwa342bkTxo+Hww6L\nLnpg1U9VxlaJ4ieTgcceg4susuqnxLEOKEkxYx1QkhLIwa3KVl8P69eHTiFVFAe3Klfbrn5r14ZO\nIlUUWyWqPG27+i1caNVP2g8HtyrL5s1wxRVW/aQDcKlElWXxYpgwIar7ObSl/bIOKEkVxDqgJCWQ\ng1vhvP9+6ARSLDm4FcacOXDiidDUFDqJFDu2SlRebbv6LVwIjzwCtbWhE0mx4+BW+bSv+nkBXylv\nLpWoPJqb4UtfsuonFYF1QJXP1q3wqU+FTiFVNLd1laSYscctSQnk4FbxzZkTXcRXUknYKlHxtO3q\nt2gRLFgQOo2UWA5uFUdb1e+Tn4x29evXL3QiKbEKXSrpAawCnihCFsXV738Po0fDxInw6KMObanE\nCj3jvgFYC3yiCFkUV336wKxZMG5cwQ/12muvsXbtWo4++mhGjBhRhHBS8hRyxj0ImADcR2lrhap0\nI0YUZWjPmDGLkSPPZPLkezn99PHU1f2wCOGk5Clk4M4Dfgj0Ab4LTNrnv9vjVs4aGxsZMGAwzc0r\ngOOArRx88EmsWrWU4cOHh44nlU0uPe58l0ouBLYRrW+nOjqorq7ug9upVIpUqsNDFRcrV8JppxX9\nYd966y169vwkzc3HZb/zKXr1OoFNmzY5uJVo6XSadDrdpZ/J94z7h8DXgN3AQURn3QuAye2O8Yw7\nSdpfwLcE14LctWsXRx45lB077iU6L3iJQw65gPXr1zBw4MCiPpdUycr1kfezcakk2bZsgcsvj3b1\nmz27ZBtELV++nIkTL6O5eS/durXw4IMzueSSi0vyXFKlKuVSyb6c0EmVTsPVV8P118NNN0H30n3Y\n9owzzmDbtr+zdetWjjjiCHr37l2y55LizE2m1LE9e2DsWLjlluhXSSXn7oAqXCYD3Wx7SuXi7oAq\nnENbqjgObn1o797QCSTlwMGtqOr37W/DzTeHTiIpB+4OWO3aX8B39uzQaSTlwDPuapZOR7v6eQFf\nKVY8465WCxfC178O999flA2iJJWPdcBqtXMnbN8OgweHTiKpHXvckhQz9rglKYEc3EnX0gK33w5N\nTaGTSCoSB3eSbd4M55wTXRNy9+7QaSQViYM7qfat+vXtGzqRpCKxDpg0mQzcdRdMmxZ9oOa880In\nklRkDu4kam2NLjF21FGhk0gqAeuAklRBrANKUgI5uOOspSVqjkiqKg7uuGqr+t15Z+gkksrMwR1H\nbVW/iRNh+vTQaSSVma2SOGmr+k2fHu3q5wV8park4I6TxYth3jxYscKqn1TFrAPGTWsr9OwZOoWk\nEnFbV0mKGXvckpRADu5KtHkzjB8Pf/tb6CSSKpCDu9K0Vf3OPhuGDAmdRlIFslVSKaz6ScpRvoN7\nMDAbGABkgF8DPytWqKo0eTKsW2fVT1Kn8m2VHJn9Wg0cCvwJuAR4td0xtkq6YvlyGDUKevcOnURS\nQOWsAz4K/Bx4rt33HNyS1EXlqgMOAU4BVhThsSRJnSh0cB8KzAduAHYWHqcKbN4MixaFTiEpxgpp\nlfQEFgAPEC2VfExdXd0Ht1OpFKlUqoCnS4AlS+Caa+A734ku4iup6qXTadLpdJd+Jt817m7ALOAf\nwH90cIxr3G0ymWjf7OnT4YEHrPpJ6lAp35wcAywFXiaqAwLcBDzd7hgHN0BjI0yZAps2wfz5Vv0k\nHVAugzvfpZLf4acuc/PmmzBoEDz0kFU/SUXh7oCSVEHcHVCSEsjBXUzvvhs6gaQq4OAulnQaTjgB\nXn45dBJJCefgLlRb1e+qq2D2bDjppNCJJCWc27oWorERrrsO3njDXf0klY1n3IWYPBkOPxyWLXNo\nSyob64CFaGyEPn1Cp5CUIF7lXZJixh63JCWQgzsXS5bA1KmhU0gS4OA+sEwGfvSjqOo3fnzoNJIE\nWAfsWPtd/VautDUiqWJ4xr0/GzbA6NEwYIBVP0kVx1bJ/jQ1wdNPw1e/GjqJpCpjHVCSYsY6oCQl\nkINbkmLGwS1JMePglqSYcXBLUsw4uCUpZhzckhQzDm5JihkHtyTFjINbkmLGwS1JMePglqSYKWRw\nnw/8FXgN+K/ixJEkdSbfwd0DuJtoeJ8AXAUcX6xQlSCdToeOUBDzhxPn7GD+OMh3cJ8GvA5sBFqB\nucDFRcpUEeL+P9/84cQ5O5g/DvId3AOBTe3uv5n9niSpxPId3F4hQZICyfcKOKcDdURr3AA3AXuB\nO9od8zowLO9kklSdGoBjSvHANdkHHwL0AlaTsDcnJSmJLgDWEZ1Z3xQ4iyRJklSdLgfqgT3A5wNn\nyVXcP1g0A9gKvBI6SB4GA0uI/sz8Bfh22DhddhCwgmjpcC1wW9g4eesBrAKeCB0kDxuBl4nyrwwb\npcv6AfOBV4n+/JweKshxwLFEfxnjMLh7EC39DAF6Es+1+7OAU4jn4D4SODl7+1Cipbi4/f4fkv21\nBngRGBMwS76+AzwIPB46SB42AIeFDpGnWcB12ds1QN+ODiz1XiV/BdaX+DmKKQkfLFoGbA8dIk9v\nEf1jCbCT6MzjM+Hi5OW97K+9iE4E3gmYJR+DgAnAfeTfOgstjrn7Ep10zcje3w3s6OhgN5n6KD9Y\nVDmGEL1yWBE4R1d1J/rHZyvRK821YeN02Y+BqUT13jjKAM8CfwS+EThLVwwF3gZmAn8G7uXDV28f\nU4zBvZjoZfm+X5OK8Njl5geLKsOhRGt9NxCdecfJXqLlnkHAl4BU0DRdcyGwjWh9OI5nrQBnEv2D\nfwFwPdFZbBzUEC0n/yL7axPwvQMdXKhxRXiMSrGZ6A2yNoOJzrpVPj2BBcADwKOBsxRiB7AQOBVI\nh42SszOAi4iWSg4C+gCzgckhQ3XR/2Z/fRt4hGj5c1m4ODl7M/v1Uvb+fA4wuMtlCTAqdIgcJOWD\nRUOI55uT3YgGxY9DB8nT4UTNAICDgaXAl8PFKcjZxK9VcgjwieztWuD3wHnh4nTZUqIyB0SfTL+j\n40NL6ytEa8bvE73x9FSoIF0Q9w8WzQG2AM1Ev/dTwsbpkjFESw2riV6ur+LDbRXiYATR+uRqokra\n1LBxCnI28WuVDCX6vV9NVCeN29/fkURn3GuAhzlAq0SSJEmSJEmSJEmSJEmSJEmSJEnSAfw/Y3Mx\nluSSPuMAAAAASUVORK5CYII=\n",
"text": [
"<matplotlib.figure.Figure at 0x10f16c7d0>"
]
}
],
"prompt_number": 24
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Lets figure out why minimizing the sum of squared errors (cost) gives us a unique answer. The sum of squared errors is a (cost) function of the two parameters (coefficients) $a_{0}$ and $a_{1}$. Our goal is to find the combination of $a_{0}$ and $a_{1}$ so that the cost function yields the smallest value (minimizing it). We simply first the problem by setting $a_0=0$, then the cost is a function of only $a_1$. The following is a plot of the cost function. "
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"\n",
"xData = np.array([2, 3, 2, 3])\n",
"yData = np.array([4, 6, 6, 8])\n",
"\n",
"def cost(x, y, a0, a1):\n",
" fx = a0+x*a1\n",
" return np.sum(np.square(y-fx))\n",
" \n",
"a1 = np.linspace(0, 4, 50)\n",
"#print a1\n",
"i=0\n",
"y = np.arange(50)\n",
"for a in a1:\n",
" y[i] = cost(xData, yData, 0, a)\n",
" i=i+1\n",
"#print y\n",
"plt.plot(a1, y, 'r--')\n",
"plt.ylabel('cost')\n",
"plt.xlabel('$a_1$')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 36,
"text": [
"<matplotlib.text.Text at 0x1110bf090>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": [
"<matplotlib.figure.Figure at 0x110cbfad0>"
]
}
],
"prompt_number": 36
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"from pylab import *\n",
"import matplotlib.pyplot as plt\n",
"from mpl_toolkits.mplot3d.axes3d import Axes3D\n",
"\n",
"%matplotlib inline\n",
"xData = np.array([1, 2, 3])\n",
"yData = np.array([1, 2, 3])\n",
"\n",
"def cost(x, y, a0, a1):\n",
" fx = a0+x*a1\n",
" return np.sum(np.square(y-fx))\n",
"size = 200\n",
"x = np.linspace(-100, 100, size)\n",
"y = np.linspace(-100, 100, size) \n",
"a_0,a_1 = meshgrid(x, y)\n",
"c = np.empty([size, size])\n",
"for i in range(0, size):\n",
" for j in range(0, size):\n",
" c[i][j] = cost(xData, yData, a_0[i][j], a_1[i][j])\n",
"#fig, ax = plt.subplots()\n",
"#p = ax.pcolor(a_0, a_1, c)\n",
"ax = plt.axes(projection='3d')\n",
"ax.plot_surface(a_0, a_1, c, rstride=1, cstride=1, cmap=cm.coolwarm, linewidth=0, antialiased=False)\n",
"ax.set_xlabel('$a_0$')\n",
"ax.set_ylabel('$a_1$')\n",
"ax.set_zlabel('cost')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 95,
"text": [
"<matplotlib.text.Text at 0x12eb28a50>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nAAAASUVORK5CYII=\n",
"text": [
"<matplotlib.figure.Figure at 0x110dfee50>"
]
}
],
"prompt_number": 95
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"from pylab import *\n",
"import matplotlib.pyplot as plt\n",
"from mpl_toolkits.mplot3d.axes3d import Axes3D\n",
"\n",
"%matplotlib inline\n",
"xData = np.array([2, 3, 2, 3])\n",
"yData = np.array([4, 6, 6, 8])\n",
"\n",
"def cost(x, y, a0, a1):\n",
" fx = a0+x*a1\n",
" return np.sum(np.square(y-fx))\n",
"size = 100\n",
"x = np.linspace(-10, 10, size)\n",
"y = np.linspace(-10, 10, size) \n",
"a_0,a_1 = meshgrid(x, y)\n",
"c = np.empty([size, size])\n",
"for i in range(0, size):\n",
" for j in range(0, size):\n",
" c[i][j] = cost(xData, yData, a_0[i][j], a_1[i][j])\n",
"#fig, ax = plt.subplots()\n",
"#p = ax.pcolor(a_0, a_1, c)\n",
"ax = plt.axes(projection='3d')\n",
"ax.plot_surface(a_0, a_1, c, rstride=1, cstride=1, cmap=cm.coolwarm, linewidth=0, antialiased=False)\n",
"ax.set_xlabel('$a_0$')\n",
"ax.set_ylabel('$a_1$')\n",
"ax.set_zlabel('cost')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 7,
"text": [
"<matplotlib.text.Text at 0x10f497d50>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nQmCC\n",
"text": [
"<matplotlib.figure.Figure at 0x1086c9f10>"
]
}
],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"\n",
"xData = np.array([1, 2, 3])\n",
"yData = np.array([1, 2, 3])\n",
"def linear_regress(xData, yData):\n",
" n = xData.size\n",
" x_avg = np.average(xData)\n",
" y_avg = np.average(yData)\n",
" S1=np.dot(xData,yData)-n*x_avg*y_avg\n",
" sum_x_squared = np.sum(np.square(xData))\n",
" S2=sum_x_squared-n*x_avg**2\n",
" a1=S1/S2\n",
" a0=y_avg-a1*x_avg\n",
" return a0, a1\n",
"a0, a1 = linear_regress(xData, yData)\n",
"print \"a1=\", a1\n",
"print \"a0=\", a0\n"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"a1= 1.0\n",
"a0= 0.0\n"
]
}
],
"prompt_number": 100
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"a1= 2.0\n",
"a0= 1.0\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 5,
"text": [
"[<matplotlib.lines.Line2D at 0x1084759d0>]"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAW4AAAEACAYAAACTXJylAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAE4RJREFUeJzt3WuQVOWdx/EvMIA6hotRYgJYIEa8BNEgxijG1oAoiBqj\nrrewi9nkxbqJbirsRq0y8yIVNQq5WYmJBgq8QBbwDuqi0kJCBJMAmsGATiAirGBFZJZRZgbofXF6\ndESG6enb0+f091M1Rfd4pvtXCH9OP/3r54AkSZIkSZIkSZIkSZIkSUq4GcBW4JV237sTeBVYAzwM\n9A2QS5LUgbOAU/jo4B4HdM/evj37JUkqk+6d/PdlwPZ9vrcY2Ju9vQIYVOxQkqSOdTa4O3MdsKgY\nQSRJuSlkcN8CtAAPFSmLJCkHNXn+3L8AE4Avd3TAsGHDMg0NDXk+vCRVrQbgmAMdkM8Z9/nAVOBi\nYFeHz9zQQCaTie3X97///eAZzB8+R7VlN3/4L2BYZ0O4s8E9B1gODAc2Ea1p/xw4lOhNylXAL3IY\n9pKkIulsqeSq/XxvRimCSJJyU2irJLFSqVToCAUxfzhxzg7mj4NuJXzsTHa9RpKUo27dukEns9kz\nbkmKGQe3JMWMg1uSYsbBLUkx4+CWpJhxcEtSzDi4JSlmHNySFDMObkmKGQe3JMWMg1uSYsbBLSk5\nmppCJygLB7ekZEinYfhw2LAhdJKSc3BLir9HH4Urr4SZM2Ho0NBpSs5tXSXF37vvQmMjHHVU6CQF\ny2VbVwe3JFUQ9+OWpARycEuKj5YWmDYNmptDJwnKwS0pHrZsgXPOidojDm5JqnAvvACnngoTJsBj\nj0GfPqETBVUTOoAkdSiTgbvuipZH7r8fxo0LnagiOLglVbbGRli5MhFVv2KxDihJFcQ6oCQlkINb\nUmVoaYGtW0OniAUHt6TwNm+Gc8+N3ohUpzob3DOArcAr7b53GLAYWA/8D9CvNNEkVYV0GkaPhgsu\ngDvuCJ0mFjob3DOB8/f53veIBvexwHPZ+5LUNZkM3HlntKvfrFlwyy3Q3UWAXHT2u7QM2L7P9y4C\nZmVvzwIuKXYoSVXgiSdg3ryo6mc/u0tyqQMOAZ4ARmTvbwf6t/v5d9rdb886oKSOZTLQ2gq9eoVO\nUlHKUQfMZL8kqWu6dXNo5ymfT05uBY4E3gI+DWzr6MC6uroPbqdSKVKpVB5PJ0nJlU6nSafTXfqZ\nfJZKfgT8A7iD6I3Jfuz/DUqXSiRFVb9vfhPuuQcGDw6dpuIVY6lkDrAcGA5sAqYAtwPjiOqA52bv\nS9LHtVX9zjgDBg4MnSYx3KtEUvG5q1/ecjnjdndAScWVycDVV0NDg7v6lYhn3JKKL52GL34RevcO\nnSR2vMq7JMWM27pKUgI5uCXlb/NmeO650CmqjoNbUn7aqn5r1oROUnVslUjqGqt+wTm4JeWusRGm\nTIFNm6z6BeRSiaTcvf46fPrTsGyZQzsg64CSVEGsA0pSAjm4Je1fY2PoBOqAg1vSx6XTcNxx8Oqr\noZNoPxzckj607wV8jz8+dCLth3VASRGrfrHhGbekyJVXwoABVv1iwDqgpMj27dC/f+gUVc9tXSUp\nZuxxS1ICObilapNOw623hk6hAji4pWrRvup31lmh06gA1gGlamDVL1E845aSrqEhuuCBVb/EsFUi\nJd2OHfDMM3DFFaGTKAfWASUpZqwDSlICObilJHnxRdi1K3QKlZiDW0qCtqrfJZfAa6+FTqMSsw4o\nxZ1Vv6pTyBn3TUA98ArwENC7KIkk5a6+3qpfFcp3cA8BvgF8HhgB9ACuLFImKZa2bdvGlCn/xpgx\nE7n55jqam5tL/6R33w233AK//CX09typWuRbBzwM+ANwOvB/wCPAT4Fn2x1jHVBVo6mpiRNPHM2W\nLefT2pri4IN/zdixh/L443NDR1PM5FIHzHeN+x1gGvAG8D7wDB8d2lJVWbp0Ke+8czitrdMBeP/9\n83j66SPYvn07/d3jWkWW7+AeBtxItGSyA5gHXAM82P6gurq6D26nUilSqVSeTyeJ3buhxj5B0qTT\nadLpdJd+Jt+lkn8CxgH/mr3/NaJlk+vbHeNSiarGh0sl47NLJfcWb6kkk4G77oLnn4ennir88VTR\nSvnJyb8SDeqDs08wFlib52NJsVdbW8vKlWmuvbaZMWPu5cYbT2X+/NmFP3BjI1x2GcybB7/6VeGP\np0QoZK+S/wT+GdgL/Jno7Lu13X/3jFsqRH09XHopnHsu/OQntkaqhJtMSXG1fj2ceSZMmwaTJ4dO\nozJycEtxlcnAxo0wdGjoJCozB7ckxYzbukpSAjm4pZAyGZg+3R391CUObimUtqrf3Lk2RtQlDm4p\nBHf1UwEc3FK5/fa3kEq5q5/y5sYHUrnt2QOLF8PJJ4dOopiyDihJFcQ6oCQlkINbKpVMBtatC51C\nCeQat1QKbRfwffddePZZ6FbKVUlVG8+4pWJrq/odcQQsWuTQVtE5uKVimjMnqvrdfDPcc49VP5WE\nrRKpWN58E84/Hx58EEaODJ1GMeXugFK57d0L3X0hq/xZB5TKzaGtMvBPmZQPX00qIAe31FWNjXD5\n5fDkk6GTqEo5uKWuaF/1GzcudBpVKQe3lKu2qp+7+ikwPzkp5eK22+A3v4k+BWnVT4FZB5RysW5d\ndNGD/v1DJ1HC2eOWpJixxy1JCeTgltprbIT77gudQjogB7fUpq3q98c/Rh9dlyqUg1uCj1b97rnH\nj66rohVSB+wH3AecCGSA64AXixFKKpuWFvjud6N9s636KSYKGdw/BRYBl2Ufp7YoiVS1MpkMDz/8\nMKtXr+GYY4Zx7bXX0qNHj9I+6a5d0bLISy8VXPVrbW1l9uzZbNz4d047bTSTJk0qUkjpo/KtA/YF\nVgFHH+AY64Dqkm99ayozZz5DU9NXqK19jnPOGcjjj89tq0dVtD179jB27MWsXPke7713FrW1v+XG\nG6/mBz+4NXQ0xUwpe9wnA78C1gIjgT8BNwDvtTvGwa2cvf322wwadAwtLRuB/kAztbUn8MIL/82o\nUaMCp+tcOp1m0qRvsXPnKqIXoFvp2fNotm/fRm2tL0aVu1wGd75LJTXA54F/B14CfgJ8D/jI6UVd\nXd0Ht1OpFKlUKs+nU9I1NjZSU9OXlpZ+2e/0pkePz7Bjx45iPgn06gUHHVS8x8zasWMH3bsP5sO/\nUgPo3r03TU1NDm4dUDqdJp1Od+ln8j3jPhL4AzA0e38M0eC+sN0xnnErZ7t37+bYY0/hjTeuYM+e\n6+jW7Sn696+joeEv9OvXr/MH6Ex9PVx6Kdx6K1xzTeGPt49t27bx2c+eRGPjNOBsamruZvjwJbzy\nyouxWOpR5SjlJyffAjYBx2bvjwXq83wsiZqaGtLphXzhC7+jT59RfO5zM3nhhaeLM7TbX8C3BEMb\nYMCAATz//EKOP/5n9OkzmjFj6nn22ccc2iqJQv5UjSSqA/YCGoApQPvXtZ5xK6z2Vb8FC6z6KRZK\nucYNsAYYXcDPS6V1222wYUNRqn5SJXF3QCXXrl3Rm5F+ClIx4raukhQzbusqSQnk4Fb81ddHV11v\naQmdRCoLB7fibe7cqOp34YXRerZUBbxYsOKppQWmToUnn4TFi+Hkk0MnksrGwa342bkTxo+Hww6L\nLnpg1U9VxlaJ4ieTgcceg4susuqnxLEOKEkxYx1QkhLIwa3KVl8P69eHTiFVFAe3Klfbrn5r14ZO\nIlUUWyWqPG27+i1caNVP2g8HtyrL5s1wxRVW/aQDcKlElWXxYpgwIar7ObSl/bIOKEkVxDqgJCWQ\ng1vhvP9+6ARSLDm4FcacOXDiidDUFDqJFDu2SlRebbv6LVwIjzwCtbWhE0mx4+BW+bSv+nkBXylv\nLpWoPJqb4UtfsuonFYF1QJXP1q3wqU+FTiFVNLd1laSYscctSQnk4FbxzZkTXcRXUknYKlHxtO3q\nt2gRLFgQOo2UWA5uFUdb1e+Tn4x29evXL3QiKbEKXSrpAawCnihCFsXV738Po0fDxInw6KMObanE\nCj3jvgFYC3yiCFkUV336wKxZMG5cwQ/12muvsXbtWo4++mhGjBhRhHBS8hRyxj0ImADcR2lrhap0\nI0YUZWjPmDGLkSPPZPLkezn99PHU1f2wCOGk5Clk4M4Dfgj0Ab4LTNrnv9vjVs4aGxsZMGAwzc0r\ngOOArRx88EmsWrWU4cOHh44nlU0uPe58l0ouBLYRrW+nOjqorq7ug9upVIpUqsNDFRcrV8JppxX9\nYd966y169vwkzc3HZb/zKXr1OoFNmzY5uJVo6XSadDrdpZ/J94z7h8DXgN3AQURn3QuAye2O8Yw7\nSdpfwLcE14LctWsXRx45lB077iU6L3iJQw65gPXr1zBw4MCiPpdUycr1kfezcakk2bZsgcsvj3b1\nmz27ZBtELV++nIkTL6O5eS/durXw4IMzueSSi0vyXFKlKuVSyb6c0EmVTsPVV8P118NNN0H30n3Y\n9owzzmDbtr+zdetWjjjiCHr37l2y55LizE2m1LE9e2DsWLjlluhXSSXn7oAqXCYD3Wx7SuXi7oAq\nnENbqjgObn1o797QCSTlwMGtqOr37W/DzTeHTiIpB+4OWO3aX8B39uzQaSTlwDPuapZOR7v6eQFf\nKVY8465WCxfC178O999flA2iJJWPdcBqtXMnbN8OgweHTiKpHXvckhQz9rglKYEc3EnX0gK33w5N\nTaGTSCoSB3eSbd4M55wTXRNy9+7QaSQViYM7qfat+vXtGzqRpCKxDpg0mQzcdRdMmxZ9oOa880In\nklRkDu4kam2NLjF21FGhk0gqAeuAklRBrANKUgI5uOOspSVqjkiqKg7uuGqr+t15Z+gkksrMwR1H\nbVW/iRNh+vTQaSSVma2SOGmr+k2fHu3q5wV8park4I6TxYth3jxYscKqn1TFrAPGTWsr9OwZOoWk\nEnFbV0mKGXvckpRADu5KtHkzjB8Pf/tb6CSSKpCDu9K0Vf3OPhuGDAmdRlIFslVSKaz6ScpRvoN7\nMDAbGABkgF8DPytWqKo0eTKsW2fVT1Kn8m2VHJn9Wg0cCvwJuAR4td0xtkq6YvlyGDUKevcOnURS\nQOWsAz4K/Bx4rt33HNyS1EXlqgMOAU4BVhThsSRJnSh0cB8KzAduAHYWHqcKbN4MixaFTiEpxgpp\nlfQEFgAPEC2VfExdXd0Ht1OpFKlUqoCnS4AlS+Caa+A734ku4iup6qXTadLpdJd+Jt817m7ALOAf\nwH90cIxr3G0ymWjf7OnT4YEHrPpJ6lAp35wcAywFXiaqAwLcBDzd7hgHN0BjI0yZAps2wfz5Vv0k\nHVAugzvfpZLf4acuc/PmmzBoEDz0kFU/SUXh7oCSVEHcHVCSEsjBXUzvvhs6gaQq4OAulnQaTjgB\nXn45dBJJCefgLlRb1e+qq2D2bDjppNCJJCWc27oWorERrrsO3njDXf0klY1n3IWYPBkOPxyWLXNo\nSyob64CFaGyEPn1Cp5CUIF7lXZJixh63JCWQgzsXS5bA1KmhU0gS4OA+sEwGfvSjqOo3fnzoNJIE\nWAfsWPtd/VautDUiqWJ4xr0/GzbA6NEwYIBVP0kVx1bJ/jQ1wdNPw1e/GjqJpCpjHVCSYsY6oCQl\nkINbkmLGwS1JMePglqSYcXBLUsw4uCUpZhzckhQzDm5JihkHtyTFjINbkmLGwS1JMePglqSYKWRw\nnw/8FXgN+K/ixJEkdSbfwd0DuJtoeJ8AXAUcX6xQlSCdToeOUBDzhxPn7GD+OMh3cJ8GvA5sBFqB\nucDFRcpUEeL+P9/84cQ5O5g/DvId3AOBTe3uv5n9niSpxPId3F4hQZICyfcKOKcDdURr3AA3AXuB\nO9od8zowLO9kklSdGoBjSvHANdkHHwL0AlaTsDcnJSmJLgDWEZ1Z3xQ4iyRJklSdLgfqgT3A5wNn\nyVXcP1g0A9gKvBI6SB4GA0uI/sz8Bfh22DhddhCwgmjpcC1wW9g4eesBrAKeCB0kDxuBl4nyrwwb\npcv6AfOBV4n+/JweKshxwLFEfxnjMLh7EC39DAF6Es+1+7OAU4jn4D4SODl7+1Cipbi4/f4fkv21\nBngRGBMwS76+AzwIPB46SB42AIeFDpGnWcB12ds1QN+ODiz1XiV/BdaX+DmKKQkfLFoGbA8dIk9v\nEf1jCbCT6MzjM+Hi5OW97K+9iE4E3gmYJR+DgAnAfeTfOgstjrn7Ep10zcje3w3s6OhgN5n6KD9Y\nVDmGEL1yWBE4R1d1J/rHZyvRK821YeN02Y+BqUT13jjKAM8CfwS+EThLVwwF3gZmAn8G7uXDV28f\nU4zBvZjoZfm+X5OK8Njl5geLKsOhRGt9NxCdecfJXqLlnkHAl4BU0DRdcyGwjWh9OI5nrQBnEv2D\nfwFwPdFZbBzUEC0n/yL7axPwvQMdXKhxRXiMSrGZ6A2yNoOJzrpVPj2BBcADwKOBsxRiB7AQOBVI\nh42SszOAi4iWSg4C+gCzgckhQ3XR/2Z/fRt4hGj5c1m4ODl7M/v1Uvb+fA4wuMtlCTAqdIgcJOWD\nRUOI55uT3YgGxY9DB8nT4UTNAICDgaXAl8PFKcjZxK9VcgjwieztWuD3wHnh4nTZUqIyB0SfTL+j\n40NL6ytEa8bvE73x9FSoIF0Q9w8WzQG2AM1Ev/dTwsbpkjFESw2riV6ur+LDbRXiYATR+uRqokra\n1LBxCnI28WuVDCX6vV9NVCeN29/fkURn3GuAhzlAq0SSJEmSJEmSJEmSJEmSJEmSJEnSAfw/Y3Mx\nluSSPuMAAAAASUVORK5CYII=\n",
"text": [
"<matplotlib.figure.Figure at 0x108475e90>"
]
}
],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"\n",
"xData = np.array([4, 7, 11, 13, 17])\n",
"yData = np.array([2, 0, 2, 6, 7])\n",
"def linear_regress(xData, yData):\n",
" n = xData.size\n",
" x_avg = np.average(xData)\n",
" y_avg = np.average(yData)\n",
" S1=np.dot(xData,yData)-n*x_avg*y_avg\n",
" sum_x_squared = np.sum(np.square(xData))\n",
" S2=sum_x_squared-n*x_avg**2\n",
" a1=S1/S2\n",
" a0=y_avg-a1*x_avg\n",
" return a0, a1\n",
"a0, a1 = linear_regress(xData, yData)\n",
"print \"a1=\", a1\n",
"print \"a0=\", a0\n",
"plt.scatter(xData,yData)\n",
"x = np.linspace(0, 20, 50)\n",
"y = a0+a1*x\n",
"plt.plot(x, y, 'r--')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"a1= 0.486434108527\n",
"a0= -1.65891472868\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 103,
"text": [
"[<matplotlib.lines.Line2D at 0x129f8d8d0>]"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nkiRJmfp/VQlgSuKy1QUAAAAASUVORK5CYII=\n",
"text": [
"<matplotlib.figure.Figure at 0x129f8de10>"
]
}
],
"prompt_number": 103
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"\n",
"# m is the number of training examples\n",
"def gradientDescent(x, y, theta, alpha, m, iterations):\n",
" x_t = x.transpose()\n",
" for i in range(0, iterations):\n",
" #print \"x_t=\",x_t\n",
" #print \"theta=\",theta\n",
" hypothesis = np.dot(x, theta)\n",
" #print hypothesis\n",
" error = hypothesis - y\n",
" # avg cost per example \n",
" cost = np.sum(error ** 2) / (2 * m)\n",
" # print(\"Iteration %d | Cost: %f\" % (i, cost))\n",
" # avg gradient per example\n",
" gradient = np.dot(x_t, error) / m\n",
" # update\n",
" theta = theta - alpha * gradient\n",
" return theta\n",
"\n",
"x = np.array([[1, 4],\n",
" [1, 7],\n",
" [1, 11],\n",
" [1, 13],\n",
" [1, 17]])\n",
"y = np.array([2, 0, 2, 6, 7])\n",
"m = x.size\n",
"n = 2 # number of features\n",
"iterations= 1000\n",
"alpha = 0.0005\n",
"theta = np.ones(n)\n",
"theta = gradientDescent(x, y, theta, alpha, m, iterations)\n",
"print(theta)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[ 0.84001345 0.28440757]\n"
]
}
],
"prompt_number": 127
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"x = np.eye(3, 4)\n",
"print x \n",
"print x[2, ...]"
],
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"from scipy.optimize import curve_fit\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"\n",
"def f(x, a, b, c):\n",
" \"\"\"Fit function y=f(x,p) with parameters p=(a,b,c). \"\"\" \n",
" return a * np.exp(-b * x) + c\n",
"\n",
"#create fake data\n",
"x = np.linspace(0, 4, 50)\n",
"y = f(x, a=2.5, b=1.3, c=0.5)\n",
"#add noise\n",
"yi = y + 0.2 * np.random.normal(size=len(x))\n",
"#call curve fit function\n",
"popt, pcov = curve_fit(f, x, yi)\n",
"a, b, c = popt\n",
"print \"Optimal parameters are a=%g, b=%g, and c=%g\" % (a, b, c)\n",
"#plotting\n",
"yfitted = f(x, *popt) # equivalent to f(x, popt[0], popt[1], popt[2]) \n",
"plt.plot(x, yi, 'o', label='data $y_i$')\n",
"plt.plot(x, yfitted , '-', label='fit $f(x_i)$')\n",
"plt.xlabel('x')\n",
"plt.legend()\n"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Optimal parameters are a=2.60556, b=1.51529, and c=0.575288\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 14,
"text": [
"<matplotlib.legend.Legend at 0x10a0160d0>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nRK5CYII=\n",
"text": [
"<matplotlib.figure.Figure at 0x10b9a2ad0>"
]
}
],
"prompt_number": 14
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"\n",
"x = np.random.rand(5,2)*10\n",
"a = np.matrix([ [1,x[0][0]], [1,x[1][0]], [1,x[2][0]] ])\n",
"b = np.matrix([ [x[0][1]], [x[1][1]], [x[2][1]] ])\n",
"yy = (a.T * a).I * a.T*b\n",
"xx = np.linspace(1,10,50)\n",
"y = np.array(yy[0]+yy[1]*xx)\n",
"\n",
"plt.figure(1)\n",
"plt.plot(xx,y.T,color='r')\n",
"plt.scatter([x[0][0],x[1][0],x[2][0] ],[x[0][1],x[1][1],x[2][1] ]) \n",
"plt.show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAXMAAAEACAYAAABBDJb9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAEo1JREFUeJzt3WuQlOWZh/EL5SCIiLJlUEEnMZvsriecWArIoU3clBrN\nysZDLGOiBg9ht3IQRNkt10nFGMVKmf2gwhpFQVmtcHCJAdaktNUoUUwgKPE4EoMJaioGXRc2jMJ+\neLqdYQDpnu7p532fvn5VU/bM9HTfZQ333HO//34GJEmSJEmSJEmSJEmSJEmSMmUGsBZ4BpgPDIhb\njiSpWi3AK3Q28PuAr0SrRpKaVN8av/4doAMYBLxf+u/vay1KktR4lwD/A7wJzItciySpBw4DfgMM\nI0z5i4HzolYkSU2o1jXLscATwJ9K7y8CxgL3lO9w2GGHbWtvb6/xaSSp6bQDH6/0znvU+GTPA6OB\ngUAf4CTCpN5ZTXs727Zty+3bNddcE72GZqzd+uO/WX/cN8Lmo2K1NvNfA3OBp4E1pY/9R42PKUmq\nUq1rFoCZpTdJUiS1TubJKxQKsUvosTzXDtYfm/XnS58GPMe20v5HklShPn36QBU92slckhJgM5ek\nBNjMJSkBNnNJSoDNXJISYDOXpATYzCUpATZzSUqAzVySEmAzl6QE2MwlKQE2c0lKgM1ckhJgM6/C\nli1b2LhxY+wyJGkHNvMKXXfdjQwePJQDDhjJqFEn8MYbb8QuSZI+YDOvwIMPPsh3vzuLjo6X6Oh4\nh7VrT+Ccc74auyxJ+kA9/mxc8las+AWbN38ROBiA9967nF/+8si4RUlSF07mFRg5cgQDB64A3i99\n5HGGDx8RsyRJ2o5/Nq4CHR0dfOYzn2fVqtfp06eFbdse58EH/4sxY8bELk1Soqr9s3E28wq9//77\nPPTQQ2zcuJGxY8dy8MEHxy5JUsJs5pKUAP+gsyQ1IZu5JCXAZi5JCbCZS1ICbOaSlACbuSQlwGYu\nSQmwmUtSAmzmkpQAm7kkJcBmLkkJsJlLUgJs5pKUgHo086HAAuA54DfA6Do8piSpCvX4s3H/DiwF\nziw93t51eExJUhVqPc98X2AV8LEPuY/nmUtSlRp9nvlHgT8Cc4BfAbcBg2p8TElSlWpds/QFWoF/\nBlYCPwCuAv6t653a2to+uF0oFCgUCjU+rSSlpVgsUiwWe/z1ta5ZhgMrCBM6wDhCMz+ty31cs0hS\nlRq9ZnkdWA98ovT+ScDaGh9TklSlevxB56OBHwL9gXbgQuDtLp93MpekKlU7mdejme+OzVySqtTo\nNYtqsWFD7AokJcJmHktHBxQKMG0abNkSuxpJOWczj6VfP3jiCXj5ZRg7Fl56KXZFknLMZh7TsGGw\neDFceGFo6HPnxq5IUk55ATQr1qyBc8+FY46BW26BIUNiVyQpIi+A5tVRR8HKlbD33tDaGm5LUoVs\n5lkyaBDMng3XXw+f+xzceCNs3Rq7Kkk54Jolq159Fc47LzT4uXNh+PDYFUlqINcsqTj0UCgW4fjj\nw9pl+fLYFUnKMCfzPCgW4fzz4eyz4brrYMCA2BVJ6mVO5ikqFGD1amhvN5Muaads5nlRzqRfdJGZ\ndEk7cM2SR2vWwBe/CJ/6FNx8s5l0KUGuWZrBUUfB00+HpIuZdEnYzPPLTLqkLlyzpMBMupQc1yzN\nqJxJHz06nO1iJl1qOk7mqSln0s85J2TS+/ePXZGkHnAyb3blTLrnpEtNxWaeIs9Jl5qOa5bUmUmX\ncsk1i7ZnJl1qCjbzZmAmXUqea5ZmYyZdygXXLPpw3TPpy5bFrkhSHTiZNzPPSZcyy8lclfOcdCkZ\nNvNmt7Nz0v1NSsod1yzqVM6kt7bCLbeYSZcics2initn0gcPDg39qadiVySpQk7m2rkFC2DKFJg2\nLbzt4c99qZGqncxt5tq1ciZ94ECYN89MutRArllUP+VM+tixZtKljHMyV2UeeSRk0s86y0y61ABO\n5uodEyfCqlWdmfQXX4xdkaQu6tXM9wRWAT+u0+Mpi8qZ9K9+FU44wUy6lCH1WrNcDnwK2Af4fLfP\nuWZJ0TPPhEz6qFFw661m0qU6i7FmGQGcCvywmidWzh15ZDgbfZ99zKRLGVCPZn4TcAXgAdnNZtAg\nmDUrnJN+2mkwc6bnpEuR1NrMTwPeJOzLncqb1Zlnhil9yRI4+WR4/fXYFUlNp2+NXz+WsCM/FdgL\nGALMBb7c9U5tbW0f3C4UChQKhRqfVplTzqR/5zshk37HHXDKKbGrknKjWCxSLBZ7/PX1nKYnAtOA\n07t93AugzaacST/zTPje98ykSz0QO2du11ZnJn3dOjPpUoPUs5k/wo6xRDWrYcNg0aLOTPpddyWZ\nSZ837x4+9rFRjBjxd3z729ex1QvAisSX86v3JZpJX7p0KWeddRmbNs0FhjBo0CVcffW5XHXV1Nil\nKQGx1yzSjrpm0o85JplM+t13L2LTphlAAWhl06bvM2/ewshVqVnZzNUY5Uz6zJlw+ulJZNKHDNmb\nPfbY0OUjGxg8eO9o9ai5uWZR4/3ud+Gc9L32Cue7HHhg7Ip6pL29ndbWE3j33fPYunUIgwbdzAMP\n3MeJJ54YuzQlwD9OoXx47z249lqYPTvXmfR169Zx22138Je/bOHcc8/i2GOPjV2SEmEzV748+ih8\n6Utm0qVuvACqfJkwwUy6VAc2c8VXzqRPnpx0Jl3qTa5ZlC2JZtKlarlmUb4lmkmXepuTubJr4UKY\nMgWmToVp02APZw81D9MsSksimXSpWq5ZlJZDDoGHHw4XRltbYdmy2BVJmeRkrvzwnHQ1ESdzpat8\nTvorr5hJl7qxmStfhg2DxYuTPyddqpZrFuWXmXQlzDWLmkfXTHprq5l0NTUnc6XBTLoSY85czctM\nuhLimkXNq3smfenS2BVJDeNkrjR5Trpyzslcgu3PSR8zxky6kmczV7rK56RffLGZdCXPNYuag5l0\n5YxrFmlnPCddiXMyV/Mxk64cMGcuVcJMujLONYtUCTPpSoyTuWQmXRnkZC5Va8IEWL0afvtbM+nK\nLZu5BLD//uHCaDmTfuedZtKVK65ZpO6efTZk0o86CmbNMpOuKFyzSLU64oiQQ99335BJf/LJ2BVJ\nu+VkLn2YRYvga1+Dyy+HK64wk66GMWcu1ZuZdEXQ6DXLSOBhYC3wLPD1Gh9Pyp7umfRly2JXJO2g\n1sl8eOltNTAY+CVwBvBcl/s4mSsdjzwC559vJl29rtGT+euERg7wLqGJH1TjY0rZNXFi5znpY8ea\nSVdm1PNqTgtwDOClf6WtfE765Mlm0pUZ9boAOhgoAtcC93f7nGsWpctMunpJtWuWvnV4zn7AQuBu\ndmzkALS1tX1wu1AoUCgU6vC0UgaUM+lTp4ZM+vz5cPzxsatSDhWLRYrFYo+/vtbJvA9wF/An4Fu7\nuI+TuZrDokVw2WUhkz59upl01aTROfNxwKPAGqDcsWcAy7vcx2au5lHOpA8YAPPmmUlXj/miISm2\n996Da6+F2bPh9tvh1FNjV6QcsplLWVE+J/0LX4DrrzeTrqp40JaUFeVz0l99NZyT/sILsStSwmzm\nUm/qek76uHFm0tVrXLNIjWImXVVwzSJlVTmTPmQIjBrlOemqKydzKYaFC2HKFM9J1y6ZZpHywnPS\n9SFcs0h50f2c9KVLY1ekHHMyl7LATLq6cTKX8qh7Jt1z0lUlm7mUFeVM+iWXeE66quaaRcoiM+lN\nzzWLlIIjjoCVK2Ho0HBOupl07YaTuZR1ixd3npNuJr1pmDOXUmQmvem4ZpFSZCZdu+FkLuXNY4+F\nKd1MetKczKXUjR/fmUkfPdpz0gXYzKV8KmfSL700nJM+Z46Z9CbnmkXKu66Z9FtvhX33jV2R6sA1\ni5K3YMFCRoz4G4YOPYgvf/lSNm/eHLukuMykCydz5cyKFSs46aR/ZNOm+4BDGTjwG5x99oHceeet\nsUvLhnIm/VvfgunTzaTnmJO5krZ06XI2b54MTAAOZfPmm1iy5IHYZWXHpEnw9NMhuvjZz8KGDbEr\nUoPYzJUrQ4cOoX//dV0+so599nFHvJ2RI0Mmffx4M+lNxDWLcuXPf/4zRx89hjffbKWjo4UBA25n\n/vzZnHHGGbFLy6bHHgvnpE+aBDfcYCY9R3w5v5K3ceNG5syZw9tvv8Opp57CcccdF7ukbHvrLZg8\nGdatg3vvhU9+MnZFqoDNXNKOtm2D2bPh6qth5ky44ALo04h//uopm7mkXTOTnhumWSTtWtdMemur\nmfSEOJlLzcpMeqa5ZpFUufXrwwmM/frBvHlw0EGxK1KJaxZJlRs5Eh56CCZMCGuXn/wkdkXqISdz\nSYGZ9ExxMpfUM+PHw6pVYfXiOem5YzOX1Gn//WHBAs9JzyHXLJJ2zkx6VDHWLCcDzwMvAVfW4fEk\nZUH3c9J/8YvYFelD1DqZ7wm8AJwE/B5YCZwLPNflPk7mUt6VM+nf/CZceaWZ9AZo9GR+HPAy8Fug\nA7gX+IcaH1NS1kyaFKb0ZcvCOel/+EPsitRNrc38YGB9l/dfK31MUmoOOSRk0svnpJtJz5S+NX59\nRfuTtra2D24XCgUKhUKNTyspir594Zpr4NOfNpNeZ8VikWKx2OOvr3VnPhpoI1wEBZgBbAVu6HIf\nd+ZSit56Cy6+GF55xXPSe0Gjd+ZPA38NtAD9gXOAJTU+pqQ8KGfSL7vMTHoG1CNnfgrwA0Ky5Xbg\ne90+72QupW7t2pBJP/JIM+l14qmJkuLYvBmmToXly2H+/HAkgHrMZi4pLjPpdWEzlxSf56TXzFMT\nJcXnOekN52QuqXf9/OdhSjeTXhUnc0nZMm4crF4Nr73mOem9yGYuqffttx/86Edm0nuRaxZJjVXO\npB9xBMyaZSZ9F1yzSMq2ww+Hp54KryD1nPS6cTKXFI+Z9F0yZy4pX8qZ9P79Ye5cM+klrlkk5cvI\nkfDww2bSa+RkLik7HnvMc9JLnMwl5df48bBqVVi9mEmvis1cUrZ0Pyf9jjvMpFfANYuk7GriTLpr\nFknpMJNeMSdzSflw//1w6aUhkz59Ouy5Z+yKepU5c0npWr8+pF369k3+nHTXLJLSVT4nvVAImfQH\nHohdUWY4mUvKp/I56WecATNnJpdJdzKX1By6n5P+/POxK4rKZi4pv/bbrzOTPn58U2fSXbNISkM5\nk3744TB7du4z6a5ZJDWnciZ92DAYNQrWrIldUUM5mUtKz5IlYY9+wAGxK+kxc+aSlADXLJLUhGzm\nkpQAm7kkJcBmLkkJsJlLUgJs5pKUAJu5JCXAZi5JCbCZS1ICamnmNwLPAb8GFgH5PtVGknKslmb+\nIHA4cDTwIjCjLhVlTLFYjF1Cj+W5drD+2Kw/X2pp5j8FtpZuPwmMqL2c7MnzN0Seawfrj83686Ve\nO/OLgKV1eixJUpX67ubzPwWG7+Tj/wL8uHT7X4EtwPw61iVJqkKtR+BeAFwMfAb4v13c52XgsBqf\nR5KaTTvw8UY80cnAWuCvGvFkkqRdq2UyfwnoD7xVen8FMKXmiiRJkiT1njy+wOhk4HnCbyBXRq6l\nWiOBhwlrsGeBr8ctp8f2BFbRebE9T4YCCwjf978BRsctpyozCN87zxCCDQPilrNbdwBvEOot258Q\n4HiR8JqYoRHqqtTO6s9sz/x7OmOQ15fesmxPwoXbFqAfsBr425gFVWk4MKp0ezDwAvmqv+xy4B5g\nSexCeuAuQmQXQmosM/8Yd6MFeIXOBn4f8JVo1VRmPHAM2zfDmcD00u0ryXbP2Vn9ueiZk4C7Yxex\nG2OA5V3ev6r0llf3ExJHeTIC+BlwIvmbzPclNMQ82p/ww38/wg+hHwMnRa2oMi1s3wyfBz5Suj28\n9H6WtbB9/V1V1DNjHLSVhxcYHQys7/L+a6WP5VEL4af+k5HrqNZNwBV0vso4Tz4K/BGYA/wKuA0Y\nFLWiyr0FfB/4HfAHYCPhh2refISwuqD03498yH2zrqKeWc9m/lPCT5bub6d3uU9eXmC0LXYBdTKY\nsLf9BvBu5FqqcRrwJmFfXutrIWLoC7QCt5T++7/k5ze7w4BvEoaAgwjfQ+fFLKgOtpHff9OZ7JkX\nAI8De0WuoxKj2X7NMoP8XQTtB/w34R9m3lxH+M1oHbCB0AznRq2oOsMJtZeNAx6IVEu1zgF+2OX9\n84GbI9VSjRZ2XLOUX71+IPlcs1xABntm3l5g1Jfw6qsWQpY+bxdA+xCa302xC6mDieRvZw7wKPCJ\n0u024IZ4pVTlaEICaiDh++gu4J+iVlSZFna8AFoewK4ioxcQu2hh+/oz2zNfAl4l/Nq8ivDrZ9ad\nQrgQ9DL5O953HGHXvJrO/+cnR62o5yaSzzTL0cBKMhgtq8B0OqOJdxF+y8uy/yTs97cQfqO7kHAh\n92fkI5rYvf6LyGfPlCRJkiRJkiRJkiRJkiRJkiRJklRP/w+f//dC6pduxQAAAABJRU5ErkJggg==\n",
"text": [
"<matplotlib.figure.Figure at 0x10c362410>"
]
}
],
"prompt_number": 18
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can use the multi-function data flyer to visualize the function: $f(x)=x^{4}-3x^{3}+2$.\n",
"http://shodor.org/interactivate/activities/MultiFunctionDataFly/"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# From calculation, we expect that the local minimum occurs at x=9/4\n",
" \n",
"x_old = 0\n",
"x_new = -1 # The algorithm starts at x=6\n",
"eps = 0.01 # step size\n",
"precision = 0.00001\n",
"def f(x):\n",
" return x**4-3*x**3+2\n",
"\n",
"def f_prime(x):\n",
" return 4 * x**3 - 9 * x**2\n",
" \n",
"while abs(x_new - x_old) > precision:\n",
" x_old = x_new\n",
" x_new = x_old - eps * f_prime(x_old)\n",
" \n",
"print(\"Local minimum occurs at\", x_new)"
],
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The plot of $f'(x)=4x^{3}-9x^{2}$ (blue line) shows that 2.25 is indeed a local minimum."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"x = np.linspace(-5,5,200)\n",
"y = x**4 - 3*x**3 + 2.0\n",
"#print y\n",
"ax = plt.gca()\n",
"plt.plot(x, y, 'r')\n",
"ax.set_xlim([-5, 5])\n",
"ax.set_ylim([-10, 20])\n",
"y = 4*x**3 - 9*x**2\n",
"plt.plot(x, y, 'b')\n",
"plt.grid(True)\n",
"#plt.axis('equal')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": [
"<matplotlib.figure.Figure at 0x111c99e90>"
]
}
],
"prompt_number": 73
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment