Skip to content

Instantly share code, notes, and snippets.

@jaywhy13
Created November 28, 2017 02:21
Show Gist options
  • Save jaywhy13/a300a5ccae069fd57bc5feca6ca28665 to your computer and use it in GitHub Desktop.
Save jaywhy13/a300a5ccae069fd57bc5feca6ca28665 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Review in Python\n",
"\n",
"Say we have a dataset like the one below with housing prices."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10b710510>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import csv\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"lines = open(\"assignments/machine-learning-ex1/ex1/ex1data1.txt\").read().splitlines()\n",
"lines = [line.split(\",\") for line in lines]\n",
"data = np.array(lines, dtype=float)\n",
"orig_x = data[0:,0]\n",
"orig_y = data[0:,1]\n",
"\n",
"plt.scatter(orig_x,orig_y)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We need a hypothesis function that will predict a value for $y$ given a value for $x$. Specifically, we want a function of the form:\n",
"\n",
"$$h_\\theta(x) = \\theta_0 + \\theta_1x$$\n",
"\n",
"The vectorized form of this is:\n",
"\n",
"$$h_\\theta(x) = X\\theta$$\n",
"\n",
"We need values for $\\theta_0$ and $\\theta_1$. But for the time being, let's assume that we have values, we need a way to measure how close we are. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Cost Function\n",
"We use the cost function to determine how close we are to fitting our model. We use the concept of the squared difference between $h_\\theta(x)$ and $y$ to give us an indication. Here's the formula $J(\\theta)$.\n",
"\n",
"$$J(\\theta) = \\frac{1}{2m} \\sum\\limits_{i=1}^{m}(h_\\theta(x) - y)^2$$\n",
"\n",
"The vectorized form of this is:\n",
"\n",
"$$J(\\theta) = \\frac{1}{2m} (X\\theta - y)^2$$\n",
"\n",
"Ok, so that function helps us determine how well our hypothesis is doing. We need to **minimize** the squared difference. In order to do this, we use a technique called **Gradient Descent**. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Gradient Descent\n",
"With Gradient Descent, we're essentially differentiating the cost function with respect to $\\theta$. By differentiating, we are minimizing the value i.e. trying to make it as low as possible. \n",
"\n",
"$\\theta_0 := \\theta_0 - \\alpha\\frac{1}{m} \\sum\\limits_{i=1}^m(h_\\theta(x_i)-y_i)$\n",
"\n",
"$\\theta_1 := \\theta_1 - \\alpha\\frac{1}{m} \\sum\\limits_{i=1}^m(h_\\theta(x_i)-y_i)x^i$\n",
"\n",
"The vectorized form of this is:\n",
"\n",
"$\\theta_0 := \\theta_0 - \\alpha\\frac{1}{m} X^T(X\\theta - y)$\n"
]
},
{
"cell_type": "code",
"execution_count": 114,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"alpha = 0.01\n",
"m = len(data)\n",
"n = 1\n",
"X = np.ones((m,2))\n",
"# Make X into a mxn matrix, set x0 to be a 1 dim vector with just 1's\n",
"X[:,1] = orig_x\n",
"y = orig_y.reshape(m,1)\n",
"theta = np.array([0,0]).reshape(n + 1, 1)\n",
"\n",
"def h(X, theta):\n",
" return X.dot(theta)\n",
"\n",
"def cost_function(X, y, theta):\n",
" return (1.0 / (2*m)) * np.sum(np.square((h(X, theta) - y)))\n",
"\n",
"def gradient_descent(X, y, theta, alpha=0.01):\n",
" m = len(X)\n",
" return theta - (alpha / m) * X.T.dot(h(X, theta) - y)\n",
"\n",
"def plot(X, theta, index=1):\n",
" m = len(X)\n",
" x = X[:,1]\n",
" y = h(X, theta).reshape(m,)\n",
" plt.subplot(220 + index)\n",
" plt.scatter(orig_x, orig_y, c='k')\n",
" plt.plot(x,y)\n",
"\n",
"def run_gradient_descent(X, y, theta, iterations=100, alpha=0.01):\n",
" cost_values = []\n",
" iteration_values = range(iterations)\n",
" num_plots = 5\n",
" reporting_threshold = iterations / num_plots \n",
" for i in range(iterations):\n",
" theta = gradient_descent(X, y, theta, alpha=alpha)\n",
" cost = cost_function(X, y, theta)\n",
" cost_values.append(cost)\n",
" if i % reporting_threshold == 0:\n",
" print(\"Cost after {} runs is: {}\".format(i+1, cost))\n",
" if i > 0:\n",
" index = (i / reporting_threshold)\n",
" plot(X, theta, index=index)\n",
" plt.show()\n",
" plt.plot(cost_values, iteration_values)\n",
" plt.show()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So now we can toy with different values while running gradient descent."
]
},
{
"cell_type": "code",
"execution_count": 116,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Cost after 1 runs is: 6.73719046487\n",
"Cost after 101 runs is: 5.47636281727\n",
"Cost after 201 runs is: 5.17363455117\n",
"Cost after 301 runs is: 4.96260649312\n",
"Cost after 401 runs is: 4.81550149412\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD8CAYAAABn919SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnX2YHFWV/7+nOzOQzgRhKjHEkKnmVYxvwWQRRRDNysLA\nCu5LxO3wZEEdmA3+wi67JtCirNoaZMUdFdFxZZlNt7woCGwSUBZRwLclQSDBwPJi9wDmdQYkkyFC\nps/vj+6a9HRXVVd1VVfd6j6f56lnZu7trjrd/e0zt845915iZgiCIAjRJxa2AYIgCII/iEMXBEFo\nEcShC4IgtAji0AVBEFoEceiCIAgtgjh0QRCEFkEcuiAIQosgDl0QBKFFEIcuCILQIkwL8mKzZs3i\nZDIZ5CWFNmLTpk27mXl20NcVXQvNxqm2A3XoyWQSGzduDPKSQhtBRIUwriu6FpqNU21LyEWIBLlc\nDslkErFYDMlkErlcLmyTBMEX/NR2oCN0QWiEXC6Hvr4+jI+PAwAKhQL6+voAAKlUKkzTBMETfmtb\nRuiC8qTT6UnBG4yPjyOdTodkkSD4g9/aFocuKM/w8LCrdkGICn5rWxy6oDw9PT2u2gUhKvitbXHo\ngieCSFZmMhkkEokpbYlEAplMxvdrCQIQXBLed20zc2DHokWLWGgdstksJxIJBjB5JBIJzmazTbmW\nrutMRKzruuk1AGzkAPXMouuWJEhdG9fzS9vEAW5Bt3jxYpZ63dYhmUyiUKgtj9V1Hfl8PnB7iGgT\nMy8O+rqi69ZCNV0DzrUtIRehYdwkdKSOXIgKbhOVKmlbHLrQME4TOkatbaFQADNP1tqKUxdUxE2i\nUjVti0MXGsZpQseq1nblypVNt1EQ3OImUamatsWhCw2TSqUwODgIXddBRNB1HYODgzUz3KxuVUdG\nRmSULiiHU10D6mlbkqJC07FKMgH+JpokKSoEjWrarjtCJ6L5RHQ/Ef2OiJ4gopXl9m4iupeIni7/\nPMwPw4XWw66mNszZnqJtwSuqadtJyGU/gMuYeQGAkwCsIKIFAFYDuI+ZjwVwX/lvQaghlUpB0zTT\nvpBne4q2BU+opu26Dp2ZtzHzI+Xf9wDYCmAegHMADJUfNgTg3GYZKUSfgYEB5WZ7irYFP1BJ266S\nokSUBHACgN8AmMPM28pd2wHM8dUyoaVwk2gKA9G20CgqadtxUpSIugD8HECGmW8nopeZ+dCK/peY\nuSbWSER9APoAoKenZ5FVAkEQvNJoUrQRbYuuhSDxdaYoEXUAuA1AjplvLzfvIKK55f65AHaaPZeZ\nB5l5MTMvnj078O0eBcGWRrUtuhb8Yv9EEf+3Yw/8qDh0UuVCAL4HYCszX1vRdReA5eXflwO407M1\nghAgom0hTH75zG4kV6/HMem7cfrXHsCzu8Y8n9PJFnQnAzgfwGYierTcdgWANQBuJaKPAygAWOrZ\nGkEIFtG2ECije1/Dypt/iwef3j2l/a/eNQ/HvHGm5/PXdejM/BAAsuhe4tkCQSiTy+WQTqcxPDyM\nnp4eZDIZpFIp3LNlGy7OPgIAWH3m8bj4/Uf7cj3RthAEa7M5XPnLPwGHTM2tHzQthtwn3o3FyW7f\nrhWJqf8qrWYmNIfqRY627ZuG1b+aQHL1+klnDgAnzD/U5izRQnTd2tz68PNIrl6PK7ccOsWZ7/31\nLfjC217GU18801dnDjgLuYSK7PjeHqTTaew/ZB70T32tpm9+93R8Z9liLHjTISFY1hxE163Jrj1/\nwp9l/se0b9uNK/HajmcBAFfmH8D5y/z/nJVfy0XFxeaFA1iFSZwyMvYnLPqi+Rdg522fx75nH0ax\nWHR0riit5SK6Vhu3uk6uXm/avufRezD642/WtBORY12XH+9I28qP0GXHd3VpdJQ5UWSc9OX7sGvP\nn2r6Xh/9A/7w3YtQ2vmr5OBaEdG1ujjV9Zq7n8S3f/6s6Tm2/OtfoOugaUgmV2DUpL9ZywIo79B7\nenpMRzKy43v4WK0FnU6nTR261SgGAK54yx/xj//wySnnC3tpgGYiulYXO133nvu3OOEL95o+7+/f\nm8RVH37rlLZMJjPlnwPQXF0r79CDfkME5zgZZf7dd3+NXz47Yvq4uy45Ge844kCSc8Y09hS+iRKi\na3Ux07W+ah0AmDrz/JqzLM9l6DcoXSsfQwe8x2mF5mAZBz7to8C7zzd9ziL9MNzW/96m2BOlGDog\nulYVQ9dvOGUZDn3veaaPuWPFyVgYYMWVU21HwqG3O6p+8StjjdMOPRzzLvoPy8fajWL8ImoOXVBP\n26/tL+K4z9xt2jercwIbP//hgC0q0TJJ0XZH5fK2v/3ox5DebD1KefILZ+DgjniAFglRQiVt2+V3\ncOv/Q+YLnw/9++YEGaErjorlbXbiv+fSU3D84eHUi8sIPVqEre37n9yJC2582LSv79SjcEXvW5pu\ng1NkhB4h7G47VSlvs3Pif/nON+EbHzshQGuEqKCitu20HERosJmIQw+ZeredYZa3XfPjJ3Hd/eZ1\ntkD0xS80F5W0/YF/+xl+v3uvad+Dn/4A5ncnTPuihoRcQqbebWf1lwIolbc1a0eUrdtewZkDD1r2\nq+zEJeSiFmFre3hkHKdec79p37Fv7MK9//R+z9cICgm5WKBaVr3ebWcQdaz7J4o4Jm2e2QeAx686\nHYcc3OHb9YTmINou0cohlXq0lUNXKatu2BOLxTAxMVHTV3nbmUqlmmKfnfBv+PvF+ODxspVmVFBJ\n28Y/Fqu7/2Zo+/P//Tvc8Ivfm/YNXXgi3n9ce+wq1VYhl7Cz6pWY3W4aNDOkcmx6A16fMP/MP/Dm\n2fjPC070/ZpB0c4hF1W0badrwF9t73t9AsdfeY9lfyuNxiXkYoIqFSOA+XoRABCPx3135tfd/wyu\n+fFTlv2tJPx2RRVtW+kaKP1zaXZI5f++eCY6p0Vim4em0FYOXaUFkay+aMVi0Rdn/uyuMSz56s8t\n+8WJtxaqaNtK10Tk6U5hw+Zt+IfcI6Z9l/75sbj0z49r+NytRFv9K8tkMkgkppYnGQsiBb17jNUX\nzc0XsNrmtdkckqvXI7l6vakzf+TKDyG/5ixx5i2IlbZ7e3sjp2vggLYNPZs5c0PL4swPEHmH7tYR\nlzZ6LxGLxbB8eWlz98rtz4yEUjPFb/fPxQmVW7b1fPq/gfOuK211VcV1f/euSeF3z+j0xXah+bjR\ntZGErAx1xONxvOc978HQ0FCkdA0Ap37+ztKSEuddV9P3myuWyKDEDmYO7Fi0aBH7STab5UQiwSjt\nhsAAOJFIcDabNX1sR0fHlMcC4M7OTtY0raYdAOu67qu9Zjbpus5ExLqum9pthX7hAOur1pkef3P9\nL5potboA2MgB6pkV0XX1Y42DiCKj68LuvZZ6nrPsmkDsVhmn2o50lYubzL7VY+1wu01Us/nRb1/A\nP97ymGV/4eqzlbM5SFqlyqWddG2X4CxcffaUv1WyO2jaosrFTWa/kWy/CrvHPD86jlO+Yj7bDagV\nvQo2C95odV3/yw8eww82vWDad9clJ+PD71uoRII3ikTaobvJ7Fs9FgA0TcOrr76qzO4xzIwjL99g\n2f/IlR/C3Xf8YHLiiIHseNMa+KVroDSqrbwLD0sjr+x7He+46ieW/ZUxcdnNyQNO4jJ+HWHHGq1i\n6Nls1lM82y+sYoj6qnX8w43Pm76msG1WCUgMveY5/f39oWrETtP7J4qWzxNtT8WptuvG0InoBgBn\nA9jJzG8rt3UDuAVAEkAewFJmfqneP49mzKhzs35FLpfDypUrMTJS2uNS0zQMDAyEtt5FLpez3SDi\n+MNn4p5LTw3QomjjNobul7ZV0HU6nUahUEA8HsfExIRvk3ga4cJrb8NPdx5s2rfqjOPRf9rRAVsU\nfXzbgo6ITgUwBuC/KkT/FQCjzLyGiFYDOIyZV9W7mApTpFXgK/c8iW/9TJal9ZsGHLov2hZd1w8T\nZt7+ciR2/FEV35KizPwAESWrms8BcFr59yEAPwNQ16G3M8/tGsMHbWZuGslNXdcBceiBINr2jl2V\nygvXLcfEWOluOK3r4tADoNGJRXOYeVv59+0ALJflI6I+ItpIRBt37dpV98RBz9hsJsw8OdPNzJm/\n+N2LUbj67CmVKoVCoSVee4RxpG23ugZaR9v3bd0xqetqiq+NT2racOZASdet8NpVx3OVCzMbExis\n+gcBDAKlW1O7c6m0BKgX7EYtnzzlSKTPWoBkMon9o+alW8wc2dfeSthp242ugdbQtpN1xpPJpGk/\nEU1W40TxtUcFRxOLyrel6yrijE8BOI2ZtxHRXAA/Y+Y31ztPvVijKkuANoLtruGojYvXW2bUIAqv\nXRUamVjkh7adxNCjqm07Xd94wZ/htDe/cUqbma6rSycNVH/tKtHsiUV3AVgOYE35550NnmcKqiwB\n6pQv370V3/n5c5b9dsnN6t1arP6xqvraW5i21/aOV/bh3V+6z7Lfja7t6uRVfO1Rp24MnYhuAvAr\nAG8moheI6OMoif1DRPQ0gD8v/+0Zv1ZqaybDI+OT8UMzZ/7sl3qRX3MWMm9/uW7MMJVKIZ/Po1gs\nlpKhJqj02lsN0fZUDF2bOfNGdZ3P50XbQeKkWN2vo94EDDcTKppN9cQGuwkSjw6/5Pl1qPTaowoU\nnlik0udbqe0jll9rqetVP3zMl9eg0muPKk61raTwmzVDzOm5DQHaOfHD//ozls/Xdb2hVe5kdpw3\nVHbozAppe0aXrbb91rUb+wRzIuvQK/FTBE5HCXZC11etqxGymY1Wy5YSUcP2C/VR3aEb+O3c/NB2\nfOYs0bXCONW2ssvn5nI5XHjhhXjttdcm2zo7O3HDDTfYljpZTYMeGxubnPJfia7rmPv3A9i2zzo/\nXL2iYSWJRKJmEaHp06dbXkuy+s0jCsvnNqpr47lutX3yJV/FL3abT8MHrLUtulYL36b++4kb4c+a\nNctUPF1dXdA0zXSNC6elgADQMTuJN134Tcv+wjXnAsX9tuewKseyWr3R782fhalEwaE3omvAnbYB\nQF+1zrLPboBih+g6PCLv0Cu3irOjUlBOFvu3E/rIj6/D2KN3T16/0feGiLB27VrHiysJ/hAFh96I\nrgFnG1nYaXv0p/+BPQ/fMWlDI9oWXYdH2zh04MAtXywWMxWqndAB6xGLruuud4OptEcIllZy6EBp\nRLx7924AsNT29KMW441/e5XlOfzUtug6PJxqO/RNoq3Wt9A0zfE5DGFW1rXqq9ZNHqbPufps9L6y\nHrh5hWm/IV6rGlrDRq8b4gqti5m23eh6ZGRk8vtQXbNtaNvMmfuh7ep/PKLriOAkc+rXUV0NkM1m\nubOz03LDCbMNKawOInJVoQKA4/H45HOr+zRNs7Wj3sYYUqYVPFCoysVK2/39/a50HY/HmYhY0zRX\n+vaqbauNMUTX4eBU26EKX9M0UxFrmsbMB8RjJ/iD5r3FVuR00AzHX57qwyj9ymazU2w1vhBWyESK\ncFDJodtpu9IpWpUCTg5UOu3nQwSpbdF1eDjVdqgxdLt4oq7rk4kXs7Isu7j4vuHN2HHT5d4NRmNx\nw6guxBR1VIqh22mbiCYTisuWLTN9jJ2+/3DDJXh9V95T4h5wr0fRdXhEIinqJkEENJ7c9AIRoVgs\nunqOVQKrkXMJzomKQzeorvUOWt9u9Si6Do9mr7boC5qmmdbkVhKGE6+kkQWE3OzaLrQmTrRtOPNm\n1Iw7wa0eRdfqE6pDHxgYwPLlyzExMTGl/fDz/w0Hvel4y+c124kbdHZ2NpTZz2QyNZNApEqgvbDS\ntoGdEx/b8lOMrL+2WaYBaEzbomv1CdWhA6XbuImJCdBBM9Bz6S2Wj3tpaAVe2e6+JtwLM2fObGjS\nhNma0DIBo/0wtG1wsP5OzDnP2vkFNVABGtO26Fp9Qo2hG0kWq9HKvue3YMf3VwdlXg0SG4wWKsXQ\nKxOIdqPx19f2YceOHZYj+WYh2o4WkYihm+1YwsUJDF9zTmA22C06JLFBoVGGh4cRO3gm5q+8ybQ/\niNG4aLv9CNWhd3d3Y2RkJNBbTeDAWha6rk/G/yQ2KPhJd3c3XhrbN6Wt2Trv6OjAIYccgtHR0clw\nCCDabiucFKv7dTidWOTnkUgkLGe9VSIz4KIPIjCxyM+js7OTNU1ztKmFaDvaONV2qDF0q7pWpxhL\njhYKBdNJFpqmYWBgQJI2bYJKMXSv2o7FYigWizW6rr67FG23B5FYnMtrHG/v3r3I5/NgZqxduxa6\nroOIoOs6stksdu/eLYIXQqG7u9vT840RV7Wu165dC2ZGPp8XbQs1hDpCz+VyOP/88xseyciUY6ES\nlUboVhtZOEW0LVQSiRF6KpXydFva29sLwHoJXkEIi9HRUU/P7+3tFV0L7nESaPfrMEse1VtN0e4w\nVoaTFeAEZrWSol50bWhbdC0YONV26BtcZDIZ14t0GYyMjGDlypU1+yyOj48jnU77YZ4gNEQmk0Fn\nZ2fDzx8ZGRFdC67x5NCJ6AwieoqIniGihqd0NurQAVjGKasnLcntq+AGP7TNTchPmU3GE20LkzgZ\nxpsdAOIAngVwFIBOAI8BWGD3nCDrdXVdn7yGhGXaA/gUcnGr7WaEXJzomlm03S441baXEfqJAJ5h\n5ueY+TUANwNwPWffSyWAQb39D9PptNy+Cm7wrG2zkbRXzGZ4iraFSrw49HkAnq/4+4VyW+Aw85Ra\n3cHBwSk1ulZfrmZ86YSWwLO2/VwrxUrXgGhbmErT13Ihoj4AfYC5yLu6ujA2Nub0XKZxyXo1u7Iw\nv+A39XRtt71cNV1dXdi7d69oW/CMlxH6iwDmV/x9RLltCsw8yMyLmXnx7Nmza05y0EEH1b2QpmnI\nZrO4+OKL64ZXzMhkMkgkEq6fJ7QtdbVdT9epVAozZsywvYih629/+9umM0tF24JrnATazQ6URvfP\nATgSBxJHb7V7jlnyyG7X88odyM2SP0TE/f39jpIKskBR6wP/kqKutG2m67I9loedrqu1Xw/Rduvj\nVNtehd8L4P9QqghI13u822qAyoy+1eOqs/5C++KXQ2eX2rZy6PF43FSz8Xh88jGia8EJTrXtqQ6d\nmTcw83HMfDQzN3SPZ3drWJnYkeSPECR+aNtqF6LKdtG14CehzxRNpVLQNM20rzKxY5XkkeSPoCq6\nrtdtF10LfhK6Q7ea1Vad2JHkjxA1ent76ybxRdeCrziJy/h1VMca3SaEJPkj2AGFFudyk8QXXQv1\ncKrtUNdDr9wZvRJZC1poBJXWQxdtC34SifXQJSEktCqibSEMlNyCThJCQtQRbQthEKpDl4SQ0KqI\ntoUwCH0LusHBQduFtQQhioi2hTAINClKRLsA1GaKSswCsDswY9wj9nkjCPt0Zq5dWKXJiK6bjuo2\nKqPtQB26HUS0MYwKBaeIfd5Q3b5mofrrVt0+QH0bVbIv9IlFgiAIgj+IQxcEQWgRVHLog2EbUAex\nzxuq29csVH/dqtsHqG+jMvYpE0MXBEEQvKHSCF0QBEHwgDh0QRCEFiF0h05EeSLaTESPEtHG+s9o\nPkR0AxHtJKItFW3dRHQvET1d/nmYYvZdRUQvlt/HR4moN0T75hPR/UT0OyJ6gohWltuVeQ+DQDVt\ni64926e8rkN36GU+wMwLVanlBHAjgDOq2lYDuI+ZjwVwX/nvsLgRtfYBwNfK7+NCZt4QsE2V7Adw\nGTMvAHASgBVEtABqvYdBoZK2b4To2gvK61oVh64UzPwAgNGq5nMADJV/HwJwbqBGVWBhnzIw8zZm\nfqT8+x4AWwHMg0LvYTsiuvZGFHStgkNnAD8hok1E1Be2MTbMYeZt5d+3A5gTpjEWXEJEj5dvXZUI\nZxBREsAJAH6DaLyHfhIFbUfhMxFdO0QFh/4+Zn4XgDNRuoU5NWyD6lHeQUS1es/rARwNYCGAbQC+\nGq45ABF1AbgNwKXM/Epln6Lvod9EStuKfiaiaxeE7tCZ+cXyz50AfgTgxHAtsmQHEc0FgPLPnSHb\nMwVm3sHME8xcBPBdhPw+ElEHSqLPMfPt5Wal30O/iYi2lf5MRNfuCNWhE9EMIppp/A7gdABb7J8V\nGncBWF7+fTmAO0O0pQZDUGU+ghDfRyrtjPw9AFuZ+dqKLqXfQz+JkLaV/kxE1+4IdaYoER2F0sgF\nAKYB+D4zh74DABHdBOA0lJbF3AHgcwDuAHArgB6UlkpdysyhJHAs7DsNpdtSBpAHcFFFXC9o+94H\n4EEAmwEUy81XoBRvVOI9bDYqalt07dk+5XUtU/8FQRBahNBj6IIgCII/iEMXBEFoEcShC4IgtAjT\ngrzYrFmzOJlMBnlJoY3YtGnT7jD2FBVdC83GqbYDdejJZBIbN4a+RpHQohCR1UbNTUV0LTQbp9qW\nkIsQCXK5HJLJJGKxGJLJJHK5XNgmCYIv+KntQEfogtAIuVwOfX19GB8fBwAUCgX09ZWWRkmlUmGa\nJgie8FvbMkIXlCedTk8K3mB8fBzpdDokiwTBH/zWtjh0QXmGh4ddtQtCVPBb2+LQBeXp6elx1S4I\nUcFvbYtDFzwRRLIyk8kgkUhMaUskEshkQl/2R2hRgkrC+65tZg7sWLRoEQutQzab5UQiYaz/zAA4\nkUhwNpttyrV0XWciYl3XTa8BYCMHqGcWXbckQerauJ5f2g50ca7Fixez1Ou2DslkEoVCbXmsruvI\n5/OB20NEmziEvTtF162FaroGnGtbQi5Cw7hJ6EgduRAV3CYqVdK2OHShYZwmdIxa20KhAGaerLUV\npy6oiJtEpWraFocuNIzThI5Vre3KlSubbqMguMVNolI1bYtDFxomlUphcHAQuq6DiKDrOgYHB2tm\nuFndqo6MjMgoXVAOp7oG1NO2JEWFpmOVZAL8TTRJUlQIGtW0XXeETkTzieh+IvodET1BRCvL7d1E\ndC8RPV3+eZgfhguth11NbZizPUXbgldU07aTkMt+AJcx8wIAJwFYQUQLAKwGcB8zHwvgvvLfglBD\nKpWCpmmmfSHP9hRtC57wS9t+RUrqOnRm3sbMj5R/3wNgK4B5AM4BMFR+2BCAc32xSGhJBgYGlJvt\nKdoW/KBRbe+fKOKqu55AcvV6HHn5Bjy7a8yzLa6SokSUBHACgN8AmMPM28pd2wHMsXhOHxFtJKKN\nu3bt8mCqEGXcJJrM2LlnH1b98HE8tX1PU+xzq23RtWDgVtu/370Xf5b5HxyTvhs3/jIPADg00YGk\nNsOzLY6TokTUBeDnADLMfDsRvczMh1b0v8TMtrFGSR4Jbrn14efx6dsen/z7k6ccifRZC0wf22hS\n1Ku2RdeCE9b+uoAr79gype0v3joHX/voQiQ67bemcKptRxtcEFEHgNsA5Jj59nLzDiKay8zbiGgu\ngJ1OziUI9dj5yj588r824rEX/jil/Yre4/HJU47y9VqibaGZDI+M49Rr7q9pHzhvIc5ZOM/369V1\n6EREAL4HYCszX1vRdReA5QDWlH/e6bt1Qlvx19f/EpsKL01pO3LWDAxdcCJ6tITFsxpHtC00iy9v\n2IrvPPBcTfuvLv8g5r5hetOu62SEfjKA8wFsJqJHy21XoCT2W4no4wAKAJY2x0Shldny4h9x9jce\nqu347e344vkfxLJlZzXz8qJtwTdefW0Cb/nsPTXtBAbf8ikMFwp4z809yGQyTds6sa5DZ+aHAJBF\n9xJ/zTEnl8shnU5jeHgYPT3NfUOEYPjIt36B3w6/XNO+/abL8afhzQCAix66GUTN2zc0bG2LrluD\nS2/+Le549A817V/6yNvBzzwY6H64ys8Urd5EFSiVBLmpkBDU4JaHh7Hqts017XPfcDC2fefjnpcs\njdJMUdF1tGFmHHn5BtO+Rz/7IRya6ATg31K8TrWtvENXcW1i4QBORpnJ1etNn3tz30k46ajSpIxY\nLGY6uYKIUCwWHdkSJYcuulYbK13fs2U7Ls5uMn1Ofk1teNAPXZcf71+VS5jIBsHqUj3KrLydjB17\nCi6/vXY0DgC//3IvSvnIA/T09Jg6uFbdN1R0rS5muk5vPhRpk4HJV/7mHVi6eL7luYLWtfIOvd2+\n6FHCbOnQ2Z+6FenNADZPdeb/fPpxuOSDx1qeK5PJmIYgWnXfUNG1uhi6ntY9D/M++R3Txzz7pV7E\nY1bplwMErWvlHXq7fdGjhDGa7Fp4JrS/WGH6GLPRuBlGmKZdkoSia4U57zroJs378o9i+81pV6cK\nWtfKx9ABqQZQEbukEB67E/m7B4M1CNGKoQOia5WYKDKOvsJczy98azkm9ozInqJ+kUqlkM/nUSwW\nkc/n2070Ku1Z+C8/eGxyMaFqClefjV3fWIrMsveHYFn0aHddA+Fr+0sbtiK5er2pMy9cfTYKV5+N\niT0jkbl7Uj7k0u7YJR6DcgB2o/HjZ76OJ797KYaHh6HruowyBceEqW2ryqvLPnQcPrXk2NLdk65H\n7u4pEiGXdibM8rbLbn0Mtz3ygmmf09h4kEQt5NLuBK1ty1nJUFPPlbRUyKXVsbvtDLq8jZmRXL0e\nydXra5z56QvmIL/mLOTXnKW0+AV1UEHbhp6rnXk8Ri2nZwm5hEy9286gytuspi8D6o9eBDUJU9uv\n7S/iuM/cbdr34Kc/gPnd/i/2pgIScgmZeredzZwibhcbP/Nth+P6ZYs8nT9oJOSiFmFo+59/8Bh+\nuMk8TGg2kzMqtMxM0Van3m1nM+pYL/n+I1j3+DbTPhmNC34RpLatkpz/+uG3Yvl7k67PF1XaLoYe\ndplUtS2xmPlHUHnb6Ud5W2VsvNqZn/WOuS0XS2xHVNG2YYfV3b9f2v7NcyOTmq7m91/uRX7NWW3l\nzIE2G6GrUAJYbcvExERNn581rytyj2D9ZhmNtzqqaNssjFKJH9q2Go0ffsjB+PUVgazorSxtFUNX\naYU7K1vi8TiGhoY8fQntYuMffueb8PWPndDwuVWmnWPoqmjbyg7DlkZDKlabRwDA/6aX4I0zD3Z9\nzighMXQTVFrhzuqaxWKxYWd+8dpNuOeJ7aZ9MhpvbVTRttX1iKihfywX/Of/4v6ndpn2RTnJ2Sza\nyqGrtMJGUyXcAAAPzklEQVSdX7bYjcb/6oR5uPajCxuyT4gWqmjbLzuswipf++g78ZETjmjItnag\nrZKimUwGHR0dU9o6OjqQyWQCTyhlMhkkElNrYd3EFz935xbLNVWMhJA48/bBStu9vb2R0fWvbZKc\nmbe/jPyas8SZ14OZAzsWLVrEfpPNZlnXdSYi1nWds9ms5WP7+/sZwJSjs7OT+/v7OZFITGlPJBK2\n5wradmbmYrHI+qp1pofWe2kgNqsMgI0coJ5ZEV1ns1nWNK1G2/F4nDs7O5XXtZWmZ52zKlC7Vcap\ntiOdFHUzMSGXy+H88883LaWKx+Om1SaqbAd24Y0P46dP7jTtK1x99pS/VbE5DFolKepW13ZVJWao\noJE/vvo63vmvPzHv/OFlKDz7VE2zCnaHRcvsKWqHm8y+XfbdCrf7/vlJscg4ymJ95k998Bj8yxlv\n8WWvwlaiVRx6K+v6w998CI+/8EfTPiPJ6dc+nK1EW1S5uMns22X7rUboYSRLz/j3B/Dk9j2mfZVZ\n/W8okgQT/McvXVsRhkaskpzfW74YS94yZ0qbKgneKBLppKjVB2zWbvVYIkJfX5+nBKVXisUDszir\nnfnHTuyZnMVZidekqqAufugaKCVFOzs7p7QFqZG1v8pbJjkNTVc7c0C07Yl6QXYANwDYCWBLRVs3\ngHsBPF3+eZiTgL3fyaNsNus4mWn2WCLi/v7+yX43iRw/OHr1f1smhJwQhs0qA5dJUb+0rZquAbCm\naZzNZkPRiJWmP3TtzxyfQ7Q9FafadiL6UwG8q0r0XwGwuvz7agBXO7mYCtUAYYtk/4R1pcrhf/PZ\ntheuFxpw6L5oW3TN/PzoXktdJ95wmOjaI0617SgpSkRJAOuY+W3lv58CcBozbyOiuQB+xsxvrnce\nFaZIh8UxV2zA/qL5e11ZqdLOmXyvNJIU9UPb7axrq9g4ILr2k2YnRecws7Hi03YAtYEwwXYn8X0v\n/A47cp+uaQ9jGQJhCqLtOjBbz07edceXMf7UL2raRdfB4DkpWr4dsBzmE1EfEW0koo27dpmvyVCJ\nKkuAesFIBJk5cyMZdPBD15k+NxaLRfq1txJ22narayD62r7wxoctZycbup69z3xzie7u7ki/9qjQ\n6Ah9BxHNrbgtNZ/1AoCZBwEMAqVbU7uTqrIEaCPsnyjimLT5llfvPrIbt1z0niltmUzGdEKIUT4Z\npdfeYjjSthtdA9HWtlVY5dg3duHef3r/lDYzXXd0dGDPnj0YGRkBEK3XHjUajaFfA2CEmdcQ0WoA\n3cxcGz+ool6sUZUlQN1gF0OstxpcLpeb3K0lFospPVs1CvgUQ3etbScx9Khp+4k//BFnff0h076t\nnz8D0zvjls+t1HVPTw/GxsYmnXklqr52FfFtpigR3QTgNACzAOwA8DkAdwC4FUAPgAKApcw8Wu9i\n9YQflRlidqPxwxId+O1nT3d9zqi8dpVx69D90rYThx6Vz9fLAMWKqLx2lfEtKcrMH7Po8n1rEJVn\niOVyOaQ3H2rZXy326lFKvYX9VX7trYpo29DpZ4DzvmnaXz2T062uAXVfeyui1ExRlWaITSawpnUi\nuXq9qTOfe/B+01mcRry0UCiAmSdjhnaJIJVeu+A/Kn2+hraPWDFU0rWJMzebydmIrgG1XnvL46RY\n3a/DyQSMykkSmqaxpmm+TZhwOgEjm81aTpLQV62bnI2n67rp83Vdr5m5Z/d4t/YJ5kDx5XONzxfl\npW0NTfjxOfuh7bkfv64punZjn2COU20rKXzmkgCq13Lu7OxsWAhOplO/+tp+S7H3XPajGiETkalQ\nichU+ETUkO2CM1R36Mz+69o4Zz1t3/7I89YDlFhcdK04TrWt7PK5s2bNMs2Md3V1QdM0yxieEeMr\nFAqTqyhqmobR0VGYvVZd14HzzGvCgdr1xivRNA2vvvpqzbrV06dPl6x+CERh+dxGdQ0Ep+0ZM2aA\nmUXXChH55XPNhAMAY2NjGBsbA1Bbz1pd62uUAZqdi6YdhJ7LbrO8vp0jN9i3b19NHfn4+DimT5+O\nRCJR84WQmKHQiK6B2jp2O20j3gH9n39kep1dd67B+JPm5YgGe/furWkTXUcDZUfobnaoN0YIThb7\n11ets+yrdOJEZDrqcQIRYe3ata6rAQRvRGGE7kbXmqZh9+7dAJxtZNFsbYuuw8OptkOvcrGaDq1p\nmuNzGEK3Wi+CDpoBfdU6S8EXrj67ZkTOzKVb1gbo6elBKpVCPp9HsVhEPp8X0bchZtp2o+uRkZHJ\n74PdWihBaVt0rT6hOnS7MqiBgYGaXcztMNZAqcQQes+lt9Q8vnD12eh9ZT1w8wrT88XjcWQyGVvh\na5pmWY4V9XU7BG9YaXvp0qWudL18+XJTbc/+q89YOvLC1X/pWdvVdxKi64jgJHPq11FdDVCvDKoy\n0z5jxgzTx1YfsemHOCo5REXpmFX2PpFIcH9/P3d0dNT0GZUJZtUAbjYoEPwDClW52Gm7ujTXia4n\nnx+Qtvv7+0XXCuFU26HG0O3iiZV25XI5LFu2zPbcTuOHbtF1HZlMBitXrpxMQGmahoGBAcvbzait\n29EqqBRDd6rtmTNnTiZDrYh3deOIFf9l2jdy99cx9vhPXFh7ALfaFl2Hh29rufhJtfCnTZtmuiBV\nLBbD/Pnz6y7uE5txKOZfkrW8nhdHbtDIehOydkU4qOTQrbQNlHRgJBTtBir1BileEveGHW70KLoO\nj0iULVoJvlgsTo4ETEcETRqNm9HIehOydoVgpW0AU2LqZjjVt9fBmFs9iq7VJ1SHrut63VIsg3iX\nhiNWDFn2++3IgcZrbM3WhJZ63fbCibYr9RHkIAVoTI+ia/UJ1aH39vbi+uuvt31M0EI3ICIsX768\nobIs4zlSr9u+ONE2EI6+G9W26Fp9Qo2hWyVZYok3YP6nrMuhmunIK5FkT7RQKYZuNxFomnYE5n3i\n26Z9Vnty+o1oO1pEIoZePVkirNG4FbKxrdAoZtpRSd+i7dYkVIduJFnmX3oLYgfNMH1Ms4Vut+iQ\nJHuERqlMIIblyEXb7UeoM0V7e3tLRlQ5c2O6sl9iX7JkCXRdBxFB0zRomgYigq7rGBwcxMDAgCzA\nL/hKb28vYgfPtJjJ6Y++4/H4FC339/dP6ly03Z6EOkLfsGEDAKDwb+ci1jEdxX17XD0/FovhsMMO\ns1zBLh6PY2hoyHHSRpI9gl9s2LAB4Km12X6Oxo1JQaJtYQpOppP6dVRPkbaaluz00DSNmZ0t8C+0\nPlBo6r8XXRvaFl0LBk61HWrIxWscb3S0tBl7KpXC4OBgze2mjEKEsIjH456ePzo6KroWXBNq2aKT\nNVrsqFwvWhBUKlt0s+65GaJtoZJIrIeeSqVcrQ9thSzpKahGo2vpVyK6FlzjJC7j12EWa8xms55i\njRJnFAygUAzdbDNot4foWjBwqu3QdyzyykUXXWS6r2c6nQ7JIkEowR7DmaJrwS2eHDoRnUFETxHR\nM0S0upFzeBWo2Ya2QO1MOLl9FdzgVdvpdBqvv/6673aZzfAUbQuTOBnGmx0A4gCeBXAUgE4AjwFY\nYPecZpR3WR3GrkfMUtbYLsCnkItbbZvp2mtJrhNdM4u22wWn2vYyQj8RwDPM/BwzvwbgZgDnuD2J\n1/IuM6pnwqXTabl9FdzgWdvNmFpvNsNTtC1U4sWhzwPwfMXfL5TbpkBEfUS0kYg27tq1q+YkdhsB\nOEXTNNtaXauFiGSBIsGCutqup2u/ptbH43HbGnTRtlBJ05OizDzIzIuZefHs2bNr+p2WLSYSCSxZ\nssR0N/KBgQHk83kUi0Xk8/ka0VuNlmSBIqFR6uk6lUqhq6ur7nkSiQT6+/tNvweJRAJDQ0OWugZE\n28JUvDj0FwHMr/j7iHKb72iahsHBQVxwwQXo7u6uaa83cy6TycgCRYIbfNE216lyMfR78sknTzp/\nIwTpdFaoaFuYgpNAu9mB0sJezwE4EgcSR2+1e47b5FE8Hp9M7nhN/mSzWdZ1nYmIdV2XpFELAv+S\noq60babrsj228yeY/UlqirZbH6fa9jT1n4h6Afw7SlUBNzCz7bDA7c4ulbuJWz1Odl4RDPyc+u9G\n22a6Lp/D8vzG9050LTghkKn/zLyBmY9j5qPrOXMrMpmMpfAr44CS/BGCxA9tW+WHKttF14KfKDFT\ndMaM2t2KquOAkvwRosbSpUtr2jo6OjAwMDD5t+ha8JNQHXoul0NfXx/GxsamtJslOyX5I0SJXC6H\noaGhKW1EhE984hOia6F5OAm0+3VUJ490XXc0G85Akj+CHVBocS432hZdC/Vwqu1Q10OPxWKmpV2V\nyVBBcIpK66GLtgU/icR66BI/FFoV0bYQBqE6dIkfCq2KaFsIg9B3LJI9E4VWRLQthEGoMXRB8BOV\nYuiC4CdOtR2oQyeiXQDMp4UCswCovCuu2OeNIOzTmbl2pawmI7puOqrbqIy2A3XodhDRxjBGV04R\n+7yhun3NQvXXrbp9gPo2qmSfEjNFBUEQBO+IQxcEQWgRVHLog2EbUAexzxuq29csVH/dqtsHqG+j\nMvYpE0MXBEEQvKHSCF0QBEHwQOgOnYjyRLSZiB4lIiWKeYnoBiLaSURbKtq6ieheInq6/PMwxey7\nioheLL+Pj5Y3aAjLvvlEdD8R/Y6IniCileV2Zd7DIFBN26Jrz/Ypr+vQHXqZDzDzQlVKfwDcCOCM\nqrbVAO5j5mMB3Ff+OyxuRK19APC18vu4kJk3BGxTJfsBXMbMCwCcBGAFES2AWu9hUKik7RshuvaC\n8rpWxaErBTM/AGC0qvkcAMYC10MAzg3UqAos7FMGZt7GzI+Uf98DYCuAeVDoPWxHRNfeiIKuVXDo\nDOAnRLSJiPrCNsaGOcy8rfz7dgBzwjTGgkuI6PHyrasS4QwiSgI4AcBvEI330E+ioO0ofCaia4eo\n4NDfx8zvAnAmSrcwp4ZtUD3KC86rVh50PYCjASwEsA3AV8M1ByCiLgC3AbiUmV+p7FP0PfSbSGlb\n0c9EdO2C0B06M79Y/rkTwI8AnBiuRZbsIKK5AFD+uTNke6bAzDuYeYKZiwC+i5DfRyLqQEn0OWa+\nvdys9HvoNxHRttKfiejaHaE6dCKaQUQzjd8BnA5gi/2zQuMuAMvLvy8HcGeIttRgCKrMRxDi+0hE\nBOB7ALYy87UVXUq/h34SIW0r/ZmIrt0R6sQiIjoKpZELAEwD8H1mDn0HACK6CcBpKK2itgPA5wDc\nAeBWAD0oray3lJlDSeBY2HcaSrelDCAP4KKKuF7Q9r0PwIMANgMw9lu7AqV4oxLvYbNRUduia8/2\nKa9rmSkqCILQIoQeQxcEQRD8QRy6IAhCiyAOXRAEoUUQhy4IgtAiiEMXBEFoEcShC4IgtAji0AVB\nEFoEceiCIAgtwv8HOpinyqTx3nAAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10c23bc50>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10b9abbd0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 500 iterations, alpha=0.01\n",
"run_gradient_descent(X, y, theta, iterations=500, alpha=0.01)"
]
},
{
"cell_type": "code",
"execution_count": 121,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Cost after 1 runs is: 27.9476197468\n",
"Cost after 101 runs is: 5.86436796527\n",
"Cost after 201 runs is: 5.81523545057\n",
"Cost after 301 runs is: 5.76784361121\n",
"Cost after 401 runs is: 5.72213005529\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10b3779d0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10af6c490>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 500 iterations, alpha=0.001\n",
"run_gradient_descent(X, y, theta, iterations=500, alpha=0.001)"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"### Useful Links\n",
"\n",
"[Numpy Cheatsheet](https://s3.amazonaws.com/assets.datacamp.com/blog_assets/Numpy_Python_Cheat_Sheet.pdf)\n",
"\n",
"[Matplotlib Cheatsheet](https://s3.amazonaws.com/assets.datacamp.com/blog_assets/Python_Matplotlib_Cheat_Sheet.pdf)\n"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nSAj6/7k6prAuWIDlAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10c825350>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import math\n",
"\n",
"limit = 300\n",
"X = np.arange(-1, 1, 0.2)\n",
"y = [-math.log(1/(1+math.exp(-x))) for x in X]\n",
"\n",
"plt.plot(X, y)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10ae1d610>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"X = np.arange(-1, 1, 0.2)\n",
"y = [math.exp(x) for x in X]\n",
"plt.plot(X, y)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.13"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment