{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### Class demo 1: data generation, linear regression and gradient descent" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAO0UlEQVR4nO3df4hlZ33H8fdn3QQ6aI24U7FJZscWf7Vg2jjW0NZ2VahJhAbBQuOQ0KAMQSsW+kdKl5o/ZKEiLSKiyzRdFmGIf9SgsfgDodVtibGdSNxsslS2kV2XBHZiipbMH2WTb/+4M2ayzuy9d+fMvXOfeb9guHOe8+w534cZPvPsc849N1WFJGny7Rt3AZKkbhjoktQIA12SGmGgS1IjDHRJasT+cZ34wIEDNTs7O67TS9JEeuSRR56pqunN9o0t0GdnZ1leXh7X6SVpIiU5u9U+l1wkqREGuiQ1wkCXpEb0DfQk1yf51ySnkzye5GOb9EmSzyQ5k+Rkkht3plxJ0lYGuSh6EfjLqvp+klcAjyT5VlU9saHPLcDr177eDnx+7VWSNCJ9Z+hV9XRVfX/t+/8FTgPXXtLtNuAL1fMwcE2S13ZerSRNsqUlmJ2Ffft6r0tLnR5+qNsWk8wCvw1875Jd1wI/3rB9fq3t6e0UJ0nNWFqChQVYXe1tnz3b2waYn+/kFANfFE3ycuBLwF9U1c8u3b3JP/mF5/ImWUiynGR5ZWVluEolaZIdPvximK9bXe21d2SgQE9yFb0wX6qqBzbpch64fsP2dcBTl3aqqsWqmququenpTd/oJEltOnduuPYrMMhdLgH+EThdVX+/RbcHgTvX7na5CfhpVbncIknrZmaGa78Cg8zQfw+4A3hXkkfXvm5NcneSu9f6fA14EjgD/APw4c4qlKQWHDkCU1MvbZua6rV3pO9F0ar6dzZfI9/Yp4CPdFWUJDVn/cLn4cO9ZZaZmV6Yd3RBFMb4cC5J2nPm5zsN8Ev51n9JaoSBLkmNMNAlqREGuiQ1wkCXpEYY6JLUCANdkhphoEsajx1+lOxe5BuLJI3eCB4luxc5Q5c0eiN4lOxeZKBLGr0RPEp2LzLQJY3eCB4luxcZ6JJGbwSPkt2LDHRJozc/D4uLcPAgJL3XxUUviG6Td7lIGo8dfpTsXuQMXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjoktQIA12SGmGgS1IjDHRJaoSBLkmN6BvoSY4luZDk1Bb7X5nkq0l+kOTxJHd1X6YkqZ9BZujHgZsvs/8jwBNVdQNwCPi7JFdvvzRJ0jD6BnpVnQCevVwX4BVJArx8re/FbsqTJA2qizX0zwJvBp4CHgM+VlUvbNYxyUKS5STLKysrHZxakrSui0B/D/Ao8KvAbwGfTfLLm3WsqsWqmququenp6Q5OLUla10Wg3wU8UD1ngB8Bb+rguJKkIXQR6OeAdwMkeQ3wRuDJDo4rSRpC388UTXI/vbtXDiQ5D9wLXAVQVUeBTwDHkzwGBLinqp7ZsYolSZvqG+hVdXuf/U8Bf9RZRZKkK+I7RSWpEQa6JDXCQJekRhjoktQIA12SGmGgS1IjDHRJaoSBLkmNMNAlqREGuiQ1wkCXpEYY6JLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjoktSIvoGe5FiSC0lOXabPoSSPJnk8yXe6LVGSNIhBZujHgZu32pnkGuBzwB9X1W8Cf9JJZZKkofQN9Ko6ATx7mS4fAB6oqnNr/S90VJskaQhdrKG/AXhVkm8neSTJnVt1TLKQZDnJ8srKSgenliSt6yLQ9wNvBd4LvAf4myRv2KxjVS1W1VxVzU1PT3dwaknSuv0dHOM88ExVPQc8l+QEcAPwww6OLUkaUBcz9K8A70iyP8kU8HbgdAfHlSQNoe8MPcn9wCHgQJLzwL3AVQBVdbSqTif5BnASeAG4r6q2vMVRkrQz+gZ6Vd0+QJ9PAZ/qpCJJ0hXxnaKS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjo0m6wtASzs7BvX+91aWncFWkCdfFwLknbsbQECwuwutrbPnu2tw0wPz++ujRxnKFL43b48Ithvm51tdcuDcFAl8bt3Lnh2qUtGOjSuM3MDNcubcFAl8btyBGYmnpp29RUr10agoEujdv8PCwuwsGDkPReFxe9IKqheZeLtBvMzxvg2jZn6JLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqRN9AT3IsyYUkp/r0e1uS55O8v7vyJEmDGmSGfhy4+XIdkrwM+CTwzQ5qkiRdgb6BXlUngGf7dPso8CXgQhdFSZKGt+019CTXAu8Djg7QdyHJcpLllZWV7Z5akrRBFxdFPw3cU1XP9+tYVYtVNVdVc9PT0x2cWpK0rotPLJoDvpgE4ABwa5KLVfXlDo4tSRrQtgO9ql63/n2S48A/G+aSNHqD3LZ4P/Bd4I1Jzif5YJK7k9y98+VpT1pagtlZ2Lev97q0NO6KpInQd4ZeVbcPerCq+rNtVSMtLcHCAqyu9rbPnu1tgx+iLPXhO0W1uxw+/GKYr1td7bVLuiwDfbfba8sP584N1y7p5wz03Wx9+eHsWah6cfmh5VCfmRmuXdLPGei72V5cfjhyBKamXto2NdVrl3RZBvputheXH+bnYXERDh6EpPe6uOgFUWkAXbyxSDtlZqa3zLJZe8vm5w1w6Qo4Q9/NXH6QNAQDfTdz+UHSEFxy2e1cfpA0IGfoktQIA12SGmGgS1IjDHRJaoSBLkmNMNAlqREGuiQ1wkCXpEYY6JLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIa0TfQkxxLciHJqS32zyc5ufb1UJIbui9TktTPIDP048DNl9n/I+APq+otwCeAxQ7qkiQNqe+HRFfViSSzl9n/0IbNh4HrOqhLkjSkrtfQPwh8faudSRaSLCdZXllZ6fjUkrS3dRboSd5JL9Dv2apPVS1W1VxVzU1PT3d1akkSAyy5DCLJW4D7gFuq6iddHFOSNJxtz9CTzAAPAHdU1Q+3X5Ik6Ur0naEnuR84BBxIch64F7gKoKqOAh8HXg18LgnAxaqa26mCJUmbG+Qul9v77P8Q8KHOKpIkXRHfKSpJjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjoktQIA12SGmGgS1IjDHRJaoSBLkmNMNAlqREGuiQ1wkCXpEYY6JLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RG9A30JMeSXEhyaov9SfKZJGeSnExyY/dlSpL6GWSGfhy4+TL7bwFev/a1AHx++2VJkobVN9Cr6gTw7GW63AZ8oXoeBq5J8tquCpQkDaaLNfRrgR9v2D6/1vYLkiwkWU6yvLKy0sGpJUnrugj0bNJWm3WsqsWqmququenp6Q5OLUla10Wgnweu37B9HfBUB8eVJA2hi0B/ELhz7W6Xm4CfVtXTHRxXkjSE/f06JLkfOAQcSHIeuBe4CqCqjgJfA24FzgCrwF07VawkaWt9A72qbu+zv4CPdFaRJOmK+E5RSWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaMVmBvrQEs7Owb1/vdWlp3BVJ0q7R941Fu8bSEiwswOpqb/vs2d42wPz8+OqSpF1icmbohw+/GObrVld77ZKkCQr0c+eGa5ekPWZyAn1mZrh2SdpjJifQjxyBqamXtk1N9dolSRMU6PPzsLgIBw9C0ntdXPSCqCStmZy7XKAX3ga4JG1qcmbokqTLMtAlqREGuiQ1wkCXpEYY6JLUiPQ+43kMJ05WgLNX+M8PAM90WM4kcMx7g2PeG7Yz5oNVNb3ZjrEF+nYkWa6quXHXMUqOeW9wzHvDTo3ZJRdJaoSBLkmNmNRAXxx3AWPgmPcGx7w37MiYJ3INXZL0iyZ1hi5JuoSBLkmN2NWBnuTmJP+V5EySv9pkf5J8Zm3/ySQ3jqPOLg0w5vm1sZ5M8lCSG8ZRZ5f6jXlDv7cleT7J+0dZ304YZMxJDiV5NMnjSb4z6hq7NsDv9iuTfDXJD9bGfNc46uxKkmNJLiQ5tcX+7vOrqnblF/Ay4L+BXwOuBn4A/MYlfW4Fvg4EuAn43rjrHsGYfxd41dr3t+yFMW/o9y/A14D3j7vuEfycrwGeAGbWtn9l3HWPYMx/DXxy7ftp4Fng6nHXvo0x/wFwI3Bqi/2d59dunqH/DnCmqp6sqv8Dvgjcdkmf24AvVM/DwDVJXjvqQjvUd8xV9VBV/c/a5sPAdSOusWuD/JwBPgp8CbgwyuJ2yCBj/gDwQFWdA6iqSR/3IGMu4BVJArycXqBfHG2Z3amqE/TGsJXO82s3B/q1wI83bJ9faxu2zyQZdjwfpPcXfpL1HXOSa4H3AUdHWNdOGuTn/AbgVUm+neSRJHeOrLqdMciYPwu8GXgKeAz4WFW9MJryxqLz/NrNn1iUTdouvcdykD6TZODxJHknvUD//R2taOcNMuZPA/dU1fO9ydvEG2TM+4G3Au8Gfgn4bpKHq+qHO13cDhlkzO8BHgXeBfw68K0k/1ZVP9vh2sal8/zazYF+Hrh+w/Z19P5yD9tnkgw0niRvAe4Dbqmqn4yotp0yyJjngC+uhfkB4NYkF6vqyyOpsHuD/m4/U1XPAc8lOQHcAExqoA8y5ruAv63eAvOZJD8C3gT8x2hKHLnO82s3L7n8J/D6JK9LcjXwp8CDl/R5ELhz7WrxTcBPq+rpURfaob5jTjIDPADcMcGztY36jrmqXldVs1U1C/wT8OEJDnMY7Hf7K8A7kuxPMgW8HTg94jq7NMiYz9H7HwlJXgO8EXhypFWOVuf5tWtn6FV1McmfA9+kd4X8WFU9nuTutf1H6d3xcCtwBlil9xd+Yg045o8DrwY+tzZjvVgT/KS6AcfclEHGXFWnk3wDOAm8ANxXVZve/jYJBvw5fwI4nuQxessR91TVxD5WN8n9wCHgQJLzwL3AVbBz+eVb/yWpEbt5yUWSNAQDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXi/wEhL89cv1y9sgAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt \n", "\n", "\n", "# generating equispaced points \n", "x = np.linspace(0,1, 6)\n", "\n", "betaTrue = np.asarray([1,1])\n", "\n", "Xtilde = (np.vstack((np.ones((1, len(x))), x.reshape(-1,1).T))).T\n", "\n", "t = np.matmul(Xtilde,betaTrue.reshape(-1,1))\n", "\n", "# adding gaussian noise \n", "tnoisy = t + np.random.normal(0,0.15,len(t)).reshape(-1,1)\n", "plt.scatter(Xtilde[:,1], tnoisy, c='r')\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "maxIter = 10\n", "eta = 0.1\n", "\n", "k = 0\n", "\n", "beta = np.random.normal(1,.1, (2,1))\n", "\n", "# gradient descent iterations\n", "for k in np.arange(maxIter):\n", " \n", " grad = -np.matmul(Xtilde.T,tnoisy) + np.matmul(np.matmul(Xtilde.T, Xtilde), beta) \n", " \n", " beta = beta - eta*grad\n", " \n", "\n", " \n", "xtest = np.linspace(0,1,10)\n", "Xtilde_test = (np.vstack((np.ones((1, len(xtest))), xtest.reshape(-1,1).T))).T\n", "t_test = np.matmul(Xtilde_test,betaTrue.reshape(-1,1))\n", "\n", "plt.plot(xtest, t_test) \n", "plt.scatter(Xtilde[:,1], tnoisy, c='r')\n", "\n", "predictions = np.matmul(Xtilde_test,beta.reshape(-1,1))\n", "\n", "plt.plot(xtest, predictions)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# same with points distributed along a parabola\n", "\n", "x = np.linspace(-2,1,20)\n", "\n", "t = x**2 + x + 1\n", "\n", "plt.plot(x, t)\n", "\n", "\n", "xi = np.linspace(-2,1,10)\n", "\n", "epsilon = np.random.normal(0,.1,len(xi))\n", "\n", "ti = xi**2 + xi + 1 + epsilon\n", "\n", "plt.scatter(xi, ti, c= 'r')\n", "\n", "plt.show()\n", "\n" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 1. , -2. , 4. ],\n", " [ 1. , -1.66666667, 2.77777778],\n", " [ 1. , -1.33333333, 1.77777778],\n", " [ 1. , -1. , 1. ],\n", " [ 1. , -0.66666667, 0.44444444],\n", " [ 1. , -0.33333333, 0.11111111],\n", " [ 1. , 0. , 0. ],\n", " [ 1. , 0.33333333, 0.11111111],\n", " [ 1. , 0.66666667, 0.44444444],\n", " [ 1. , 1. , 1. ]])" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "xi1 = xi\n", "xi2 = xi**2\n", "\n", "Xtilde = np.vstack((np.ones((1, len(xi))), xi1.reshape(-1,1).T))\n", "\n", "Xtilde = np.vstack((Xtilde, xi2.reshape(-1,1).T)).T\n", "\n", "Xtilde\n" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.94017014],\n", " [1.04532901],\n", " [1.02221728]])" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "maxIter = 10\n", "eta = 0.01\n", "\n", "k = 0\n", "\n", "beta = np.random.normal(1,.1, (3,1))\n", "\n", "\n", "# solving the linear regression problem through gradient descent on \n", "# the features x_1 = xi, x_2 = xi^2\n", "\n", "for k in np.arange(maxIter):\n", " \n", " grad = -np.matmul(Xtilde.T,ti.reshape(-1,1)).reshape(-1,1) + np.matmul(np.matmul(Xtilde.T, Xtilde), beta).reshape(-1,1) \n", " \n", " beta = beta - eta*grad\n", " \n", " " ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# displaying the solution by first generating the features xi and xi^2 for eq\n", "\n", "xtest = np.linspace(-2,1,20)\n", "\n", "xtest1 = xtest\n", "xtest2 = xtest**2\n", "\n", "Xtilde = np.vstack((np.ones((1, len(xtest2))), xtest1.reshape(-1,1).T))\n", "\n", "Xtilde = np.vstack((Xtilde, xtest2.reshape(-1,1).T)).T\n", "\n", "prediction = np.matmul(Xtilde,beta.reshape(-1,1))\n", "\n", "\n", "plt.plot(xtest1.reshape(-1,1), prediction)\n", "plt.scatter(xi, ti, c= 'r')\n", "plt.show()\n", "\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }