{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "List of keyboard shortcuts:\n", "1. \"Ctrl-Enter\" - Run a cell\n", "2. \"Shift-Enter\" - Run a cell and go to the next cell\n", "3. \"Enter\" - Start editing cell\n", "4. \"Escape\" - Stop editing cell\n", "5. \"x\" - delete current cell\n", "6. \"a\" - create a new cell above\n", "7. \"b\" - create a new cell below\n", "\n", "**Make sure you run every cell when you first load this file.**\n", "\n", "**If you change a value in a cell, you need to run it for the effect to take place.**\n", "\n", "**If the computation is taking too long, you can interupt the computation in the Kernel menu above.**" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from IPython.display import clear_output\n", "x,y = var('x y')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The cell below generates a random set of points in the range $-5\\leq x \\leq 5$. " ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "#------Generate random Data-----------\n", "sigma = 2\n", "T = RealDistribution('gaussian', sigma)\n", "S = RealDistribution('uniform', [-5,5])\n", "A,B,C= 10,2,3\n", "data=[]\n", "for i in range(50):\n", " x= S.get_random_element()\n", " y= A + B* x+ C* x **2 + 5 * T.get_random_element()\n", " data.append([x,y])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Once you ran this code with the random input from above, go to http://math.jhu.edu/~vzakharevich/teaching/fall2020/data.php and insert the result in the cell below. The data will be in the range $-15 \\leq x \\leq 15 $. You will probably need to decrease the step size in order for it to work. Also, don't forget to change the $x$ bounds when you are graphing your result at the bottom of the page" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "#---------Insert data from http://math.jhu.edu/~vzakharevich/teaching/fall2020/data.php -------\n", "#data=[]" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/usr/lib/python3/dist-packages/sage/plot/graphics.py:2327: MatplotlibDeprecationWarning: \n", "The OldScalarFormatter class was deprecated in Matplotlib 3.3 and will be removed two minor releases later.\n", " x_formatter = OldScalarFormatter()\n", "/usr/lib/python3/dist-packages/sage/plot/graphics.py:2352: MatplotlibDeprecationWarning: \n", "The OldScalarFormatter class was deprecated in Matplotlib 3.3 and will be removed two minor releases later.\n", " y_formatter = OldScalarFormatter()\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "Graphics object consisting of 1 graphics primitive" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#--------Plot Data--------------\n", "scatter_plot(data)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "#--------- Define the functions used in the gradient descent--------\n", "a,b,c,x,y = var('a b c x y')\n", "SE(a,b,c,x,y)= (a+ b * x + c * x **2 -y)**2 #Square error function\n", "MSE(a,b,c)= sum([ SE(a,b,c,x,y) for x,y in data])/len(data) #Mean square error function\n", "diff(a,b,c,x,y)= (a+ b * x + c * x **2 -y) # Function used in the definition of the negative gradient of MSE\n", "def neg_grad(a,b,c): #The negative gradient of the mean square error function\n", " return vector((-2 * sum([ diff(a,b,c,x,y) for x,y in data])/len(data), -2 * sum([ diff(a,b,c,x,y)* x for x,y in data])/len(data), -2 * sum([ diff(a,b,c,x,y)* x ** 2 for x,y in data])/len(data)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**When you run the algorithm below, the value of the mean square difference should be decreasing. That is the function which we are trying to minimize. If it is not decreasing, you should decrease the step size of the algorithm**" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The value of the mean square difference at the current step 1000 is 67.159234: \n", "The predicted function is f(x)=10.9316 + 2.5943 x + 2.8174 x^2 \n" ] } ], "source": [ "#-------------Running the algorithm-----------\n", "delta_t = 0.005 # Change this value to adjust the step size\n", "starting_point= vector((0,0,0)) # Change this value to adjust the starting point\n", "number_of_iterations = 1000 #Change this value to adjust the number of iteration of the algorithm\n", "\n", "c=[starting_point]\n", "for i in range(number_of_iterations):\n", " new_point= c[i] + delta_t * neg_grad(*tuple(c[i]))\n", " c.append(new_point)\n", " clear_output(wait=True)\n", " print(\"The value of the mean square difference at the current step %d is %f: \"% (i+1, MSE(*c[i])))\n", "print (\"The predicted function is f(x)=%.4f + %.4f x + %.4f x^2 \" % (c[number_of_iterations-1][0], c[number_of_iterations-1][1], c[number_of_iterations-1][2]))\n", "prediction=c[number_of_iterations]\n", "predicted_function(x)= prediction[0]+ prediction[1]*x+ prediction[2]* x**2" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/usr/lib/python3/dist-packages/sage/plot/graphics.py:2327: MatplotlibDeprecationWarning: \n", "The OldScalarFormatter class was deprecated in Matplotlib 3.3 and will be removed two minor releases later.\n", " x_formatter = OldScalarFormatter()\n", "/usr/lib/python3/dist-packages/sage/plot/graphics.py:2352: MatplotlibDeprecationWarning: \n", "The OldScalarFormatter class was deprecated in Matplotlib 3.3 and will be removed two minor releases later.\n", " y_formatter = OldScalarFormatter()\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk4AAAGFCAYAAAALnnwfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAA9hAAAPYQGoP6dpAABS6ElEQVR4nO3de1zUdfbH8ddAamRAly1QV8tcd9PSLdPKEHa3q20pEGbaZbvRhkAKlpX91ra7JRpUcklp20rL0g2R2qUtazcGrcyym5StWrom1HYR0vHS8P398QkSBRxgZr5zeT8fj3lQwzBzAJk58/mczzkOy7IQERERkQOLsDsAERERkWChxElERETEQ0qcRERERDykxElERETEQ0qcRERERDykxElERETEQ0qcRERERDykxElEAo7DiHE4HA67YxER2dtBHbitOmWKiF9s27aN2NhYtm3bZncoIhI+PHqjphUnEREREQ8pcRIRERHxkBInEREREQ8pcRIRERHxkBInEQkYhYWFDB48mBEjRtgdiohIqxyW5fFhOZ2qExG/qK+vbz5VFxMTY3c4IhKEnnoKtm+HjAyPv0Sn6kRERCT87NwJt9wCK1d6/76VOImIiEhImT8f6urgT3/y/n0rcRIREZGQsXMn3H8/XH45DBzo/ftX4iQiIiIho7QUamt9s9oESpxEREQkRDStNl12mW9Wm0CJk4iIiISIxx6DrVt9t9oESpxEREQkBOzcCTNnwsSJ8Mtf+u5xlDiJiIhI0Js/36w23X67bx9HiZOIiIgENZcL7rsPrrjCt6tNoMRJREREglxJCXz1FcyY4fvHUuIkIiIiQWv7dnOS7qqrYMAA3z+eEicREREJWkVF8O23vj1JtzclTiIiIhKUGhrggQfg2mvh2GP985hKnERERCQozZ1rkqfbbvPfYypxEhERkaBTXw95efDHP0Lfvv57XCVOIiIiEnQeegh27IDp0/37uEqcRCRgFBYWMnjwYEaMGGF3KCISwL79FubMgUmToHdv/z62w7IsT2/r8Q1FRLqivr6e2NhYtm3bRkxMjN3hiEiAuf12mD0bNmyA+Hiv3a3DkxtpxUlERESCxtdfQ0EBZGV5NWnymBInERERCRpz5kBjI9x8sz2Pr8RJREREgsJXX8HDD8MNN8BRR9kTgxInERERCQp5eeBwwE032ReDEicREREJeHV1puFlTg4ceaR9cShxEhERkYA3cyZ07w5Tp9obhxInERERCWibNkFxMUybBocfbm8sSpxEREQkoN11F8TGwpQpdkcCB9kdgIiIiEhbPvkE/vpX04bg0EPtjkYrTiIiIhLA/vxnM1bl+uvtjsTQipOIiIgEpDVr4NlnobQUDj7Y7mgMzaoTkYCjWXUiAnDhhbBuHaxdCwf5fqnHo1l1WnESERGRgFNdDS++CIsW+SVp8phWnEQk4GjFSSS8WRb89rewbRu88w5E+KciWytOIiIiEnxefhlefx1eeMFvSZPHtOIkIgFHK04i4cuyYMQI6NEDnE4zm85PtOIkIsGlsLCQwsJC3G633aGIiE3KymD1avjXv/yaNHlMK04iEnC04iQSntxuGDIE+vaFl17y+8NrxUlERESCx8KFUFMDTz5pdyRtC7CSKxEREQllLpeLuro6XC5Xi+t37zZdwi+6CIYPtyk4DyhxEhEREZ9zOp2MS0sjOjqa+Ph4oqOjGZeWRnV1NWC6g3/+Odx9t82BHoC26kRERMSniouLycrKYlD/fuRlpzOgTy/Wb9lKaUUliYmJ5OcXcf/9GVx+OQwebHe07VNxuIgEHBWHi4QOp9NJUlIS2RePJX/K9UTs1ZipsbGRnIISCpdUEBlZxaefJnDssbaF6lFxuBInEQk4SpxEQse4tDRq1qzm/aeKWyRNTRobGxk8cRJWj+GsW7fEhgibeZQ4qcZJREREfMLlcrG0vJz0MaNbTZoAIiIiyEgdzYYNS/crGA9ESpxERETEJ+rr63G73Qzo06vd2x3XJx632019fb2fIus8JU4iIiLiEzExMURGRrJ+y9Z2b7dhSy2RkZFBsTWvxElERER8IioqipTkZEorKmlsbGz1No2NjZRWVJKamkJUVJSfI+w4JU4iIiLiMzm5udRs3ETuQ4/ulzw1naqr2biJnJxcmyLsGPVxEhEREZ8ZNWoURUVFZGZmsvztNaSPGc1xfeLZsKWW+eWVfPz5JoqKikhISLA7VI9oxUlEOsTtdjNjxgz69+9PVFQUAwYM4O6772bv1iaWZXH77bfTq1cvoqKiOPvss/n0009tjFpE7JSRkUFVVRWDhw1n2txSUm6+kxsfLuWEU4ZTVVVFRkaG3SF6TCtOItIhDzzwAMXFxTzxxBOccMIJvP3221x99dXExsYyefJkAGbNmsXDDz/ME088Qf/+/ZkxYwbnnXcea9eu5eCDD7b5OxAROyQkJJCQkMCTT7q48sp6XnophnPOCfyapn2pAaaIdMiFF15IXFwcjz32WPN1aWlpREVFsWDBAizLonfv3tx4443cdNNNAGzbto24uDj++te/MmHChAM+hhpgioSm3bth0CAzVqWiwu5o9qMGmCLifWeccQbLly9n3bp1ALz33ns4nU7OP/98ADZu3EhtbS1nn31289fExsZy2mmnsXLlylbvc9euXdTX17e4iEjomTcPPvsMZs60O5LO01adiHTIrbfeSn19PccffzyRkZG43W7uvfdeLrvsMgBqa2sBiIuLa/F1cXFxzZ/b18yZM7nzzjt9G7iI2KqhAe66C668Ek480e5oOk8rTiLSIc899xwLFy7k6aef5p133uGJJ55g9uzZPPHEE52+z+nTp7Nt27bmy+bNm70YsYgEgtmzob4egv09klacRKRDpk2bxq233tpcqzRkyBA+//xzZs6cyZVXXkl8fDwAdXV19Or105iFuro6TjrppFbvs0ePHvTo0cPnsYuIPWprYc4cmDwZ+va1O5qu0YqTiHTIjh079hvWGRkZ2dzYrn///sTHx7N8+fLmz9fX1/Pmm28ycuRIv8YqIoHhrrugWzeYPt3uSLpOK04i0iFjxozh3nvvpV+/fpxwwgm8++67PPjgg1xzzTUAOBwOcnJyuOeeexg4cGBzO4LevXuTkpJib/Ai4ncff2yKwmfOhMMPtzuarlM7AhHpkIaGBmbMmEFZWRlffvklvXv3ZuLEidx+++10794dMA0w//znPzNv3jy+++675s7Bv/zlLz16DLUjEAkdY8fCBx9ATQ0EeBs3j9oRKHESkYCjxEkkNLz2Gpx5JixaBJdcYnc0B6TESUSCkxInkeDX2AgjRpjappUrweFRWmIrjyJUjZOIiIh43cKF8M474HQGRdLkMZ2qExEREa/asQNuuw3S0iAhwe5ovEuJk4iIiHhVQQHU1cH999sdifcpcRIRERGvqaszrQeysuAXv7A7Gu9T4iQiIiJec8cdcNBBMGOG3ZH4horDRUREwpTL5aK+vp6YmBiioqK6fH9r15pml3l5cMQRXggwAGnFSUREJMw4nU7GpaURHR1NfHw80dHRjEtLo7q6ukv3e/PNcOyxZpsuVGnFSUREJIwUFxeTlZXF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\n", "text/plain": [ "Graphics object consisting of 2 graphics primitives" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#-------------Plot the predicted function next to the data points--------\n", "x_bounds= (x,-5, 5)\n", "scatter_plot(data)+plot(predicted_function, x_bounds)" ] }, { "cell_type": "code", "execution_count": 0, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "SageMath 9.0", "language": "sage", "name": "sagemath" }, "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 }