From dcaa8514d9431e2585d160665305c742470099cc Mon Sep 17 00:00:00 2001 From: JiaSound Date: Thu, 27 Feb 2025 00:57:55 +0000 Subject: [PATCH] algebra homework --- .gitignore | 2 - notebook/problems.ipynb | 1198 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 1197 insertions(+), 3 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index eb27e50c..00000000 --- a/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Checkpoints will not be pushed. -.ipynb_checkpoints diff --git a/notebook/problems.ipynb b/notebook/problems.ipynb index 1ccac740..93af4b1d 100644 --- a/notebook/problems.ipynb +++ b/notebook/problems.ipynb @@ -1 +1,1197 @@ -{"cells":[{"cell_type":"markdown","id":"5dbe7b9e","metadata":{},"source":["# Calculus and Algebra problems"]},{"cell_type":"markdown","id":"519c4b12","metadata":{},"source":["## Calculus\n","\n","Calculus is not obscure. It is the language for modeling behaviors. Calculus enables us to find the rate of changes in order to optimize a function. Without calculus, we would not be able to fully understand techniques such as:\n","\n","Backpropagation in neural networks\n","\n","Regression using optimal least square\n","\n","Expectation maximization in fitting probability models"]},{"cell_type":"markdown","id":"b7e2e87a","metadata":{},"source":["### Exercise 1\n","\n","Let's say, in my office, it takes me 10 seconds (time) to travel 25 meters (distance) to the coffee machine.\n","If we want to express the above situation as a function, then it would be:\n","\n","distance = speed * time\n","\n","So for this case, speed is the first derivative of the distance function above. As speed describes the rate of change of distance over time, when people say taking the first derivative of a certain function, they mean finding out the rate of change of a function.\n","\n","**Find the speed and build the linear function on distance $(d)$ over time $(t)$, when $(t ∈ [0,10])$.**"]},{"cell_type":"code","execution_count":null,"id":"bb3e954e","metadata":{},"outputs":[],"source":["# import libraries\n","\n","\n","# Define the distance function"]},{"cell_type":"code","execution_count":null,"id":"dbc4c780","metadata":{},"outputs":[],"source":["# Plot the distance function on domain (t)"]},{"cell_type":"code","execution_count":null,"id":"4c4d4f20","metadata":{},"outputs":[],"source":["# Create a DataFrame"]},{"cell_type":"markdown","id":"1144168d","metadata":{},"source":["### Exercise 2\n","\n","It turned out that I wasn't walking a constant speed towards getting my coffee, but I was accelerating (my speed increased over time). If my initial *speed = 0*, it still took me 10 seconds to travel from my seat to my coffee, but I was walking faster and faster.\n","\n","$V_o$ = initial speed = $0$\n","\n","t = time\n","\n","a = acceleration\n","\n","**distance** = $V_o * t + 0.5 * a * (t^2)$\n","\n","**speed** = $V_o + a * t$\n","\n","The first derivative of the speed function is acceleration. I realize that the speed function is closely related to the distance function.\n","\n","**Find the acceleration value and build the quadratic function $(t ∈ [0,10])$. Also, create a graph and a table.**"]},{"cell_type":"code","execution_count":null,"id":"ec1f8bd7","metadata":{},"outputs":[],"source":["# Define and plot the quadratic funtion"]},{"cell_type":"code","execution_count":null,"id":"ba5c497b","metadata":{},"outputs":[],"source":["# Create a DataFrame"]},{"cell_type":"markdown","id":"66d4cc18","metadata":{},"source":["Before exercise 3, we'll make a brief introduction to Gradient Descent algorithm, which will have a larger explanation in future modules of the bootcamp.\n","\n","Gradient Descent algorithm is the hero behind the family of deep learning algorithms. When an algorithm in this family runs, it tries to minimize the error between the training input and predicted output. This minimization is done by optimization algorithms, and gradient descent is the most popular one.\n","\n","Let's say you have these input & output pairs:\n","\n","```py\n","# Input:\n","[\n"," [1,2],\n"," [3,4]\n","]\n","\n","# Output:\n","[\n"," [50],\n"," [110]\n","]\n","```\n","\n","We can estimate that if we multiply the input values by [10, 20], we can have the output as shown above.\n","\n","```py\n","1(10) + 2(20) = 50\n","\n","3(10) + 4(20) = 110\n","```\n","\n","When a machine learning algorithm starts running, it assigns random values and makes a prediction. \n","Let's say it assigned [1,2] values:\n","\n","```py\n","1(1) + 2(2) = 5\n","\n","3(1) + 4(2) = 11\n","```\n","\n","Once it has the predictions, it calculates the error: the difference between the real data and the predicted data. There are many ways to calculate the error, and they are called loss functions.\n","\n","Once we have this value, the optimization algorithm starts showing itself, and it sets new values which replace the initial random values. \n","\n","And, the loop continues until a condition is met. That condition can be to loop *n* times, or to loop until the error is smaller than a value."]},{"cell_type":"markdown","id":"85ef2f0b","metadata":{},"source":["It can be hard to understand **gradient descent** without understanding **gradient**. So, let's focus on what a gradient is. The gradient shows the direction of the greatest change of a scalar function. The gradient calculation is done with derivatives, so let's start with a simple example. To calculate the gradient, we just need to remember some linear algebra calculations from high school because we need to calculate derivatives.\n","\n","Let's say we want to find the minimum point of $f(x) = x^2$. The derivative of that function is $df(x)=2x$. \n","\n","The gradient of $f(x)$ at point $x=-10$\n","\n","is \n","\n","$df(-10)=-20$.\n","\n","The gradient of $f(x)$ at point $x=1$\n","\n","is \n","\n","$df(1)=2$.\n","\n","Now let’s visualize $f(x)$ and those $x=-10$ and $x=1$ points."]},{"cell_type":"code","execution_count":22,"id":"4ff7e11a","metadata":{},"outputs":[],"source":["import numpy as np\n","import seaborn as sns\n","\n","def f(x):\n"," return x**2\n","\n","def df(x):\n"," return 2*x\n","\n","def visualize(f, x=None):\n"," \n"," xArray = np.linspace(-10, 10, 100) \n"," yArray = f(xArray)\n"," sns.lineplot(x=xArray, y=yArray)\n"," \n"," if x is not None:\n"," assert type(x) in [np.ndarray, list] # x should be numpy array or list\n"," if type(x) is list: # if it is a list, convert to numpy array\n"," x = np.array(x)\n","\n"," \n"," y = f(x)\n"," sns.scatterplot(x=x, y=y, color='red')"]},{"cell_type":"code","execution_count":23,"id":"633a54fd","metadata":{},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAXcAAAD4CAYAAAAXUaZHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAAsZ0lEQVR4nO3dd3xV9f3H8dcne5AESAIJZBES2SAYNuJAUdGKAxUHUBeOaum0Wtva2tqf4/drtVW04MSJIoobFzgQkIS9EyAhgSQkBLJ3vr8/7qWNaQJZ9547Ps/HI4/cnHuS8865lzcnZ3yPGGNQSinlWXysDqCUUqr7abkrpZQH0nJXSikPpOWulFIeSMtdKaU8kJ/VAQCioqJMUlKS1TGUUsqtZGRkFBtjolt7ziXKPSkpifT0dKtjKKWUWxGRnLae090ySinlgbTclVLKA2m5K6WUB9JyV0opD6TlrpRSHuiU5S4iz4vIERHZ3mxabxH5TEQy7Z972aeLiPxDRLJEZKuIjHFY8qYm2LMHVq+2fW5qctiilFLK3bRny/1F4MIW0+4FvjDGpAJf2L8GuAhItX/MB57unpgtNDXB8uUwejScc47t8/LlWvBKKWV3ynI3xnwNlLSYPBN4yf74JeCyZtOXGJt1QE8Rie2mrP+RmQlz57K5ZzyPTJ0H1dUwd65tulJKuQFjDA99uJMdh0sd8vM7u8+9rzEm3/64AOhrf9wfyG02X5592n8Rkfkiki4i6UVFRR1ben4+VFezLSaFpydexfa+A20Fn59/6u9VSikXsG5/CYu/OcCegnKH/PwuH1A1trt9dPiOH8aYRcaYNGNMWnR0q1fPti02FoKDuXTnVwTW1/LGyOkQHGybrpRSbmDphoOEBflx0XDH9FZny73wxO4W++cj9umHgPhm88XZp3Wv1FRYsoQInyZm7FnDimFnU/3CEtt0pZRycaVV9Xy8vYCZp/cjOMDXIcvobLm/B8yzP54HrGg2fa79rJkJQGmz3Tfdx8cHrrgCNm3i6htnUB4Yyscp423TlVLKxa3YcojahiZmj01w2DLacyrk68BaYJCI5InIzcDDwPkikgmcZ/8a4CNgP5AFLAbudEhqsBX5oEFMuOJckiJDWJqe57BFKaVUd1q6IZehseEM7x/hsGWcclRIY8y1bTw1rZV5DfCTrobqCBHhqrR4Hlu5h/1FFSRH93Dm4pVSqkO2Hyplx+EyHpw5zKHL8Yj9GLPOiMPXR3hTt96VUi7ujQ0HCfTzYeaoVk8k7DYeUe59w4M4Z1A0yzLyqG/UC5mUUq6puq6RFZsPc9HwGCJC/B26LI8od4BrxiZQXFHLl7uPnHpmpZSywEfb8imvaeDqsfGnnrmLPKbczxkUTd/wQF7//qDVUZRSqlWvf3+QAVGhTEyOdPiyPKbc/Xx9uDotnq/2FnHoeLXVcZRS6gcyC8tJzznG7LHxiIjDl+cx5Q5wdZrtT52lG3JPMadSSjnX69/n4u8rXHlGnFOW51HlHt87hKmp0byVnkuDHlhVSrmImvpGlm/KY/qwGKJ6BDplmR5V7gDXjosnv7SGr/Z2cDAypZRykJU7CjheVc+1DrwitSWPK/dpQ/oS1SOQ17/XXTNKKdfw+vcHSegdwqSBjj+QeoLHlbu/rw9Xp8Xx5e5CCkprrI6jlPJy+4sqWLe/hNnj4vHxcfyB1BM8rtwBZo9NoMnogVWllPVe//4gfj7CLCcdSD3BI8s9ITKEqadF88aGg3pgVSllmZr6Rt7KyOOCYTH0CQty6rI9stwBrh+fQH5pDav26IFVpZQ1Pt6ez/Gqeq4b77wDqSd4bLlPG9yHvuGBvLo+x+ooSikv9eo6512R2pLHlrufrw/XjE3gq71F5JZUWR1HKeVldheUkZ5zjOvGJTj1QOoJHlvugO0yX9DxZpRSTvfa+oME+Po47YrUljy63Pv1DObcwX15Mz2PugY9sKqUco6qugbe2XiIGSNi6B0aYEkGjy53gOsn2IYCXrmjwOooSikv8d7mw5TXNnDd+ETLMnh8uU9NjSa+dzCvrNMDq0opxzPGsGRtDoP6hjE2qZdlOTy+3H19hOvHJ7L+QAl7C8utjqOU8nCbco+zM7+MGyYmOmVo37Z4fLmDbSjgAD8f3XpXSjncK2tz6BHox+WjHXuP1FPxinLvHRrAJSNiWb7xEBW1DVbHUUp5qJLKOj7Yms8VY/rTI9DP0ixeUe4AN0xMpKK2gXc3HbI6ilLKQ72ZnktdYxM3TLDuQOoJXlPuo+N7MqxfOK+sy8EYY3UcpZSHaWwyvLo+h/EDenNa3zCr43hPuYsIcyYksrvAdh9DpZTqTl/vLSK3pJo5E63fagcvKneAS0/vR3iQHy99l211FKWUh3lpbTbRYYFMHxpjdRTAy8o9JMCPq9Pi+WR7AYVleiMPpVT3yC6uZPWeIq4fn0CAn2vUqmukcKI5ExNpNIZX1+t4M0qp7rFkbQ7+vmLJ0L5t8bpyT4wM5ZxBfXht/UEdb0Yp1WWVtQ28lZHLRcNjnX5DjpPxunIHmDsxkeKKWj7enm91FKWUm3tn0yHKaxqYN8k1DqSe4JXlPjU1mgFRoXpgVSnVJbZxZLIZ3j+cMQnWjSPTmi6Vu4j8XER2iMh2EXldRIJEZICIrBeRLBFZKiLWjHd5Ej4+ttMiNx48zra8UqvjKKXc1Nr9R9lbWMHciUmWjiPTmk6Xu4j0B34KpBljhgO+wGzgEeDvxpgU4Bhwc3cE7W6z0uIICfDlhe8OWB1FKeWmXlyTTa8Qfy4d1c/qKP+lq7tl/IBgEfEDQoB84Fxgmf35l4DLurgMhwgP8mfWGXF8sCWfovJaq+MopdxMbkkVn+8q5NpxCQT5+1od5790utyNMYeA/wUOYiv1UiADOG6MOTE6Vx7Q6tBoIjJfRNJFJL2oqKizMbpk3qQk6hqbeE1Pi1RKddCStdm2K99d5IrUlrqyW6YXMBMYAPQDQoEL2/v9xphFxpg0Y0xadHR0Z2N0ycDoHpw9KJpX1ufoaZFKqXarrG3gjQ25XDQ8htiIYKvjtKoru2XOAw4YY4qMMfXAcmAy0NO+mwYgDnDpYRh/PCmJovJaPtx22OooSik3sXxjHuU1Ddw4OcnqKG3qSrkfBCaISIjYDhNPA3YCq4BZ9nnmASu6FtGxpqZGkxwdygtrsnW0SKXUKTU1GV74LpuRcREud/pjc13Z574e24HTjcA2+89aBPwG+IWIZAGRwHPdkNNhfHyEGyclsTWvlI0HdbRIpdTJfZNVzP6iSm6c7HqnPzbXpbNljDEPGGMGG2OGG2PmGGNqjTH7jTHjjDEpxpirjDEufyrKFWPiCA/y4/k12VZHUUq5uOe/PUB0WCAXj3C90x+b88orVFsKDfTj2nEJfLwtn9ySKqvjKKVcVGZhOV/tLWLuhESXGf2xLa6dzonmTbL9iaVDEiil2vL8mgME+vlwvQvcRu9UtNzt+vUMZsaIWJZuyKW8pt7qOEopF3O0opa3Nx7iijFx9A51uVFV/ouWezM3TxlAeW0Db6bnWR1FKeViXrUPE37zlCSro7SLlnszp8f3JC2xFy+sOUBjk54WqZSyqW1oZMnaHM4eFE1KH+tvft0eWu4t3DxlAHnHqvl0R4HVUZRSLuK9zYcprqjl5ikDrI7SblruLUwfFkN872Ce/VZHi1RK2cZsf+7bAwzqG8aUlCir47SblnsLvj7CzZMHkJFzjIycEqvjKKUs9nVmMbsLyrl1arJLX7TUkpZ7K65Kiyci2J9FX++3OopSymKLv95P3/BAlxyz/WS03FsRGujHnAmJfLqzkAPFlVbHUUpZZMfhUr7NKubGyQNc/qKlltwrrRPNnZSIv48Pz32rW+9KeavFX+8nNMCXa8clWB2lw7Tc29AnLIjLR/fnrfQ8jla4/PA4Sqludvh4Ne9vzWf2uAQigv2tjtNhWu4nccuZA6htaOLldTlWR1FKOdkLa2xnzLnymO0no+V+Eql9w5g2uA9L1uZQXddodRyllJOUVtXz2vqDXDIylrheIVbH6RQt91O4/eyBlFTW8WZ6rtVRlFJO8sr6HCrrGrlt6kCro3SalvspjE3qzRmJvVj8zX4aGvU+q0p5upr6Rl5Yc4Cpp0UztF+41XE6Tcu9HW4/ayB5x6r5cFu+1VGUUg62LCOP4oo6bj8r2eooXaLl3g7TBvchtU8Pnvlqv95nVSkP1thkWPzNfkbFRTAxOdLqOF2i5d4OPj7C/KnJ7Mov46u9RVbHUUo5yMfb88k5WsXtZw10q6EGWqPl3k4zT+9PbEQQT6/eZ3UUpZQDGGN45qt9DIgKZfqwGKvjdJmWezsF+Plwy5nJrD9QQkbOMavjKKW62deZxWw/VMbtZyXj6+PeW+2g5d4h146Lp1eIP0+vzrI6ilKqmy1clUVsRBCXj46zOkq30HLvgJAAP26aPIDPdx1hV36Z1XGUUt0kPbuE9QdKuPXMZLcbIKwtnvFbONHciUn0CPTTfe9KeZCFq/fROzSA2ePirY7SbbTcOygixJ/rJyTwwdbDZOtwwEq5vR2HS/ly9xFunJRESICf1XG6jZZ7J9w8ZQB+vj4885VuvSvl7p5evY8egX7MnZhkdZRupeXeCX3Cgpg9Np63N+Zx6Hi11XGUUp2UdaSCD7flc8OERCJC3G9Y35PRcu+k286yDSj0L916V8ptLVyVRaCfD7ecOcDqKN1Oy72T+vcM5soxcbyxIZcjZTVWx1FKdVDO0UpWbDnMDeMTieoRaHWcbqfl3gV3np1CY5PhX3ojbaXczsJV+/C1Dy3iibpU7iLSU0SWichuEdklIhNFpLeIfCYimfbPvborrKtJiAxh5un9eHV9DsV6Kz6l3EbesSre3pjHtWPj6RMeZHUch+jqlvsTwCfGmMHAKGAXcC/whTEmFfjC/rXH+sk5KdQ2NLH4G916V8pdPPPVPkT+c+zME3W63EUkApgKPAdgjKkzxhwHZgIv2Wd7CbisaxFd28DoHlwysh8vr82hpLLO6jhKqVPIL63mzQ15zDojnn49g62O4zBd2XIfABQBL4jIJhF5VkRCgb7GmBN3tSgA+rb2zSIyX0TSRSS9qMi9h9H96bkpVNc3skj3vSvl8hau2keTMfzkHM/daoeulbsfMAZ42hgzGqikxS4YY7uzRat3tzDGLDLGpBlj0qKjo7sQw3qpfcO4ZGQ/lqzN5qjue1fKZR0+Xs3SDblclRbvtje+bq+ulHsekGeMWW//ehm2si8UkVgA++cjXYvoHhZMs229L/7mgNVRlFJtWLg6C4Pnb7VDF8rdGFMA5IrIIPukacBO4D1gnn3aPGBFlxK6iZQ+YfxIt96VclnetNUOXT9b5m7gVRHZCpwO/BV4GDhfRDKB8+xfe4Wf2rfeF+mZM0q5nKdW2e7D8JNzUixO4hxdGgLNGLMZSGvlqWld+bnuKqVPGJeO6seS73K4ZUoy0WGed9WbUu4o71gVb6bbttr7e/AZMs3pFardbMG0VGobGnXESKVcyD+/yEJEuPtc79hqBy33bpcc3YMrxsTx8rocCkp1zBmlrHaguJJlG/O4blwCsRHesdUOWu4OsWBaKk1NhidXZVodRSmv98Tne/H3Fe70gjNkmtNyd4D43iFcMzaepRtyyS2psjqOUl5rb2E5K7YcZt6kJPqEeeYYMm3RcneQu85NQUT455e69a6UVR7/fC+hAX7cPtW7ttpBy91hYiOCuWF8Issy8thXVGF1HKW8zvZDpXy0rYCbJifRKzTA6jhOp+XuQHeeM5Agf1/+9uleq6Mo5XUeXbmHniH+3OKh47Wfipa7A0X1COSWM5P5cFs+2/JKrY6jlNdYu+8oX+8t4idnpxAe5Fn3Rm0vLXcHu/XMAfQK8efRlbutjqKUVzDG8OjK3cSEBzFnYqLVcSyj5e5gYUH+3Hl2Ct9kFvPdvmKr4yjl8T7bWcimg8dZcF4qQf6+VsexjJa7E8yZmEhsRBCPfrIH2yjISilHaGwy/O+ne0iOCuWqM+KsjmMpLXcnCPL35WfnpbI59zgrdxRYHUcpj7V8Yx57Cyv4xfTT8PP17nrz7t/eia4cE0dKnx48+ske6hubrI6jlMepqW/kb5/tZVRcBBePiLU6juW03J3Ez9eHey8czP7iSt7YkGt1HKU8zgtrsskvreHei4YgIlbHsZyWuxNNG9KHcUm9eeLzTCprG6yOo5THOFZZx8LVWZw7uA8TB0ZaHcclaLk7kYhw34zBFFfUslhv6KFUt3lqVRaVtQ385sLBVkdxGVruTjY6oRczRsSw6Ov9HCnXIYGV6qrckiqWrM3hyjFxDIoJszqOy9Byt8A9FwymvrGJv3+mwxIo1VWPfLIbHx/4xfTTrI7iUrTcLZAUFcqcCUks3ZDL7oIyq+Mo5bYyco7xwdZ85p+Z7FU34mgPLXeL/HRaCmFB/jz04S69sEmpTjDG8JcPdxIdFshtZ3nfkL6nouVukZ4hAfx0WirfZBazem+R1XGUcjsfbstn08Hj/Hr6IEID/ayO43K03C00Z0IiSZEh/PXDXTTohU1KtVtNfSOPfLKbwTFhXOnlwwy0RcvdQgF+Ptx70RAyj1Tw+vcHrY6jlNt4YU02uSXV/O7iofj66AVLrdFyt9gFw/oyMTmSv322l+NVdVbHUcrlHSmv4ckvMzl/aF+mpEZZHcdlablbTET4w4+GUlpdz+Of6/1WlTqVxz7ZQ11jE/fPGGJ1FJem5e4ChsSGc+24BF5el0NmYbnVcZRyWVtyj/NWRh43TRlAUlSo1XFcmpa7i/jF+acRGuDLgx/s1FMjlWqFMYY/vb+DqB6B3HVOitVxXJ6Wu4uI7BHIz847jW8yi/l81xGr4yjlclZsPszGg8e558JBhHnpfVE7QsvdhcyZmEhqnx48+MEOauobrY6jlMsor6nnoY92MSougllj9NTH9tBydyH+vj786dJh5JZU86+vdNRIpU74xxeZFFfU8uDM4fjoqY/touXuYialRHHxyFgWrs4it6TK6jhKWS6zsJwX1mRzTVo8o+J7Wh3HbXS53EXEV0Q2icgH9q8HiMh6EckSkaUiEtD1mN7ldxcPwUeEv3y40+ooSlnKGMMf399BSIAvv75gkNVx3Ep3bLkvAHY1+/oR4O/GmBTgGHBzNyzDq8RGBHP3tBRW7ihk9R49uKq810fbCliTdZRfXzCIyB6BVsdxK10qdxGJAy4GnrV/LcC5wDL7LC8Bl3VlGd7qlinJJEeH8sB7enBVeafymnoe/GAHw/qFc934RKvjuJ2ubrk/DtwDnBj1KhI4bow5cYPQPKB/a98oIvNFJF1E0ouKdFTElgL8fPjLzOHkHK1i4aosq+Mo5XR/+2wvR8preejyETp+TCd0utxF5BLgiDEmozPfb4xZZIxJM8akRUdHdzaGR5uUEsVlp/fjma/2s6+owuo4SjnN9kOlvPRdNtePT+B0PYjaKV3Zcp8MXCoi2cAb2HbHPAH0FJETgyvHAYe6lNDL3X/xUAL9ffj9u9v1ylXlFZqaDL97dzu9QwP49QV6w+vO6nS5G2PuM8bEGWOSgNnAl8aY64FVwCz7bPOAFV1O6cWiwwK558LBfLfvKCs2H7Y6jlIO99r3B9mce5zfXTyUiGC9ErWzHHGe+2+AX4hIFrZ98M85YBle5bpxtj9N//zBTo5V6rDAynMVltXwyMe7mZwSyczT+1kdx611S7kbY1YbYy6xP95vjBlnjEkxxlxljKntjmV4M18f4eErR1BabbsEWylP9cCKHdQ1NvHQZSOwnXynOkuvUHUTg2PCue2sZJZl5LEmq9jqOEp1u5U7CvhkRwELzkvV4Xy7gZa7G7n73FSSIkP47Tvb9Nx35VHKa+p5YMUOBseEceuZyVbH8Qha7m4kyN+Xv14xgpyjVfz9871Wx1Gq2zzyyW4Ky2t4+MqR+PtqLXUHXYtuZtLAKGaPjWfx1/vZknvc6jhKddnafUd5Zd1Bbpw0QM9p70Za7m7otxcPoU9YEPcs20pdQ9Opv0EpF1VV18Bv3t5KYmSIDgzWzbTc3VB4kD8PXT6cPYXlPKlDEyg39n+f7uVgSRUPXzGS4ABfq+N4FC13NzVtSF8uH92fhauy2Hm4zOo4SnVYRs4xnl9zgBsmJDBxYKTVcTyOlrsb+8MlQ+kZ4s+v3tqiu2eUW6mua+TXb22hX0Qw9140xOo4HknL3Y31Cg3goctHsDO/jH9+mWl1HKXa7dGVu9lfXMmjs0bSI9Dv1N+gOkzL3c1dMCyGK8b0Z+HqfWzWs2eUG/huXzEvrMlm3sREJqdEWR3HY2m5e4AHfjSMPmGB/PLNzXpxk3Jp5TX1/PqtrSRFhvCbi3TER0fScvcAEcH+PHLlSPYVVfLYyj1Wx1GqTX/5YBf5pdX839WjCAnQ3TGOpOXuIaaeFs2cCYk89+0Bvs3UsWeU6/lkewFL03O57ayBnJHY2+o4Hk/L3YP8dsYQBkaH8su3NnO8SocGVq7jSFkN9y3fyvD+4fz8vNOsjuMVtNw9SHCAL0/MHk1JZR2/fWeb3rlJuYSmJsOvlm2lur6Rx68ZTYCf1o4z6Fr2MMP7R/CL8wfx0bYClmXkWR1HKV5am83Xe4u4/+KhpPTpYXUcr6Hl7oHmT01m/IDePPDeDvbrjbWVhXYeLuN/Pt7NuYP7cMP4BKvjeBUtdw/k6yM8Pvt0Avx8uPv1TdQ26OmRyvmq6hq46/WN9Az257FZI/XOSk6m5e6hYiOCeWzWKHYcLuPhj3dbHUd5oQdW7OBAcSWPzz6dyB6BVsfxOlruHuz8oX358aQkXliTzec7C62Oo7zIis2HeCsjj7vOSWHSQL0K1Qpa7h7uvhmDGRobzq+WbSHvWJXVcZQX2FdUwW+XbyMtsRcLpqVaHcdrabl7uEA/X566fgwNjYa7Xtuko0cqh6qua+TOVzYS4OfDP64djZ/eMs8yuua9wICoUB6bNZLNucf560e7rI6jPNjvV2xn75FyHp89mn49g62O49W03L3ERSNiuXFyEi9+l82HW/OtjqM80JvpuSzLyOPuc1I467Roq+N4PS13L3LfRUMYndCTe5ZtIetIudVxlAfZfqiU37+7nUkDI1mgwwu4BC13LxLg58PC68cQHODL/JczKK+ptzqS8gAllXXc9nIGvUMD+Me1o/H10fPZXYGWu5eJjQjmyevGkHO0il+8uYWmJh1/RnVeQ2MTd7++kaKKWp654Qyi9Hx2l6Hl7oUmJEdy/4whfLazkCdXZVkdR7mxx1buYU3WUf5y2XBGxfe0Oo5qRsvdS904OYnLR/fn75/v5dMdBVbHUW7o3U2H+NfX+7lhQgJXp8VbHUe1oOXupUSE/7liBCP7R/CzpZvZlV9mdSTlRjYdPMY9b29lQnJvHvjRMKvjqFZ0utxFJF5EVonIThHZISIL7NN7i8hnIpJp/9yr++Kq7hTk78uiuWmEBflxy0vpFFfUWh1JuYH80mrmv5xBTHgQT19/Bv56oZJL6sqr0gD80hgzFJgA/EREhgL3Al8YY1KBL+xfKxfVNzyIxXPTOFpZy+0vZ+gIkuqkquoauHVJOtV1jTw7L41eoQFWR1Jt6HS5G2PyjTEb7Y/LgV1Af2Am8JJ9tpeAy7qYUTnYyLie/O9Vo0jPOcY9y7bqHZxUqxqbDD99fTM7D5fxj2tP57S+YVZHUifRLbcfF5EkYDSwHuhrjDlxCWQB0LeN75kPzAdISNBB/K12ych+HCyp4tFP9pDQO4RfTh9kdSTlYv78wU4+31XIgzOHce7gVv9ZKxfS5Z1lItIDeBv4mTHmB0fljG0TsNXNQGPMImNMmjEmLTpaL1V2BXecNZDZY+P555dZvLkh1+o4yoU8/+0BXvwum5unDGDuxCSr46h26FK5i4g/tmJ/1Riz3D65UERi7c/HAke6FlE5i4jw58uGc2ZqFL99Zxur9+hLp+Djbfn8+cOdXDCsL7+dMcTqOKqdunK2jADPAbuMMX9r9tR7wDz743nAis7HU87m72sbomBQTBh3vLKRTQePWR1JWei7fcUseGMzYxJ68fg1OrSAO+nKlvtkYA5wrohstn/MAB4GzheRTOA8+9fKjYQF+fPijePoEx7ITS9uIOuI3mTbG20/VMr8JRkkRobw3Lw0ggN8rY6kOkBc4cyItLQ0k56ebnUM1ULO0UqufPo7Av18eev2iTo+txexvfZrCfAV3r5zErER+tq7IhHJMMaktfacXn2g2pQYGcqLN46jrLqeG55dT1G5XuTkDQ4fr+a6xetpbGripZvGabG7KS13dVLD+0fwwo1jyS+tYc5z6zleVWd1JOVAR8pruP7Z9ZRV1/PyzeNJ1XPZ3ZaWuzqltKTeLJ6bxv6iSuY9/72OA++hjlXWMfe57ykoreHFm8YyvH+E1ZFUF2i5q3aZkhrFwuvHsONwGXO14D3Osco6rn92PfuLK3l2XhpnJPa2OpLqIi131W7nDe3Lk9eNYVteKXOf/54yLXiPUFJZx3XPrierqIJn56YxOSXK6kiqG2i5qw65cHgMT11vL/jntODdXcmJLXZ7sU/VG1t7DC131WEXDIux76Ip5brF6ziqQwW7pcKyGq7511r2F1WwWIvd42i5q06ZPiyGRXPTyCys4JpF6ygsq7E6kuqA3JIqrnpmLYePV/PijeO02D2QlrvqtHMG9eGlm8ZRUFrDrGe+4+DRKqsjqXbIOlLOVc+spbS6nldvncDEgZFWR1IOoOWuumRCciSv3jKe8poGrnh6DdvySq2OpE5iQ3YJVz69loYmw9LbJnC63tTaY2m5qy4bFd+TZbdPItDPl2sWreWrvUVWR1Kt+GR7ATc8u57I0ADeuXMSg2PCrY6kHEjLXXWLlD49WH7nJBIjQ7n5xQ06HrwLMcbw4poD3PFqBkP7hbPsjknE9w6xOpZyMC131W36hgfx5m22fbj3vL2Vv360i8Ym6wem82b1jU38fsV2/vj+TqYN7strt0ygt9731CtouatuFRbkz/M/HsucCYks+no/t72cQUVtg9WxvFJpdT03vbiBV9Yd5Lapyfxrzhk6bK8X0XJX3c7f14c/XzacP106jC93F3LFwjXsL9Ix4Z1pT0E5M5/8lnX7j/LorJHcN2OI3mjDy2i5K4eZNymJJTeNp6i8lplPruGznYVWR/IK7285zGVPraGyrpHXbp3A1WnxVkdSFtByVw41JTWK9++eQmJUCLcuSeexlbtpaGyyOpZHqm1o5E/v7+Du1zcxrF84H949hbFJOgCYt9JyVw4X1yuEZbdP4pq0eJ5atY/Zi9Zx6Hi11bE8SnZxJbOeXssLa7L58aQkXrt1An3Cg6yOpSyk5a6cIsjfl0dmjeSJ2aezu6CcGU98wyfb862O5faMMby76RCX/PNbDpZU8a85Z/DHS4cR4Kf/tL2dvgOUU808vT8f/nQKiZEh3P7KRn6+dDOl1TqyZGccrajlzlc38rOlmxkcE8ZHC87kgmExVsdSLsLP6gDK+yRGhvL2HZN48sssnlyVxdp9R3lk1kjO0sGr2m3ljgLuf2cbZdUN/ObCwcyfmqxnw6gf0C13ZQl/Xx9+fv5pvHPnJHoE+THv+e9Z8MYminX44JMqKK3h9pczuO3lDKLDgnjv7snccfZALXb1X8QY668gTEtLM+np6VbHUBapqW9k4ep9PL06i5AAP+67aDBXp8Xjo4X1bw2NTby6/iCPrdxDfWMTC85L5dYzk/H31e0zbyYiGcaYtFaf03JXriKzsJzfvrONDdnHGNE/ggd+NJQ0PZWPNVnFPPj+TvYUljMlJYqHLh9OYmSo1bGUC9ByV27DGMOKzYd5+OPdFJTVcMnIWH41fRBJUd5XZpmF5Ty2cg+f7iwkrlcw988YwoXDYxDRv2iUjZa7cjtVdQ08s3ofi785QF1jE1enxbNgWioxEZ5/7nZuSRWPf57JO5vyCAnw4/azkrnlzGSC/HVcGPVDWu7KbR0pr+GpL7N47fuDiAizzojjtqnJHrlbIutIBc98tY93Nx3Cx0eYNzGRO85O0VEcVZu03JXbyy2pYuHqfbydkUdDUxMzRsRy4+QBjEno6da7KYwxrD9Qwotrslm5s4BAPx9mj03gtrOSiY0ItjqecnFa7spjHCmr4blvD/Da+oOU1zYwrF84cycmcvHIfvQIdJ/LNspq6nlv82FeXpvDnsJyIoL9mTMhkRsnJxHZI9DqeMpNaLkrj1NZ28A7mw6xZG02ewsrCPb35cLhMVw+uj8TB0Zaf4pgUxNkZkJ+PsTGQmoqdU3wbVYRyzce4tOdhdQ1NDE0NpwfT0riR6P66VjrqsO03JXHMsaQkXOM5ZsO8cGWw5TVNBAR7M+0IX2YPjSGySmRhAX5OzdUUxMsXw5z51La5MO3p41j5Q0LWFUZRHltA71C/Ll0VD8uHxPHqLgIt96tpKzl9HIXkQuBJwBf4FljzMMnm1/LXXWHmvpGVu8p4tOdBXyx6wil1fX4+gij4iKYnBLFmMRejIrr6dADlMUVtWxZt4OM/3mKNf2Hsy1mIE0+vvSuLuO8kf2ZPnEQU0+L1oG9VLdwarmLiC+wFzgfyAM2ANcaY3a29T1a7qq71Tc2kZ59jDVZxazZV8zWvNJ/3881vncwg/qGk9KnBwOjQ4nrFUJMRBAx4UHt2jVSWdtAQVkNhaU15B2rZl9RBfuKKtiVX/7voYz9GhsYfXgPk3K2MCV7M6MP78bvyy/g7LMd+WsrL3OycnfEEahxQJYxZr994W8AM4E2y12p7ubv68PEgZFMHBjJrxhERW0D2w+VsiX3OFvyjpNZWMFXe49Q3/jDjZtAPx/CgvwIDfQjwL7f3gB1DU1U1jZQXttAXcMPbzYS4OdDclQooxN68uNJSZxOGcMuOYeQ8uP/mSk42LbvXSkncUS59wdym32dB4xvOZOIzAfmAyQkJDgghlL/0SPQjwnJkUxIjvz3tIbGJnKPVXP4eDUFpTUUlNVQVl1PeW0DFTUNNDT9p8T9fX3oEehHjyA/egYHEBMRSN/wIPr3DCauV8gPB+5qaoLnF8PcuVBdbSv2JUsgNdWZv7LycpadO2aMWQQsAttuGatyKO/l5+vDgKhQBnT30AY+PnDFFTBixA/OlsFH97Mr53FEuR8Cmt+RN84+TSnv4eMDgwbZPpSygCM2JTYAqSIyQEQCgNnAew5YjlJKqTZ0+5a7MaZBRO4CVmI7FfJ5Y8yO7l6OUkqptjlkn7sx5iPgI0f8bKWUUqemR3iUUsoDabkrpZQH0nJXSikPpOWulFIeyCVGhRSRIiCnk98eBRR3Y5zuork6RnN1nKtm01wd05VcicaY6NaecIly7woRSW9r4Bwraa6O0Vwd56rZNFfHOCqX7pZRSikPpOWulFIeyBPKfZHVAdqguTpGc3Wcq2bTXB3jkFxuv89dKaXUf/OELXellFItaLkrpZQHcotyF5GrRGSHiDSJSFqL5+4TkSwR2SMiF7Tx/QNEZL19vqX2oYi7O+NSEdls/8gWkc1tzJctItvs8zn8xrEi8kcROdQs24w25rvQvg6zROReJ+R6TER2i8hWEXlHRHq2MZ9T1tepfn8RCbS/xln291KSo7I0W2a8iKwSkZ329/+CVuY5W0RKm72+f3B0LvtyT/q6iM0/7Otrq4iMcUKmQc3Ww2YRKRORn7WYx2nrS0SeF5EjIrK92bTeIvKZiGTaP/dq43vn2efJFJF5nQpgjHH5D2AIMAhYDaQ1mz4U2AIEAgOAfYBvK9//JjDb/vgZ4A4H5/0/4A9tPJcNRDlx3f0R+NUp5vG1r7tkIMC+Toc6ONd0wM/++BHgEavWV3t+f+BO4Bn749nAUie8drHAGPvjMGw3nm+Z62zgA2e9n9r7ugAzgI8BASYA652czxcowHaRjyXrC5gKjAG2N5v2KHCv/fG9rb3vgd7AfvvnXvbHvTq6fLfYcjfG7DLG7GnlqZnAG8aYWmPMASAL2w26/01EBDgXWGaf9BJwmaOy2pd3NfC6o5bhAP++qbkxpg44cVNzhzHGfGqMabB/uQ7bHbus0p7ffya29w7Y3kvT7K+1wxhj8o0xG+2Py4Fd2O5R7A5mAkuMzTqgp4g48w7h04B9xpjOXvneZcaYr4GSFpObv4/a6qILgM+MMSXGmGPAZ8CFHV2+W5T7SbR2M+6Wb/5I4HizImltnu50JlBojMls43kDfCoiGfabhDvDXfY/jZ9v48/A9qxHR7oJ21Zea5yxvtrz+/97Hvt7qRTbe8sp7LuBRgPrW3l6oohsEZGPRWSYkyKd6nWx+j01m7Y3sKxYXyf0Ncbk2x8XAH1bmadb1p1lN8huSUQ+B2Jaeep+Y8wKZ+dpTTszXsvJt9qnGGMOiUgf4DMR2W3/H94huYCngT9j+8f4Z2y7jG7qyvK6I9eJ9SUi9wMNwKtt/JhuX1/uRkR6AG8DPzPGlLV4eiO2XQ8V9uMp7wKpTojlsq+L/ZjapcB9rTxt1fr6L8YYIyIOOxfdZcrdGHNeJ76tPTfjPortT0I/+xZXp2/YfaqMIuIHXAGccZKfccj++YiIvINtl0CX/lG0d92JyGLgg1aecshNzduxvn4MXAJMM/adja38jG5fX61oz+9/Yp48++scge295VAi4o+t2F81xixv+XzzsjfGfCQiC0Ukyhjj0AGy2vG6OOQ91U4XARuNMYUtn7BqfTVTKCKxxph8+26qI63McwjbsYET4rAdb+wQd98t8x4w234mwwBs/wN/33wGe2msAmbZJ80DHPWXwHnAbmNMXmtPikioiISdeIztoOL21ubtLi32c17exvKcflNzEbkQuAe41BhT1cY8zlpf7fn938P23gHbe+nLtv5D6i72ffrPAbuMMX9rY56YE/v+RWQctn/TDv1Pp52vy3vAXPtZMxOA0ma7Ixytzb+erVhfLTR/H7XVRSuB6SLSy74bdbp9Wsc446hxVz+wlVIeUAsUAiubPXc/tjMd9gAXNZv+EdDP/jgZW+lnAW8BgQ7K+SJwe4tp/YCPmuXYYv/YgW33hKPX3cvANmCr/Y0V2zKX/esZ2M7G2OekXFnY9itutn880zKXM9dXa78/8CC2/3wAguzvnSz7eynZCetoCrbdaVubracZwO0n3mfAXfZ1swXbgelJTsjV6uvSIpcAT9nX5zaaneXm4Gyh2Mo6otk0S9YXtv9g8oF6e3/djO04zRdAJvA50Ns+bxrwbLPvvcn+XssCbuzM8nX4AaWU8kDuvltGKaVUK7TclVLKA2m5K6WUB9JyV0opD6TlrpRSHkjLXSmlPJCWu1JKeaD/B3b+rZgWEmX9AAAAAElFTkSuQmCC","text/plain":["
"]},"metadata":{"needs_background":"light"},"output_type":"display_data"}],"source":["visualize(f, x=[-10, 1])"]},{"cell_type":"markdown","id":"9c187ad7","metadata":{},"source":["The red dot at x=-10 does not know the surface it stands on, and it only knows the coordinates of where it stands and the gradient of itself, which is -20. And the other red dot at x=1 does not know the surface it stands on; it only knows the coordinates of where it stands and the gradient of itself, which is 2.\n","\n","By having only this information: we can say that the red dot at x=-10 should make a bigger jump than x=1 because it has a bigger absolute gradient value. The sign shows the direction. Minus (-) shows that the red dot at x=-10 should move to the right and the other one should move to the left.\n","\n","In summary, the red dot at x=-10 (gradient: -20) should make a bigger jump to the right, and the red dot at x=1 (gradient: 2) should make a smaller jump to the left. \n","\n","We know that the jump length should be proportional to the gradient, but what is that value exactly? We don’t know. So, let’s just say that red points should move with the length of *alpha * gradient*, where alpha is just a parameter.\n","\n","We can say that the new location of the red dot should be calculated with the following formula:\n","\n","x = x - gradient * alpha"]},{"cell_type":"markdown","id":"0a7f5c3f","metadata":{},"source":["Now let's implement this with **NumPy**. Let's start with visualizing the $f(x)=x^2$ function and the $x=-10$ point."]},{"cell_type":"code","execution_count":24,"id":"e26dbdf0","metadata":{},"outputs":[{"data":{"image/png":"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","text/plain":["
"]},"metadata":{"needs_background":"light"},"output_type":"display_data"}],"source":["visualize(f, x=[-10])"]},{"cell_type":"markdown","id":"6e752e19","metadata":{},"source":["The following code implements the whole logic explained before:"]},{"cell_type":"code","execution_count":25,"id":"2bdd54f1","metadata":{},"outputs":[],"source":["def gradient_descent(x, nsteps=1):\n"," \n"," \n"," # collectXs is an array to store how x changed in each iteration, so we can visualize it later\n"," \n"," collectXs = [x]\n"," \n"," # learning_rate is the value that we mentioned as alpha in the previous section\n"," \n"," learning_rate = 1e-01\n"," \n"," for _ in range(nsteps):\n"," \n"," # The following one line does the real magic\n"," # The next value of x is calculated by subtracting the gradient * learning_rate by itself\n"," # The intuition behind this line is in the previous section\n"," \n"," x -= df(x) * learning_rate \n"," collectXs.append(x)\n"," \n"," # We return a tuple that contains\n"," # x -> recent x after nsteps \n"," # collectXs -> all the x values that were calculated so far\n"," \n"," return x, collectXs"]},{"cell_type":"markdown","id":"aea74a65","metadata":{},"source":["Before running a gradient descent with 1000 steps, let's just run it twice, one step at a time, to see how x evolves. \n","We start with x=-10, and it evolves to x=-8. We know that when x=0 that is the **minimum point**, so yes, it is evolving in the correct direction."]},{"cell_type":"code","execution_count":26,"id":"0350981e","metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["-8.0\n"]}],"source":["x=-10\n","x, collectedXs = gradient_descent(x, nsteps=1)\n","print(x)"]},{"cell_type":"code","execution_count":27,"id":"f8e01e2d","metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["-6.4\n"]}],"source":["# The next step will start at x=-8. Let's run a gradient for 1 step\n","\n","x, collectedXs = gradient_descent(x, nsteps=1)\n","print(x)"]},{"cell_type":"markdown","id":"93f13b32","metadata":{},"source":["It goes to x=-6.4. Excellent. Now let's run it 1000 times"]},{"cell_type":"code","execution_count":28,"id":"b699d1fb","metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["-7.873484301831169e-97\n"]}],"source":["x, collectedXs = gradient_descent(x, nsteps=1000)\n","print(x)"]},{"cell_type":"code","execution_count":29,"id":"0b76ee22","metadata":{},"outputs":[{"data":{"image/png":"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","text/plain":["
"]},"metadata":{"needs_background":"light"},"output_type":"display_data"}],"source":["visualize(f, x=collectedXs)"]},{"cell_type":"markdown","id":"d00d2fbb","metadata":{},"source":["### Exercise 3\n","\n","When I arrive to the coffee machine, I hear my colleague talking about the per-unit costs of producing 'product B' for the company. As the company produces more units, the per-unit costs continue to decrease until a point where they start to increase.\n","\n","To optimize the per-unit production cost at its minimum to optimize efficiency, the company would need to find the number of units to be produced where the per-unit production costs begin to change from decreasing to increasing.\n","\n","**Build a quadratic function $f(x)=0.1(x)^2−9x +4500$ on $x∈[0,100]$ to create the per-unit cost function, and make a conclusion.**"]},{"cell_type":"code","execution_count":null,"id":"7c67d8b7","metadata":{},"outputs":[],"source":["# Define and plot the function"]},{"cell_type":"markdown","id":"fbe54895","metadata":{},"source":["We saw with Gradient Descent how the red dot navigates in an environment it does not know about. It only knows the coordinates of where it is and its gradient. The red dot could find the minimum point by using only this knowledge and the gradient descent algorithm.\n","\n","**Optional:**\n","\n","Implement all the previous steps to create a gradient descent algorithm to see how the per-unit cost evolves, with a starting point of 0 units of production."]},{"cell_type":"markdown","id":"aabad82c","metadata":{},"source":["## Linear Algebra"]},{"cell_type":"markdown","id":"6753636d","metadata":{},"source":["### Exercise 1: Sum of two matrices\n","\n","Suppose we have two matrices A and B.\n","\n","```py\n","A = [[1,2],[3,4]]\n","B = [[4,5],[6,7]]\n","\n","then we get\n","A+B = [[5,7],[9,11]]\n","A-B = [[-3,-3],[-3,-3]]\n","```\n","\n","Make the sum of two matrices using Python with NumPy"]},{"cell_type":"code","execution_count":null,"id":"9e200c32","metadata":{},"outputs":[],"source":["# import numpy as np\n","\n"," \n"," \n","# Creating first matrix\n","\n"," \n","# Creating second matrix\n","\n"," \n","# Print elements\n","\n"," \n","# Adding both matrices\n"]},{"cell_type":"markdown","id":"93bfb6cc","metadata":{},"source":["### Exercise 2: Sum of two lists\n","\n","There will be many situations in which we'll have to find an index-wise summation of two different lists. This can have possible applications in day-to-day programming. In this exercise, we will solve the same problem in various ways in which this task can be performed.\n","\n","We have the following two lists:\n","\n","```py\n","list1 = [2, 5, 4, 7, 3]\n","list2 = [1, 4, 6, 9, 10]\n","```\n","\n","Now let's use Python code to demonstrate addition of two lists."]},{"cell_type":"code","execution_count":null,"id":"867b70fc","metadata":{},"outputs":[],"source":["# Naive method\n","\n","# Initializing lists\n","list1 = [2, 5, 4, 7, 3]\n","list2 = [1, 4, 6, 9, 10]\n"," \n","# Printing original lists\n","print (\"Original list 1 : \" + str(list1))\n","print (\"Original list 2 : \" + str(list2))\n"," \n","# Using naive method to add two lists \n","res_list = []\n","for i in range(0, len(list1)):\n"," res_list.append(list1[i] + list2[i])\n"," \n","# Printing resulting list \n","print (\"Resulting list is : \" + str(res_list))"]},{"cell_type":"markdown","id":"7a063d7f","metadata":{},"source":["Now use the following three different methods to make the same calculation: sum of two lists"]},{"cell_type":"code","execution_count":null,"id":"681930a3","metadata":{},"outputs":[],"source":["# Use list comprehension to perform addition of the two lists:\n","\n","\n","# Initializing lists\n","\n"," \n","# Printing original lists\n","\n"," \n","# Using list comprehension to add two lists\n","\n"," \n","# Printing resulting list \n"]},{"cell_type":"code","execution_count":null,"id":"a3a8a425","metadata":{},"outputs":[],"source":["# Use map() + add():\n","\n","\n","# Initializing lists\n","\n"," \n","# Printing original lists\n","\n"," \n","# Using map() + add() to add two lists\n","\n"," \n","# Printing resulting list "]},{"cell_type":"code","execution_count":null,"id":"1708d7ee","metadata":{},"outputs":[],"source":["# Use zip() + sum():\n","\n","\n","# Initializing lists\n","\n"," \n","# Printing original lists\n","\n"," \n","# Using zip() + sum() to add two lists\n","\n"," \n","# Printing resulting list "]},{"cell_type":"markdown","id":"1aef1bd2","metadata":{},"source":["### Exercise 3: Dot multiplication\n","\n","We have two matrices:\n","\n","```py\n","matrix1 = [[1,7,3],\n"," [4,5,2],\n"," [3,6,1]]\n","matrix2 = [[5,4,1],\n"," [1,2,3],\n"," [4,5,2]]\n","```\n","\n","A simple technique but expensive method for larger input datasets is using *for loops*. In this exercise, we will first use nested *for loops* to iterate through each row and column of the matrices, and then we will perform the same multiplication using NumPy."]},{"cell_type":"code","execution_count":null,"id":"840e7d0e","metadata":{},"outputs":[],"source":["# Using a for loop input two matrices of size n x m\n","matrix1 = [[1,7,3],\n"," [4,5,2],\n"," [3,6,1]]\n","matrix2 = [[5,4,1],\n"," [1,2,3],\n"," [4,5,2]]\n"," \n","res = [[0 for x in range(3)] for y in range(3)]\n"," \n","# Explicit for loops\n","for i in range(len(matrix1)):\n"," for j in range(len(matrix2[0])):\n"," for k in range(len(matrix2)):\n"," \n"," # Resulting matrix\n"," res[i][j] += matrix1[i][k] * matrix2[k][j]\n"," \n","print(res)"]},{"cell_type":"code","execution_count":null,"id":"db6c3355","metadata":{},"outputs":[],"source":["# Import libraries\n","\n"," \n","# Input two matrices\n","\n"," \n","# This will return dot product\n","\n"," \n","# Print resulting matrix\n"]},{"cell_type":"markdown","id":"785f6c30","metadata":{},"source":["Source:\n","\n","https://www.youtube.com/channel/UCXq-PLvYAX-EufF5RAPihVg\n","\n","https://www.geeksforgeeks.org/\n","\n","https://medium.com/@seehleung/basic-calculus-explained-for-machine-learning-c7f642e7ced3\n","\n","https://blog.demir.io/understanding-gradient-descent-266fc3dcf02f"]}],"metadata":{"interpreter":{"hash":"d3463682613d55fcbb64853e38cc3520a7f67bdf8d6940e781ddcdc423122719"},"kernelspec":{"display_name":"Python 3.9.12 ('calculus-project')","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.9.12"}},"nbformat":4,"nbformat_minor":5} +{ + "cells": [ + { + "cell_type": "markdown", + "id": "5dbe7b9e", + "metadata": {}, + "source": [ + "# Calculus and Algebra problems" + ] + }, + { + "cell_type": "markdown", + "id": "519c4b12", + "metadata": {}, + "source": [ + "## Calculus\n", + "\n", + "Calculus is not obscure. It is the language for modeling behaviors. Calculus enables us to find the rate of changes in order to optimize a function. Without calculus, we would not be able to fully understand techniques such as:\n", + "\n", + "Backpropagation in neural networks\n", + "\n", + "Regression using optimal least square\n", + "\n", + "Expectation maximization in fitting probability models" + ] + }, + { + "cell_type": "markdown", + "id": "b7e2e87a", + "metadata": {}, + "source": [ + "### Exercise 1\n", + "\n", + "Let's say, in my office, it takes me 10 seconds (time) to travel 25 meters (distance) to the coffee machine.\n", + "If we want to express the above situation as a function, then it would be:\n", + "\n", + "distance = speed * time\n", + "\n", + "So for this case, speed is the first derivative of the distance function above. As speed describes the rate of change of distance over time, when people say taking the first derivative of a certain function, they mean finding out the rate of change of a function.\n", + "\n", + "**Find the speed and build the linear function on distance $(d)$ over time $(t)$, when $(t ∈ [0,10])$.**" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "bb3e954e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0. , 2.5, 5. , 7.5, 10. , 12.5, 15. , 17.5, 20. , 22.5, 25. ])" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# import libraries\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "# speed = distance/time\n", + "# distance 25meters / time 10secs = 2.5 meters/sec\n", + "\n", + "x=np.linspace(0,10,11)\n", + "def distance (x):\n", + " time = x\n", + " speed = 2.5\n", + " dist = speed * time\n", + " return dist\n", + "result = distance(x)\n", + "result\n", + "\n", + "# Define the distance function" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "dbc4c780", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot the distance function on domain (t)\n", + "plt.plot(result)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "4c4d4f20", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
0
00.0
12.5
25.0
37.5
410.0
512.5
615.0
717.5
820.0
922.5
1025.0
\n", + "
" + ], + "text/plain": [ + " 0\n", + "0 0.0\n", + "1 2.5\n", + "2 5.0\n", + "3 7.5\n", + "4 10.0\n", + "5 12.5\n", + "6 15.0\n", + "7 17.5\n", + "8 20.0\n", + "9 22.5\n", + "10 25.0" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create a DataFrame\n", + "distance_df = pd.DataFrame(result)\n", + "distance_df" + ] + }, + { + "cell_type": "markdown", + "id": "1144168d", + "metadata": {}, + "source": [ + "### Exercise 2\n", + "\n", + "It turned out that I wasn't walking a constant speed towards getting my coffee, but I was accelerating (my speed increased over time). If my initial *speed = 0*, it still took me 10 seconds to travel from my seat to my coffee, but I was walking faster and faster.\n", + "\n", + "$V_o$ = initial speed = $0$\n", + "\n", + "t = time\n", + "\n", + "a = acceleration\n", + "\n", + "**distance** = $V_o * t + 0.5 * a * (t^2)$\n", + "\n", + "**speed** = $V_o + a * t$\n", + "\n", + "The first derivative of the speed function is acceleration. I realize that the speed function is closely related to the distance function.\n", + "\n", + "**Find the acceleration value and build the quadratic function $(t ∈ [0,10])$. Also, create a graph and a table.**" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "ec1f8bd7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0. 0.25 1. 2.25 4. 6.25 9. 12.25 16. 20.25 25. ]\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Define and plot the quadratic funtion\n", + "\n", + "time = 10 #secs \n", + "dist = 25 #meters\n", + "speed = 2.5 #meters/sec\n", + "v0 = 0 #Starting Velocity\n", + "accl =.5 #acceleration\n", + "\n", + "# Distance Formula = V_o * t + 0.5 * a * (t^2)\n", + "# 25 = (0*10)+ .5 * a * (10^2) \n", + "# 25 = .5a * 100\n", + "# 25 = 50a\n", + "# 25/50 = 50a/50\n", + "# .5 = a\n", + "\n", + "def AccelFormula (x):\n", + " # Distance Formula = V_o * t + 0.5 * a * (t^2)\n", + " time = x\n", + " dist = 25 #meters\n", + " speed = 2.5 #meters/sec\n", + " v0 = 0 #Starting Velocity\n", + " accl =.5 #acceleration\n", + " calulated_distance = (v0 * time) + (.5 * accl * (time**2))\n", + " return calulated_distance\n", + "\n", + "t_x = np.linspace(0,10,11)\n", + "\n", + "result_accl = AccelFormula(t_x)\n", + "print (result_accl)\n", + "\n", + "plt.plot(result_accl, label=\"Distance vs Time\")\n", + "\n", + "plt.xlabel('Time (seconds)')\n", + "plt.ylabel('Distance (meters)')\n", + "plt.title('Distance vs Time Graph')\n", + "\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "ba5c497b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " distance\n", + "0 0.00\n", + "1 0.25\n", + "2 1.00\n", + "3 2.25\n", + "4 4.00\n", + "5 6.25\n", + "6 9.00\n", + "7 12.25\n", + "8 16.00\n", + "9 20.25\n", + "10 25.00\n" + ] + } + ], + "source": [ + "# Create a DataFrame\n", + "dot_df = pd.DataFrame(result_accl,columns=['distance'])\n", + "print (dot_df)\n" + ] + }, + { + "cell_type": "markdown", + "id": "66d4cc18", + "metadata": {}, + "source": [ + "Before exercise 3, we'll make a brief introduction to Gradient Descent algorithm, which will have a larger explanation in future modules of the bootcamp.\n", + "\n", + "Gradient Descent algorithm is the hero behind the family of deep learning algorithms. When an algorithm in this family runs, it tries to minimize the error between the training input and predicted output. This minimization is done by optimization algorithms, and gradient descent is the most popular one.\n", + "\n", + "Let's say you have these input & output pairs:\n", + "\n", + "```py\n", + "# Input:\n", + "[\n", + " [1,2],\n", + " [3,4]\n", + "]\n", + "\n", + "# Output:\n", + "[\n", + " [50],\n", + " [110]\n", + "]\n", + "```\n", + "\n", + "We can estimate that if we multiply the input values by [10, 20], we can have the output as shown above.\n", + "\n", + "```py\n", + "1(10) + 2(20) = 50\n", + "\n", + "3(10) + 4(20) = 110\n", + "```\n", + "\n", + "When a machine learning algorithm starts running, it assigns random values and makes a prediction. \n", + "Let's say it assigned [1,2] values:\n", + "\n", + "```py\n", + "1(1) + 2(2) = 5\n", + "\n", + "3(1) + 4(2) = 11\n", + "```\n", + "\n", + "Once it has the predictions, it calculates the error: the difference between the real data and the predicted data. There are many ways to calculate the error, and they are called loss functions.\n", + "\n", + "Once we have this value, the optimization algorithm starts showing itself, and it sets new values which replace the initial random values. \n", + "\n", + "And, the loop continues until a condition is met. That condition can be to loop *n* times, or to loop until the error is smaller than a value." + ] + }, + { + "cell_type": "markdown", + "id": "85ef2f0b", + "metadata": {}, + "source": [ + "It can be hard to understand **gradient descent** without understanding **gradient**. So, let's focus on what a gradient is. The gradient shows the direction of the greatest change of a scalar function. The gradient calculation is done with derivatives, so let's start with a simple example. To calculate the gradient, we just need to remember some linear algebra calculations from high school because we need to calculate derivatives.\n", + "\n", + "Let's say we want to find the minimum point of $f(x) = x^2$. The derivative of that function is $df(x)=2x$. \n", + "\n", + "The gradient of $f(x)$ at point $x=-10$\n", + "\n", + "is \n", + "\n", + "$df(-10)=-20$.\n", + "\n", + "The gradient of $f(x)$ at point $x=1$\n", + "\n", + "is \n", + "\n", + "$df(1)=2$.\n", + "\n", + "Now let’s visualize $f(x)$ and those $x=-10$ and $x=1$ points." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "4ff7e11a", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import seaborn as sns\n", + "\n", + "def f(x):\n", + " return x**2\n", + "\n", + "def df(x):\n", + " return 2*x\n", + "\n", + "def visualize(f, x=None):\n", + " \n", + " xArray = np.linspace(-10, 10, 100) \n", + " yArray = f(xArray)\n", + " sns.lineplot(x=xArray, y=yArray)\n", + " \n", + " if x is not None:\n", + " assert type(x) in [np.ndarray, list] # x should be numpy array or list\n", + " if type(x) is list: # if it is a list, convert to numpy array\n", + " x = np.array(x)\n", + "\n", + " \n", + " y = f(x)\n", + " sns.scatterplot(x=x, y=y, color='red')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "633a54fd", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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f/zxqz5X6v1HZtOnT8exY8euOkYDABISEpCQkGD5evDgwYiNjcWSJUvwxhtvtHbMZhk9erTlzz179kR8fDwiIyPx7bffYurUqRIms77PPvsMo0ePRmho6BW3sad9Z28coqA8//zzV224ANCxY8cmvZZGo7lsJHL91R0ajeaKz7l0YJDBYEBJSckVn3O9WvKely5dioCAANx5553N/vvi4+MBmH+Db4sPuOvZp/Hx8TAYDMjMzETXrl0ve1yj0UCv16O0tLTBUZSCgoJW21+Xau77y83NxU033YTBgwfj448/bvbf19b770oCAwOhUCguu2Lqav/2Go2mWdvbihkzZlgGzDf3N2kXFxf06dMH6enprZTOenx9fdGlS5crZrXX/Xfu3Dn8+uuvzT7qaE/7Dvjzc62goAAhISGW+wsKCtC7d+9Gn9OS7+MWsdpoFjtzrUGyBQUFlvuWLFkifHx8RHV1daOvVT9Idv/+/Zb7Nm/ebFODZE0mk4iKihLPP/98i56/a9cuAUAcPnzYysmsb8WKFUIul4uSkpJGH68fJPvdd99Z7ktLS7PZQbI5OTmic+fOYtKkScJgMLToNWxp/w0cOFDMmDHD8rXRaBTt27e/6iDZ22+/vcF9CQkJNjvI0mQyienTp4vQ0FBx6tSpFr2GwWAQXbt2Fc8995yV01lfWVmZ8PPzE//5z38afdze9l+9uXPnCo1GI2pra5v1PFvfd7jCINn33nvPcp9Wq23SINnmfB+3KKvVXslOnDt3Thw8eFC89tprwsvLSxw8eFAcPHhQlJWVCSHM/7ni4uLEyJEjxaFDh8SmTZtEu3btxOzZsy2vkZycLLp27SpycnIs9916662iT58+Ijk5WezatUt07txZ3HfffW3+/q7k119/FQDEiRMnLnssJydHdO3aVSQnJwshhEhPTxevv/662L9/v8jIyBDr1q0THTt2FMOGDWvr2Ne0e/du8cEHH4hDhw6JM2fOiBUrVoh27dqJKVOmWLa59P0JIcSTTz4pIiIixG+//Sb2798vEhISREJCghRv4apycnJEdHS0GDFihMjJyRF5eXmW21+3saf9t2rVKqFSqcSyZcvE8ePHxbRp04Svr6/lyrkHH3xQvPTSS5bt//jjD6FUKsV7770nTpw4IebOnStcXFzE0aNHpXoLV/XUU08JtVottm/f3mB/VVZWWra59D2+9tprYvPmzeLMmTMiJSVFTJo0Sbi5uYnU1FQp3sJVPf/882L79u0iIyND/PHHHyIxMVEEBgaKwsJCIYT97z8hzB+2ERER4h//+Mdlj9njvisrK7N81gEQ77//vjh48KA4d+6cEEKIt99+W/j6+op169aJI0eOiLFjx4qoqChRVVVleY2bb75ZLFy40PL1tb6PrcHpCspDDz0kAFx227Ztm2WbzMxMMXr0aOHu7i4CAwPF888/36BFb9u2TQAQGRkZlvsuXLgg7rvvPuHl5SV8fHzEI488Yik9tuC+++4TgwcPbvSxjIyMBv8GWVlZYtiwYcLf31+oVCoRHR0tXnjhBaHVatswcdOkpKSI+Ph4oVarhZubm4iNjRX/+te/GhztuvT9CSFEVVWVePrpp4Wfn5/w8PAQd911V4MPfVuxdOnSRv+//vXgpz3uv4ULF4qIiAjh6uoqBg4cKPbs2WN57MYbbxQPPfRQg+2//fZb0aVLF+Hq6iq6d+8ufvzxxzZO3HRX2l9Lly61bHPpe5w5c6bl3yM4OFjcdttt4sCBA20fvgnuvfdeERISIlxdXUX79u3FvffeK9LT0y2P2/v+E8J8BByAOHny5GWP2eO+q//MuvRW/z5MJpN45ZVXRHBwsFCpVGLEiBGXvffIyEgxd+7cBvdd7fvYGmRCCGG9E0ZERERE14/zoBAREZHNYUEhIiIim8OCQkRERDaHBYWIiIhsDgsKERER2RwWFCIiIrI5LChERERkc1hQiIiIyOawoBAREZHNYUEhIiIim8OCQkRERDaHBYWIiIhszv8DnVpPuP4ceUYAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "visualize(f, x=[-10, 1])" + ] + }, + { + "cell_type": "markdown", + "id": "9c187ad7", + "metadata": {}, + "source": [ + "The red dot at x=-10 does not know the surface it stands on, and it only knows the coordinates of where it stands and the gradient of itself, which is -20. And the other red dot at x=1 does not know the surface it stands on; it only knows the coordinates of where it stands and the gradient of itself, which is 2.\n", + "\n", + "By having only this information: we can say that the red dot at x=-10 should make a bigger jump than x=1 because it has a bigger absolute gradient value. The sign shows the direction. Minus (-) shows that the red dot at x=-10 should move to the right and the other one should move to the left.\n", + "\n", + "In summary, the red dot at x=-10 (gradient: -20) should make a bigger jump to the right, and the red dot at x=1 (gradient: 2) should make a smaller jump to the left. \n", + "\n", + "We know that the jump length should be proportional to the gradient, but what is that value exactly? We don’t know. So, let’s just say that red points should move with the length of *alpha * gradient*, where alpha is just a parameter.\n", + "\n", + "We can say that the new location of the red dot should be calculated with the following formula:\n", + "\n", + "x = x - gradient * alpha" + ] + }, + { + "cell_type": "markdown", + "id": "0a7f5c3f", + "metadata": {}, + "source": [ + "Now let's implement this with **NumPy**. Let's start with visualizing the $f(x)=x^2$ function and the $x=-10$ point." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "e26dbdf0", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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i0hOK8LutCKczi+ts42Pmxo3dw7GrV1CMLRzCNxdHesoEJEjc4iCEh8fj379+uG///0vAMBisSAiIgLPPPMMXnrppas+lwWFSFpCCBzNNmDz8XxsOZGPw+f1MFvq/ihxVSvRIdgLnXU+iA31RtsAT4T5uqONn/t1D7qtMJpxvrgc54srkXGhDKm5JUjNLcGJ3BKUVpku275DsBdu7BiEobEh6NvWj5cIE0lE9gXFaDTCw8MD3333HUaPHm27f9KkSSguLsaaNWuu+nwWFCJ5KasyYX9GMXanF2F32gUcztKjrGaQbX28NWqEaN2gdXeBj5sa3m4u8HFXX1YczBaBkkoTSiqrYagwwVBZjfySqjqnaS7lqlKic6g3+rf1R/9of/Rt6w9/T86WSyQHjfn8VrdQpjoKCwthNpsREhJS5/6QkBCkpqZetn1VVRWqqv48920wGJo9IxE1nKdGjcEdAjG4g3UF39pTLcdzDUjNKcGJPAMyiypwvrgCRWVGlFSZUHLJqZfG8tao0cbPHW183dFR543OOm/EhvogOtCTR0iInIAkBaWx5syZg9dee03qGETUQEqlApEBHogM8MDwrro6j5UbTcgurkCeoarOkZGSShNMFkvd11Eo4F17hMXNBd5uagR6aexymoiI5E2SghIYGAiVSoW8vLw69+fl5UGn0122/cyZMzFjxgzb1waDAREREc2ek4jsz8NVjZhgb8QEe0sdhYhkTJLjoK6urujTpw82b95su89isWDz5s1ISEi4bHuNRgMfH586NyIiInJekp3imTFjBiZNmoS+ffuif//++PDDD1FWVoZHHnlEqkhEREQkE5IVlPvuuw8FBQWYNWsWcnNz0bNnT2zYsOGygbNERETU+nCqeyIiImoRjfn85rV4REREJDssKERERCQ7LChEREQkOywoREREJDssKERERCQ7LChEREQkOywoREREJDssKERERCQ7LChEREQkO5JNdX89aie/NRgMEichIiKihqr93G7IJPYOWVBKSkoAABERERInISIiosYqKSmBVqu96jYOuRaPxWJBdnY2vL29oVAo7PraBoMBERERyMzMdMp1fvj+HJ+zv0e+P8fn7O/R2d8f0HzvUQiBkpIShIWFQam8+igThzyColQqER4e3qx/h4+Pj9P+xwP4/pyBs79Hvj/H5+zv0dnfH9A87/FaR05qcZAsERERyQ4LChEREckOC8olNBoNZs+eDY1GI3WUZsH35/ic/T3y/Tk+Z3+Pzv7+AHm8R4ccJEtERETOjUdQiIiISHZYUIiIiEh2WFCIiIhIdlhQiIiISHZaXUF56623MHDgQHh4eMDX17febTIyMjBy5Eh4eHggODgYL7zwAkwm01Vft6ioCBMmTICPjw98fX0xefJklJaWNsM7aJytW7dCoVDUe9uzZ88Vn3fTTTddtv2TTz7Zgskbrm3btpdlffvtt6/6nMrKSkydOhUBAQHw8vLC2LFjkZeX10KJGy49PR2TJ09GdHQ03N3d0b59e8yePRtGo/Gqz5P7/vvoo4/Qtm1buLm5IT4+Hrt3777q9itXrkTnzp3h5uaGbt264aeffmqhpI03Z84c9OvXD97e3ggODsbo0aNx4sSJqz5nyZIll+0vNze3FkrcOK+++uplWTt37nzV5zjS/qvv54lCocDUqVPr3d4R9t327dtx5513IiwsDAqFAqtXr67zuBACs2bNQmhoKNzd3ZGYmIhTp05d83Ub+33cWK2uoBiNRowbNw5PPfVUvY+bzWaMHDkSRqMRO3fuxBdffIElS5Zg1qxZV33dCRMm4OjRo9i0aRPWr1+P7du3Y8qUKc3xFhpl4MCByMnJqXN77LHHEB0djb59+171uY8//nid582dO7eFUjfe66+/XifrM888c9Xtn3vuOaxbtw4rV67Etm3bkJ2djTFjxrRQ2oZLTU2FxWLBokWLcPToUXzwwQdYuHAh/u///u+az5Xr/vvmm28wY8YMzJ49G/v27UOPHj0wfPhw5Ofn17v9zp07cf/992Py5MnYv38/Ro8ejdGjR+PIkSMtnLxhtm3bhqlTp2LXrl3YtGkTqqurMWzYMJSVlV31eT4+PnX217lz51ooceN17dq1TtYdO3ZccVtH23979uyp8942bdoEABg3btwVnyP3fVdWVoYePXrgo48+qvfxuXPnYt68eVi4cCGSk5Ph6emJ4cOHo7Ky8oqv2djv4yYRrdTixYuFVqu97P6ffvpJKJVKkZuba7tvwYIFwsfHR1RVVdX7WseOHRMAxJ49e2z3/fzzz0KhUIjz58/bPfv1MBqNIigoSLz++utX3e7GG28Uzz77bMuEuk5RUVHigw8+aPD2xcXFwsXFRaxcudJ23/HjxwUAkZSU1AwJ7Wvu3LkiOjr6qtvIef/1799fTJ061fa12WwWYWFhYs6cOfVuf++994qRI0fWuS8+Pl488cQTzZrTXvLz8wUAsW3btituc6WfR3I0e/Zs0aNHjwZv7+j779lnnxXt27cXFoul3scdad8JIQQAsWrVKtvXFotF6HQ68e6779ruKy4uFhqNRnz99ddXfJ3Gfh83Ras7gnItSUlJ6NatG0JCQmz3DR8+HAaDAUePHr3ic3x9fesckUhMTIRSqURycnKzZ26MtWvX4sKFC3jkkUeuue1XX32FwMBAxMXFYebMmSgvL2+BhE3z9ttvIyAgAL169cK777571VNyKSkpqK6uRmJiou2+zp07IzIyEklJSS0R97ro9Xr4+/tfczs57j+j0YiUlJQ6//ZKpRKJiYlX/LdPSkqqsz1g/Z50hH0FWPcXgGvus9LSUkRFRSEiIgKjRo264s8bOTh16hTCwsLQrl07TJgwARkZGVfc1pH3n9FoxLJly/Doo49edWFaR9p3l0pLS0Nubm6dfaTVahEfH3/FfdSU7+OmcMjFAptTbm5unXICwPZ1bm7uFZ8THBxc5z61Wg1/f/8rPkcqn332GYYPH37NxRYfeOABREVFISwsDIcOHcI//vEPnDhxAj/88EMLJW24v/3tb+jduzf8/f2xc+dOzJw5Ezk5OXj//ffr3T43Nxeurq6XjUEKCQmR3f661OnTpzF//ny89957V91OrvuvsLAQZrO53u+x1NTUep9zpe9Jue8rwLry+vTp0zFo0CDExcVdcbtOnTrh888/R/fu3aHX6/Hee+9h4MCBOHr0aLMvjNpY8fHxWLJkCTp16oScnBy89tpruOGGG3DkyBF4e3tftr0j77/Vq1ejuLgYDz/88BW3caR9V5/a/dCYfdSU7+OmcIqC8tJLL+Gdd9656jbHjx+/5kAuR9KU95yVlYWNGzfi22+/vebr/3X8TLdu3RAaGoqhQ4fizJkzaN++fdODN1Bj3t+MGTNs93Xv3h2urq544oknMGfOHNlORd2U/Xf+/HncdtttGDduHB5//PGrPlfq/UdWU6dOxZEjR646RgMAEhISkJCQYPt64MCBiI2NxaJFi/DGG280d8xGGTFihO3P3bt3R3x8PKKiovDtt99i8uTJEiazv88++wwjRoxAWFjYFbdxpH3naJyioDz//PNXbbgA0K5duwa9lk6nu2wkcu3VHTqd7orPuXRgkMlkQlFR0RWfc72a8p4XL16MgIAA3HXXXY3+++Lj4wFYf4NviQ+469mn8fHxMJlMSE9PR6dOnS57XKfTwWg0ori4uM5RlLy8vGbbX5dq7PvLzs7GzTffjIEDB+Ljjz9u9N/X0vvvSgIDA6FSqS67Yupq//Y6na5R28vFtGnTbAPmG/ubtIuLC3r16oXTp083Uzr78fX1RceOHa+Y1VH337lz5/Drr782+qijI+074M/Ptby8PISGhtruz8vLQ8+ePet9TlO+j5vEbqNZHMy1Bsnm5eXZ7lu0aJHw8fERlZWV9b5W7SDZvXv32u7buHGjrAbJWiwWER0dLZ5//vkmPX/Hjh0CgDh48KCdk9nfsmXLhFKpFEVFRfU+XjtI9rvvvrPdl5qaKttBsllZWaJDhw5i/PjxwmQyNek15LT/+vfvL6ZNm2b72mw2izZt2lx1kOwdd9xR576EhATZDrK0WCxi6tSpIiwsTJw8ebJJr2EymUSnTp3Ec889Z+d09ldSUiL8/PzEf/7zn3ofd7T9V2v27NlCp9OJ6urqRj1P7vsOVxgk+95779nu0+v1DRok25jv4yZltdsrOYhz586J/fv3i9dee014eXmJ/fv3i/3794uSkhIhhPU/V1xcnBg2bJg4cOCA2LBhgwgKChIzZ860vUZycrLo1KmTyMrKst132223iV69eonk5GSxY8cO0aFDB3H//fe3+Pu7kl9//VUAEMePH7/ssaysLNGpUyeRnJwshBDi9OnT4vXXXxd79+4VaWlpYs2aNaJdu3ZiyJAhLR37mnbu3Ck++OADceDAAXHmzBmxbNkyERQUJCZOnGjb5tL3J4QQTz75pIiMjBS//fab2Lt3r0hISBAJCQlSvIWrysrKEjExMWLo0KEiKytL5OTk2G5/3caR9t+KFSuERqMRS5YsEceOHRNTpkwRvr6+tivnHnroIfHSSy/Ztv/jjz+EWq0W7733njh+/LiYPXu2cHFxEYcPH5bqLVzVU089JbRardi6dWud/VVeXm7b5tL3+Nprr4mNGzeKM2fOiJSUFDF+/Hjh5uYmjh49KsVbuKrnn39ebN26VaSlpYk//vhDJCYmisDAQJGfny+EcPz9J4T1wzYyMlL84x//uOwxR9x3JSUlts86AOL9998X+/fvF+fOnRNCCPH2228LX19fsWbNGnHo0CExatQoER0dLSoqKmyvccstt4j58+fbvr7W97E9tLqCMmnSJAHgstuWLVts26Snp4sRI0YId3d3ERgYKJ5//vk6LXrLli0CgEhLS7Pdd+HCBXH//fcLLy8v4ePjIx555BFb6ZGD+++/XwwcOLDex9LS0ur8G2RkZIghQ4YIf39/odFoRExMjHjhhReEXq9vwcQNk5KSIuLj44VWqxVubm4iNjZW/Otf/6pztOvS9yeEEBUVFeLpp58Wfn5+wsPDQ9x99911PvTlYvHixfX+f/3rwU9H3H/z588XkZGRwtXVVfTv31/s2rXL9tiNN94oJk2aVGf7b7/9VnTs2FG4urqKrl27ih9//LGFEzfclfbX4sWLbdtc+h6nT59u+/cICQkRt99+u9i3b1/Lh2+A++67T4SGhgpXV1fRpk0bcd9994nTp0/bHnf0/SeE9Qg4AHHixInLHnPEfVf7mXXprfZ9WCwW8corr4iQkBCh0WjE0KFDL3vvUVFRYvbs2XXuu9r3sT0ohBDCfieMiIiIiK4f50EhIiIi2WFBISIiItlhQSEiIiLZYUEhIiIi2WFBISIiItlhQSEiIiLZYUEhIiIi2WFBISIiItlhQSEiIiLZYUEhIiIi2WFBISIiItlhQSEiIiLZ+X/iGzqp65b6zgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "visualize(f, x=[-10])" + ] + }, + { + "cell_type": "markdown", + "id": "6e752e19", + "metadata": {}, + "source": [ + "The following code implements the whole logic explained before:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "2bdd54f1", + "metadata": {}, + "outputs": [], + "source": [ + "def gradient_descent(x, nsteps=1):\n", + " \n", + " \n", + " # collectXs is an array to store how x changed in each iteration, so we can visualize it later\n", + " \n", + " collectXs = [x]\n", + " \n", + " # learning_rate is the value that we mentioned as alpha in the previous section\n", + " \n", + " learning_rate = 1e-01\n", + " \n", + " for _ in range(nsteps):\n", + " \n", + " # The following one line does the real magic\n", + " # The next value of x is calculated by subtracting the gradient * learning_rate by itself\n", + " # The intuition behind this line is in the previous section\n", + " \n", + " x -= df(x) * learning_rate \n", + " collectXs.append(x)\n", + " \n", + " # We return a tuple that contains\n", + " # x -> recent x after nsteps \n", + " # collectXs -> all the x values that were calculated so far\n", + " \n", + " return x, collectXs" + ] + }, + { + "cell_type": "markdown", + "id": "aea74a65", + "metadata": {}, + "source": [ + "Before running a gradient descent with 1000 steps, let's just run it twice, one step at a time, to see how x evolves. \n", + "We start with x=-10, and it evolves to x=-8. We know that when x=0 that is the **minimum point**, so yes, it is evolving in the correct direction." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "0350981e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-8.0\n" + ] + } + ], + "source": [ + "x=-10\n", + "x, collectedXs = gradient_descent(x, nsteps=1)\n", + "print(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "f8e01e2d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-6.4\n" + ] + } + ], + "source": [ + "# The next step will start at x=-8. Let's run a gradient for 1 step\n", + "\n", + "x, collectedXs = gradient_descent(x, nsteps=1)\n", + "print(x)" + ] + }, + { + "cell_type": "markdown", + "id": "93f13b32", + "metadata": {}, + "source": [ + "It goes to x=-6.4. Excellent. Now let's run it 1000 times" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "b699d1fb", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-7.873484301831169e-97\n" + ] + } + ], + "source": [ + "x, collectedXs = gradient_descent(x, nsteps=1000)\n", + "print(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "0b76ee22", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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6Ylp06ahvLzcCu+gaf7++2/IZLJGb/v27bvq82677bYrtn/yySdbMPmNa9u27RVZ33333Ws+p7q6GvHx8fDx8YGbmxvGjx+PvLy8Fkp8486ePYtp06YhPDwczs7OaN++PebOnQudTnfN50l9/33xxRdo27YtnJycEB0djb17915z+1WrViEiIgJOTk7o3r07fv/99xZK2nTz5s1Dv3794O7uDn9/f4wbNw5paWnXfM7ixYuv2F9OTk4tlLhp/vOf/1yRNSIi4prPsaX919jPE5lMhvj4+Ea3t4V9t2PHDowZMwZBQUGQyWRYu3Ztg8cFQcCcOXMQGBgIZ2dnxMbG4uTJk9d93aZ+HzdVqysoOp0OEyZMwFNPPdXo4waDAaNGjYJOp8Pu3buxZMkSLF68GHPmzLnm606ePBnHjh3D5s2bsWHDBuzYsQOPP/64Nd5CkwwcOBA5OTkNbtOnT0d4eDj69u17zec+9thjDZ73/vvvt1DqpnvjjTcaZH322Wevuf3MmTOxfv16rFq1Ctu3b0d2djbuueeeFkp741JTU2E0GrFw4UIcO3YMH3/8MRYsWIB///vf132uVPffihUrMGvWLMydOxcHDhxAz549MXz4cOTn5ze6/e7duzFp0iRMmzYNBw8exLhx4zBu3DgcPXq0hZPfmO3btyM+Ph579uzB5s2bUVtbi7i4OFRUVFzzeR4eHg3217lz51oocdN17dq1QdadO3dedVtb23/79u1r8N42b94MAJgwYcJVnyP1fVdRUYGePXviiy++aPTx999/H5999hkWLFiAxMREuLq6Yvjw4aiurr7qazb1+7hZhFZq0aJFglqtvuL+33//XZDL5UJubq75vi+//FLw8PAQampqGn2t48ePCwCEffv2me/7448/BJlMJpw/f97i2W+GTqcT/Pz8hDfeeOOa2w0ZMkR4/vnnWybUTQoLCxM+/vjjG96+pKREcHBwEFatWmW+LyUlRQAgJCQkWCGhZb3//vtCeHj4NbeR8v7r37+/EB8fb/6zwWAQgoKChHnz5jW6/X333SeMGjWqwX3R0dHCE088YdWclpKfny8AELZv337Vba7280iK5s6dK/Ts2fOGt7f1/ff8888L7du3F4xGY6OP29K+EwRBACCsWbPG/Gej0SgEBAQIH3zwgfm+kpISQaVSCT/99NNVX6ep38fN0eqOoFxPQkICunfvDo1GY75v+PDhKC0txbFjx676HE9PzwZHJGJjYyGXy5GYmGj1zE2xbt06FBYW4pFHHrnutj/++CN8fX3RrVs3zJ49G5WVlS2QsHneffdd+Pj4ICoqCh988ME1T8klJSWhtrYWsbGx5vsiIiIQGhqKhISEloh7U7RaLby9va+7nRT3n06nQ1JSUoOvvVwuR2xs7FW/9gkJCQ22B0zfk7awrwDT/gJw3X1WXl6OsLAwhISEYOzYsVf9eSMFJ0+eRFBQENq1a4fJkycjIyPjqtva8v7T6XRYunQpHn300WsuTGtL++5y6enpyM3NbbCP1Go1oqOjr7qPmvN93Bw2uVigNeXm5jYoJwDMf87Nzb3qc/z9/Rvcp1Qq4e3tfdXniOXbb7/F8OHDr7vY4gMPPICwsDAEBQXhyJEjePnll5GWloZffvmlhZLeuOeeew69e/eGt7c3du/ejdmzZyMnJwcfffRRo9vn5ubC0dHxijFIGo1GcvvrcqdOncL8+fPx4YcfXnM7qe6/goICGAyGRr/HUlNTG33O1b4npb6vANPK6zNmzMCgQYPQrVu3q27XuXNnfPfdd+jRowe0Wi0+/PBDDBw4EMeOHbP6wqhNFR0djcWLF6Nz587IycnB66+/jltvvRVHjx6Fu7v7Fdvb8v5bu3YtSkpK8PDDD191G1vad42p3w9N2UfN+T5uDrsoKK+88gree++9a26TkpJy3YFctqQ57zkrKwt//vknVq5ced3Xv3T8TPfu3REYGIhhw4bh9OnTaN++ffOD36CmvL9Zs2aZ7+vRowccHR3xxBNPYN68eZKdiro5++/8+fMYMWIEJkyYgMcee+yazxV7/5FJfHw8jh49es0xGgAQExODmJgY858HDhyIyMhILFy4EG+++aa1YzbJnXfeaf7/Hj16IDo6GmFhYVi5ciWmTZsmYjLL+/bbb3HnnXciKCjoqtvY0r6zNXZRUF544YVrNlwAaNeu3Q29VkBAwBUjkeuv7ggICLjqcy4fGKTX61FUVHTV59ys5rznRYsWwcfHB3fddVeT/77o6GgApt/gW+ID7mb2aXR0NPR6Pc6ePYvOnTtf8XhAQAB0Oh1KSkoaHEXJy8uz2v66XFPfX3Z2Nm6//XYMHDgQX331VZP/vpbef1fj6+sLhUJxxRVT1/raBwQENGl7qXjmmWfMA+ab+pu0g4MDoqKicOrUKSulsxxPT0906tTpqlltdf+dO3cOW7ZsafJRR1vad8DFz7W8vDwEBgaa78/Ly0OvXr0afU5zvo+bxWKjWWzM9QbJ5uXlme9buHCh4OHhIVRXVzf6WvWDZPfv32++788//5TUIFmj0SiEh4cLL7zwQrOev3PnTgGAcPjwYQsns7ylS5cKcrlcKCoqavTx+kGyq1evNt+Xmpoq2UGyWVlZQseOHYWJEycKer2+Wa8hpf3Xv39/4ZlnnjH/2WAwCG3atLnmINnRo0c3uC8mJkaygyyNRqMQHx8vBAUFCSdOnGjWa+j1eqFz587CzJkzLZzO8srKygQvLy/h008/bfRxW9t/9ebOnSsEBAQItbW1TXqe1PcdrjJI9sMPPzTfp9Vqb2iQbFO+j5uV1WKvZCPOnTsnHDx4UHj99dcFNzc34eDBg8LBgweFsrIyQRBM/7i6desmxMXFCYcOHRI2btwo+Pn5CbNnzza/RmJiotC5c2chKyvLfN+IESOEqKgoITExUdi5c6fQsWNHYdKkSS3+/q5my5YtAgAhJSXliseysrKEzp07C4mJiYIgCMKpU6eEN954Q9i/f7+Qnp4u/Prrr0K7du2EwYMHt3Ts69q9e7fw8ccfC4cOHRJOnz4tLF26VPDz8xOmTJli3uby9ycIgvDkk08KoaGhwl9//SXs379fiImJEWJiYsR4C9eUlZUldOjQQRg2bJiQlZUl5OTkmG+XbmNL+2/58uWCSqUSFi9eLBw/flx4/PHHBU9PT/OVcw899JDwyiuvmLfftWuXoFQqhQ8//FBISUkR5s6dKzg4OAjJyclivYVreuqppwS1Wi38/fffDfZXZWWleZvL3+Prr78u/Pnnn8Lp06eFpKQkYeLEiYKTk5Nw7NgxMd7CNb3wwgvC33//LaSnpwu7du0SYmNjBV9fXyE/P18QBNvff4Jg+rANDQ0VXn755Sses8V9V1ZWZv6sAyB89NFHwsGDB4Vz584JgiAI7777ruDp6Sn8+uuvwpEjR4SxY8cK4eHhQlVVlfk1hg4dKsyfP9/85+t9H1tCqysoU6dOFQBccdu2bZt5m7Nnzwp33nmn4OzsLPj6+govvPBCgxa9bds2AYCQnp5uvq+wsFCYNGmS4ObmJnh4eAiPPPKIufRIwaRJk4SBAwc2+lh6enqDr0FGRoYwePBgwdvbW1CpVEKHDh2EF198UdBqtS2Y+MYkJSUJ0dHRglqtFpycnITIyEjhnXfeaXC06/L3JwiCUFVVJTz99NOCl5eX4OLiItx9990NPvSlYtGiRY3+e7304Kct7r/58+cLoaGhgqOjo9C/f39hz5495seGDBkiTJ06tcH2K1euFDp16iQ4OjoKXbt2FX777bcWTnzjrra/Fi1aZN7m8vc4Y8YM89dDo9EII0eOFA4cONDy4W/A/fffLwQGBgqOjo5CmzZthPvvv184deqU+XFb33+CYDoCDkBIS0u74jFb3Hf1n1mX3+rfh9FoFF577TVBo9EIKpVKGDZs2BXvPSwsTJg7d26D+671fWwJMkEQBMudMCIiIiK6eZwHhYiIiCSHBYWIiIgkhwWFiIiIJIcFhYiIiCSHBYWIiIgkhwWFiIiIJIcFhYiIiCSHBYWIiIgkhwWFiIiIJIcFhYiIiCSHBYWIiIgkhwWFiIiIJOf/Ab6hq3qyBK1CAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "visualize(f, x=collectedXs)" + ] + }, + { + "cell_type": "markdown", + "id": "d00d2fbb", + "metadata": {}, + "source": [ + "### Exercise 3\n", + "\n", + "When I arrive to the coffee machine, I hear my colleague talking about the per-unit costs of producing 'product B' for the company. As the company produces more units, the per-unit costs continue to decrease until a point where they start to increase.\n", + "\n", + "To optimize the per-unit production cost at its minimum to optimize efficiency, the company would need to find the number of units to be produced where the per-unit production costs begin to change from decreasing to increasing.\n", + "\n", + "**Build a quadratic function $f(x)=0.1(x)^2−9x +4500$ on $x∈[0,100]$ to create the per-unit cost function, and make a conclusion.**" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "7c67d8b7", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_801/604393337.py:13: UserWarning: No artists with labels found to put in legend. Note that artists whose label start with an underscore are ignored when legend() is called with no argument.\n", + " plt.legend()\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[4500. 4491.1 4482.4 4473.9 4465.6 4457.5 4449.6 4441.9 4434.4 4427.1\n", + " 4420. 4413.1 4406.4 4399.9 4393.6 4387.5 4381.6 4375.9 4370.4 4365.1\n", + " 4360. 4355.1 4350.4 4345.9 4341.6 4337.5 4333.6 4329.9 4326.4 4323.1\n", + " 4320. 4317.1 4314.4 4311.9 4309.6 4307.5 4305.6 4303.9 4302.4 4301.1\n", + " 4300. 4299.1 4298.4 4297.9 4297.6 4297.5 4297.6 4297.9 4298.4 4299.1\n", + " 4300. 4301.1 4302.4 4303.9 4305.6 4307.5 4309.6 4311.9 4314.4 4317.1\n", + " 4320. 4323.1 4326.4 4329.9 4333.6 4337.5 4341.6 4345.9 4350.4 4355.1\n", + " 4360. 4365.1 4370.4 4375.9 4381.6 4387.5 4393.6 4399.9 4406.4 4413.1\n", + " 4420. 4427.1 4434.4 4441.9 4449.6 4457.5 4465.6 4473.9 4482.4 4491.1\n", + " 4500. 4509.1 4518.4 4527.9 4537.6 4547.5 4557.6 4567.9 4578.4 4589.1\n", + " 4600. ]\n" + ] + } + ], + "source": [ + "# Define and plot the function\n", + "x_list = np.linspace(0,100,101)\n", + "def quadratic_1 (x):\n", + " return .1*(x**2)-(9*x)+4500\n", + "points = quadratic_1(x_list)\n", + "\n", + "plt.plot(points) #label=\"Distance vs Time\")\n", + "\n", + "plt.xlabel('Number of Units')\n", + "plt.ylabel('Cost')\n", + "plt.title('Number of Units vs Cost')\n", + "\n", + "plt.legend()\n", + "plt.show()\n", + "\n", + "print(points)" + ] + }, + { + "cell_type": "markdown", + "id": "fbe54895", + "metadata": {}, + "source": [ + "We saw with Gradient Descent how the red dot navigates in an environment it does not know about. It only knows the coordinates of where it is and its gradient. The red dot could find the minimum point by using only this knowledge and the gradient descent algorithm.\n", + "\n", + "**Optional:**\n", + "\n", + "Implement all the previous steps to create a gradient descent algorithm to see how the per-unit cost evolves, with a starting point of 0 units of production." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "14f8da7a", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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uT7z8vanhIQE06ZNGzN+/HgzZswYk52dbebMmWNsNptp1aqVGT9+vHnqqadMrVq1TGJiYqn+XJZ+UJ7jzMzMNImJicbLy8sMGzbMvPXWW+b55583HTt2NGvWrDHGGFNUVGR69+5tAgICzIMPPmjefvttM2LECOPt7W2uvfbaMv+OAICwBQBllJ6efsYvs8YYc+LECXP06FHX4+TJk651JV+K//a3v5Xa7vR2JcaMGWNsNpvZu3eva1mbNm1MTEyMSUtLcy379ttvjaTfDVtDhw41MTEx5tixY27tBgwYYEJDQ101lHw5btGihcnLy3O1mzBhgpFkNmzY4FrWt2/fUu97Lr8Xtl599VUjyXz++efGGGN++OEHI8l8/PHHbu2++eYbt+WzZ882ksyKFSvOuu+FCxcaSeb+++8vtc7pdBpjjNmzZ4/x8vIyL774otv6DRs2GG9vb7fl3bp1M5JcgdkYY/Ly8kx0dLTp16+fa9mKFSuMJPPBBx+ctbYSJX2rrF/k165daySZO+64w235o48+aiSZhQsXupY1aNDASDJLlixxLTty5IhxOBzmkUcecS0bNWqU8fHxMampqW7HFRYWZoYMGeJaVt7+1KhRo1L9vGXLliY2NtZkZma6li1atKhUfy5rPyjPcT799NNGkpk1a5b5rZL+8NFHHxm73W5++OEHt/WTJk0yksxPP/1UalsAOBNOIwSAMio5/SkoKKjUussuu0x16tRxPd58881Sbc50PZK/v7/reXZ2to4dO6aLLrpIxhitWbNGknT48GGtXbtWgwcPVmhoqKt9r169lJCQcM6ajTGaOXOmrrnmGhljdOzYMdejT58+Sk9P1+rVq922uf322+Xr6+t6fckll0iSdu3adc73+jNKPtPMzExJxaeYhYaGqlevXm41t2/fXkFBQfr+++8lSWFhYZKKJy0pKCg4475nzpwpm82mZ555ptQ6m80mSZo1a5acTqduuukmt/eLjo5W06ZNXe93er2nX3/m6+urTp06/eHPqKRvBQcHl6n9V199JUl6+OGH3ZaXTEDy22u7EhISXL9HSapTp46aNWvmVm///v1VUFCgWbNmuZZ9++23SktLU//+/SX9sf40ePBgt35+6NAhbdiwQYMGDXL7s9StWze1bNnSbduy9oPyHOfMmTPVunVr/fWvfy31uZb0hxkzZqhFixZq3ry52/tefvnlklTqfQHgbJggAwDKqOSLcFZWVql1b7/9tjIzM5WSklJqEgip+Fqu2NjYUsv37dunp59+Wl988UWpa1DS09MlSXv37pUkNW3atNT2zZo1K/Xl9nRHjx5VWlqa3nnnnbPOYnfkyBG31/Xr13d7XatWLUkqVZ8nlXymJZ/x9u3blZ6ersjIyDO2L6m5W7du6tevn0aPHq1XX31Vl112ma677jr93//9nxwOh6TiSU3q1q2r8PDws77/9u3bZYw542csST4+Pm6vY2NjXV/MS9SqVesPT/sfEhIi6X9h8/fs3btXdrtdTZo0cVseHR2tsLAwV58p8dvfaUm9p/9OW7durebNm2v69OkaOnSoJGn69OmKiIhwhYw/0p8aNmxYqnZJpWovWXZ6fy5rPyjPce7cuVP9+vU74/5Of98tW7aoTp06ZXpfADgbwhYAlFFoaKhiYmK0cePGUus6d+4sSdqzZ88Zt3U4HKVmYCsqKlKvXr2Umpqqxx9/XM2bN1dgYKAOHjyo2267TU6n80/XXLKPW265RYMHDz5jm1atWrm99vLyOmM7c9rkFZ5W8pmWfAF3Op2KjIzUxx9/fMb2JV+CbTab/vvf/+qXX37Rl19+qXnz5mnIkCH65z//qV9++eWMo5Bn4nQ6ZbPZ9PXXX5/x+H+7H09/RiEhIapbt+4Z+9a5/DbwnU1Z6+3fv79efPFFHTt2TMHBwfriiy908803u24l8Ef60+mjWuVV1n5QwlO/F6fTqZYtW571dgSnT4ADAOdC2AKAcujbt6/+/e9/a/ny5erUqdOf2teGDRv066+/asqUKRo0aJBr+fz5893aldyva/v27aX2sW3btnO+R506dRQcHKyioiL17NnzT9V7urJ+yS+LrKwszZ49W3FxcWrRooUkqXHjxvruu+/UtWvXMn1Z79Kli7p06aIXX3xRU6dO1cCBAzVt2jTdcccdaty4sebNm6fU1NSzjm41btxYxhg1bNhQF1xwgUeOq7yf0dVXX6133nlHS5cuVVJS0jnbNmjQQE6nU9u3b3d9ZpKUkpKitLS0P3yPt/79+2v06NGaOXOmoqKilJGRoQEDBrjWe6I/ldR2+gyXJX67rLz9oCwaN278u6G2cePGWrdunXr06OHRvg6g5uGaLQAoh5EjRyogIEBDhgxRSkpKqfXl+R/0kv+FP30bY4wmTJjg1i4mJkZt2rTRlClTXKcWSsWhbPPmzb/7Hv369dPMmTPP+AXz6NGjZa73dIGBgW61/FE5OTm69dZblZqaqieffNL1xfamm25SUVGRnn/++VLbFBYWKi0tTVLxqY2//cxLbiBcMkV3v379ZIzR6NGjS+2rZNvrr79eXl5eGj16dKn9GWN0/Pjxch9byX3USmr9PSNHjlRgYKDuuOOOM/atnTt3uvrGVVddJUl67bXX3NqUjMT07du33PVKUosWLdSyZUtNnz5d06dPV0xMjC699FLXek/0p7p16yoxMVEffvih2ym5ixcv1oYNG9zalrUflEe/fv20bt26M946oeR3f9NNN+ngwYN69913S7XJyclRdnZ2ud8XQM3EyBYAlEPTpk01depU3XzzzWrWrJkGDhyo1q1byxij3bt3a+rUqbLb7We8Puu3mjdvrsaNG+vRRx/VwYMHFRISopkzZ57x2qgxY8aob9++uvjiizVkyBClpqbqjTfe0IUXXnjGa8hON3bsWH3//ffq3Lmzhg0bpoSEBKWmpmr16tX67rvvlJqaWu7PoX379po+fboefvhhdezYUUFBQbrmmmvOuc3Bgwf1n//8R1LxaNbmzZs1Y8YMJScn65FHHtFdd93latutWzfdddddGjNmjNauXavevXvLx8dH27dv14wZMzRhwgTdcMMNmjJliiZOnKi//vWvaty4sTIzM/Xuu+8qJCTEFUi6d++uW2+9Va+//rq2b9+uK664Qk6nUz/88IO6d++uESNGqHHjxnrhhRc0atQo7dmzR9ddd52Cg4O1e/duzZ49W3feeaceffTRcn1GjRs3VlhYmCZNmqTg4GAFBgaqc+fOpa5hOr391KlT1b9/f7Vo0UKDBg1SYmKi8vPz9fPPP2vGjBm67bbbJBVfXzV48GC98847SktLU7du3bR8+XJNmTJF1113nbp3716uWk/Xv39/Pf300/Lz89PQoUNLnf7qif700ksv6dprr1XXrl11++2368SJE/rXv/6lxMREt/5c1n5QHo899pj++9//6sYbb9SQIUPUvn17paam6osvvtCkSZPUunVr3Xrrrfr0009199136/vvv1fXrl1VVFSkrVu36tNPP9W8efPUoUOHcr0vgBrqvM59CADVxI4dO8w999xjmjRpYvz8/Iy/v79p3ry5ufvuu83atWvd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X8WgNQAAgLUIW0A1YLfb9NTVLfRIrwskSa8v2K5nvtgkp5PABQAAYBXCFlBN2Gw23dejqZ6/LlE2m/Th0r16cPpaFRQ5rS4NAACgRipz2HrqqadUWFh41vX79u1Tr169PFIUgD/u1i4N9Fr/NvK22/TFukMa9uFK5eQXWV0WAABAjVPmsDVlyhR17NhRGzduLLXu7bffVmJiory9vT1aHIA/5to29fTvwR3k52PXom1Hdet7y5SeU2B1WQAAADVKmcPWxo0b1bJlS3Xo0EFjxoyR0+nUvn371LNnT40cOVL/+Mc/9PXXX5frzceMGaOOHTsqODhYkZGRuu6667Rt2za3Nrm5uRo+fLhq166toKAg9evXTykp7jdw3bdvn/r27auAgABFRkbqscceKzUKt2jRIrVr104Oh0NNmjTR5MmTy1UrUNVc1ixSH9/RWSF+3lq594T6v71URzJyrS4LAACgxihz2AoJCdGHH36o6dOna8KECWrXrp1atmwpm82m9evX68477yz3my9evFjDhw/XL7/8ovnz56ugoEC9e/dWdna2q81DDz2kL7/8UjNmzNDixYt16NAhXX/99a71RUVF6tu3r/Lz8/Xzzz9rypQpmjx5sp5++mlXm927d6tv377q3r271q5dqwcffFB33HGH5s2bV+6agaqkfYNwTb8rSXWCHdqanKm/TvxZO45kWl0WAABAjVDumxqnpKTolltu0YIFCxQYGKg5c+aoW7duHinm6NGjioyM1OLFi3XppZcqPT1dderU0dSpU3XDDTdIkrZu3aoWLVpo6dKl6tKli77++mtdffXVOnTokKKioiRJkyZN0uOPP66jR4/K19dXjz/+uObOnet2CuSAAQOUlpamb7755nfr4qbGqOr2HT+pwR8s1+5j2Qr199G/B3dQx/hwq8sCAACocirspsaffPKJEhIS5HQ6tWXLFt1zzz3q3bu3HnroIeXm/vnTk9LT0yVJ4eHFXwJXrVqlgoIC9ezZ09WmefPmql+/vpYuXSpJWrp0qVq2bOkKWpLUp08fZWRkaNOmTa42p++jpE3JPn4rLy9PGRkZbg+gKqtfO0Az77lIbeuHKT2nQAP/vUzfbDxsdVkAAADVWpnDVr9+/TRs2DA9++yzWrBggZo1a6Zx48bp+++/11dffaXWrVufNbyUhdPp1IMPPqiuXbsqMTFR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tUtKSnLbLikpyTWyddttt2nt2rVq1qyZ7r//fn377bcVcnwAgMqHsAUAqDH8/PzUq1cvPfXUU/r5559122236Zlnnjlr+6ysLI0ePVpr1651PTZs2KDt27fLz8+vTO/Zrl077d69W88//7xycnJ000036YYbbvDUIQEAKjHCFgCgxkpISFB2drYkycfHR0VFRW7r27Vrp23btqlJkyalHnb7//4J/eWXX9y2++WXX9SiRQvX65CQEPXv31/vvvuupk+frpkzZyo1NbUCjwwAUBkw9TsAoNo7fvy4brzxRg0ZMkStWrVScHCwVq5cqXHjxunaa6+VJMXHx2vBggXq2rWrHA6HatWqpaefflpXX3216tevrxtuuEF2u13r1q3Txo0b9cILL7j2P2PGDHXo0EEXX3yxPv74Yy1fvlzvvfeeJGn8+PGKiYlR27ZtZbfbNWPGDEVHRyssLMyKjwIAcB4RtgAA1V5QUJA6d+6sV199VTt37lRBQYHi4uI0bNgwPfHEE5Kkf/7zn3r44Yf17rvvql69etqzZ4/69OmjOXPm6LnnntPLL78sHx8fNW/eXHfccYfb/kePHq1p06bp3nvvVUxMjD755BMlJCRIkoKDgzVu3Dht375dXl5e6tixo7766iu3kTEAQPXEbIQAAPwJZ5rFEAAAiWu2AAAAAKBCELYAAAAAoAJwzRYAAH8CZ+MDAM6GkS0AAAAAqACELQAAAACoAIQtAAAAAKgAhC0AAAAAqACELQAAAACoAIQtAAAAAKgAhC0AAAAAqACELQAAAACoAP8PUzm4vjIBk64AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "this is the minimum price: 125.94427398105121\n" + ] + } + ], + "source": [ + "# f(x)=.1*(x**2)-(9*x)+4500\n", + "# gradient = 0.2x−9\n", + "# xnew = xold - alpha * gradient\n", + "\n", + "\n", + "def grad_desc (steps,learn,x):\n", + " \n", + " x_points = []\n", + " x = x\n", + "\n", + " for _ in range(steps):\n", + "\n", + " x -= (learn * ((0.2*x)-9))\n", + " x_points.append(x)\n", + "\n", + " return x_points\n", + "\n", + "gd_units = grad_desc(steps=1000,learn=.02,x=4500) # - gradient descent\n", + "\n", + "\n", + "df_gd_units = pd.DataFrame(gd_units) #convert to DF\n", + "minimum = df_gd_units.min() # minimum price - convergence \n", + "\n", + "\n", + "#plot\n", + "def visualize(f, x=None):\n", + " xArray = np.linspace(-10, 10, 100) \n", + " yArray = f(xArray)\n", + " sns.lineplot(x=xArray, y=yArray)\n", + " \n", + " if x is not None:\n", + " assert type(x) in [np.ndarray, list] \n", + " if type(x) is list: \n", + " x = np.array(x)\n", + " y = f(x)\n", + " sns.scatterplot(x=x, y=y, color='red')\n", + "\n", + "-------\n", + "\n", + "plt.figure(figsize=(10, 5))\n", + "sns.lineplot(y=gd_units, x=range(len(gd_units))) # Plot descent\n", + "sns.scatterplot(y=[min(gd_units)], x=[gd_units.index(min(gd_units))], color='red', s=100) # Mark minimum\n", + "plt.xlabel(\"Steps\")\n", + "plt.ylabel(\"X Value\")\n", + "plt.title(\"Gradient Descent Convergence\")\n", + "plt.show()\n", + "\n", + "\n", + "print(f'this is the minimum price: {float(minimum.iloc[0])}')\n" + ] + }, + { + "cell_type": "markdown", + "id": "aabad82c", + "metadata": {}, + "source": [ + "## Linear Algebra" + ] + }, + { + "cell_type": "markdown", + "id": "6753636d", + "metadata": {}, + "source": [ + "### Exercise 1: Sum of two matrices\n", + "\n", + "Suppose we have two matrices A and B.\n", + "\n", + "```py\n", + "A = [[1,2],[3,4]]\n", + "B = [[4,5],[6,7]]\n", + "\n", + "then we get\n", + "A+B = [[5,7],[9,11]]\n", + "A-B = [[-3,-3],[-3,-3]]\n", + "```\n", + "\n", + "Make the sum of two matrices using Python with NumPy" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "9e200c32", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Matrix 1: [[1, 2], [3, 4]] \n", + "Matrix 2: [[4, 5], [6, 7]]\n", + "\n", + "Both added:\n", + "[[ 5 7]\n", + " [ 9 11]]\n" + ] + } + ], + "source": [ + "# import numpy as np\n", + "\n", + "import numpy as np\n", + "\n", + " \n", + "# Creating first matrix\n", + "\n", + "mtx_1 = [[1,2],[3,4]]\n", + "mtx_1_array = np.array(mtx_1)\n", + "\n", + " \n", + "# Creating second matrix\n", + "\n", + "mtx_2 = [[4,5],[6,7]]\n", + "mtx_2_array = np.array(mtx_2)\n", + "# Print elements\n", + "\n", + "print(f'''Matrix 1: {mtx_1} \n", + "Matrix 2: {mtx_2}''')\n", + " \n", + "# Adding both matrices\n", + "\n", + "add = mtx_1_array+mtx_2_array\n", + "print (f'''\n", + "Both added:\n", + "{add}''')\n" + ] + }, + { + "cell_type": "markdown", + "id": "93bfb6cc", + "metadata": {}, + "source": [ + "### Exercise 2: Sum of two lists\n", + "\n", + "There will be many situations in which we'll have to find an index-wise summation of two different lists. This can have possible applications in day-to-day programming. In this exercise, we will solve the same problem in various ways in which this task can be performed.\n", + "\n", + "We have the following two lists:\n", + "\n", + "```py\n", + "list1 = [2, 5, 4, 7, 3]\n", + "list2 = [1, 4, 6, 9, 10]\n", + "```\n", + "\n", + "Now let's use Python code to demonstrate addition of two lists." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "867b70fc", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Original list 1 : [2, 5, 4, 7, 3]\n", + "Original list 2 : [1, 4, 6, 9, 10]\n", + "Resulting list is : [3, 9, 10, 16, 13]\n" + ] + } + ], + "source": [ + "# Naive method\n", + "\n", + "# Initializing lists\n", + "list1 = [2, 5, 4, 7, 3]\n", + "list2 = [1, 4, 6, 9, 10]\n", + " \n", + "# Printing original lists\n", + "print (\"Original list 1 : \" + str(list1))\n", + "print (\"Original list 2 : \" + str(list2))\n", + " \n", + "# Using naive method to add two lists \n", + "res_list = []\n", + "for i in range(0, len(list1)):\n", + " res_list.append(list1[i] + list2[i])\n", + " \n", + "# Printing resulting list \n", + "print (\"Resulting list is : \" + str(res_list))" + ] + }, + { + "cell_type": "markdown", + "id": "7a063d7f", + "metadata": {}, + "source": [ + "Now use the following three different methods to make the same calculation: sum of two lists" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "681930a3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "List 1 : [2, 5, 4, 7, 3]\n", + "List 2 : [1, 4, 6, 9, 10]\n", + "\n", + "Result: [3, 9, 10, 16, 13]\n" + ] + } + ], + "source": [ + "# Use list comprehension to perform addition of the two lists:\n", + "\n", + "\n", + "# Initializing lists\n", + "\n", + "list1 = [2, 5, 4, 7, 3]\n", + "list2 = [1, 4, 6, 9, 10]\n", + " \n", + "# Printing original lists\n", + "\n", + "print (f'''\n", + "List 1 : {list1}\n", + "List 2 : {list2}\n", + "''')\n", + " \n", + "# Using list comprehension to add two lists\n", + "\n", + "result = [ list1[i]+list2[i] for i in range(len(list1))]\n", + "\n", + " \n", + "# Printing resulting list \n", + "print(f'Result: {result}')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "a3a8a425", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "List 1 : [2, 5, 4, 7, 3]\n", + "List 2 : [1, 4, 6, 9, 10]\n", + "\n", + "Result: [3, 9, 10, 16, 13]\n" + ] + } + ], + "source": [ + "# Use map() + add():\n", + "def add(x, y):\n", + " return x + y\n", + "\n", + "# Initializing lists\n", + "\n", + "list1 = [2, 5, 4, 7, 3]\n", + "list2 = [1, 4, 6, 9, 10]\n", + " \n", + "# Printing original lists\n", + "\n", + "print (f'''\n", + "List 1 : {list1}\n", + "List 2 : {list2}\n", + "''')\n", + "\n", + " \n", + "# Using map() + add() to add two lists\n", + "result_map = list(map(add, list1, list2))\n", + " \n", + "# Printing resulting list \n", + "print(f'Result: {result_map}')" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "1708d7ee", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "List 1 : [2, 5, 4, 7, 3]\n", + "List 2 : [1, 4, 6, 9, 10]\n", + "\n", + "Result: [3, 9, 10, 16, 13]\n" + ] + } + ], + "source": [ + "# Use zip() + sum():\n", + "\n", + "\n", + "# Initializing lists\n", + "\n", + "list1 = [2, 5, 4, 7, 3]\n", + "list2 = [1, 4, 6, 9, 10]\n", + " \n", + "# Printing original lists\n", + "\n", + "print (f'''\n", + "List 1 : {list1}\n", + "List 2 : {list2}\n", + "''')\n", + "\n", + " \n", + "# Using zip() + sum() to add two lists\n", + "result_zip = [sum(pair) for pair in zip(list1, list2)]\n", + " \n", + "# Printing resulting list \n", + "print(f'Result: {result_zip}')" + ] + }, + { + "cell_type": "markdown", + "id": "1aef1bd2", + "metadata": {}, + "source": [ + "### Exercise 3: Dot multiplication\n", + "\n", + "We have two matrices:\n", + "\n", + "```py\n", + "matrix1 = [[1,7,3],\n", + " [4,5,2],\n", + " [3,6,1]]\n", + "matrix2 = [[5,4,1],\n", + " [1,2,3],\n", + " [4,5,2]]\n", + "```\n", + "\n", + "A simple technique but expensive method for larger input datasets is using *for loops*. In this exercise, we will first use nested *for loops* to iterate through each row and column of the matrices, and then we will perform the same multiplication using NumPy." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "840e7d0e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[24, 33, 28], [33, 36, 23], [25, 29, 23]]\n" + ] + } + ], + "source": [ + "# Using a for loop input two matrices of size n x m\n", + "matrix1 = [[1,7,3],\n", + " [4,5,2],\n", + " [3,6,1]]\n", + "matrix2 = [[5,4,1],\n", + " [1,2,3],\n", + " [4,5,2]]\n", + " \n", + "res = [[0 for x in range(3)] for y in range(3)]\n", + " \n", + "# Explicit for loops\n", + "for i in range(len(matrix1)):\n", + " for j in range(len(matrix2[0])):\n", + " for k in range(len(matrix2)):\n", + " \n", + " # Resulting matrix\n", + " res[i][j] += matrix1[i][k] * matrix2[k][j]\n", + " \n", + "print(res)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "db6c3355", + "metadata": {}, + "outputs": [], + "source": [ + "# Import libraries\n", + "\n", + " \n", + "# Input two matrices\n", + "\n", + " \n", + "# This will return dot product\n", + "\n", + " \n", + "# Print resulting matrix\n" + ] + }, + { + "cell_type": "markdown", + "id": "785f6c30", + "metadata": {}, + "source": [ + "Source:\n", + "\n", + "https://www.youtube.com/channel/UCXq-PLvYAX-EufF5RAPihVg\n", + "\n", + "https://www.geeksforgeeks.org/\n", + "\n", + "https://medium.com/@seehleung/basic-calculus-explained-for-machine-learning-c7f642e7ced3\n", + "\n", + "https://blog.demir.io/understanding-gradient-descent-266fc3dcf02f" + ] + } + ], + "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.11.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}