From 1c01c4170b6392b0160281d2d5bef05bf7f2b33b Mon Sep 17 00:00:00 2001 From: agherasie Date: Sat, 11 Nov 2023 11:43:02 +0100 Subject: [PATCH] ai: removed answers and added pandas exercise --- AI/Day2/data/houses.csv | 6 ++ AI/Day2/linear-regression.ipynb | 106 ++++++++++---------------------- 2 files changed, 40 insertions(+), 72 deletions(-) create mode 100644 AI/Day2/data/houses.csv diff --git a/AI/Day2/data/houses.csv b/AI/Day2/data/houses.csv new file mode 100644 index 0000000..1f44ec7 --- /dev/null +++ b/AI/Day2/data/houses.csv @@ -0,0 +1,6 @@ +price,size +100000,100 +200000,200 +300000,300 +400000,400 +500000,500 \ No newline at end of file diff --git a/AI/Day2/linear-regression.ipynb b/AI/Day2/linear-regression.ipynb index d645420..b032b44 100644 --- a/AI/Day2/linear-regression.ipynb +++ b/AI/Day2/linear-regression.ipynb @@ -2,13 +2,14 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", - "from typing import Tuple" + "from typing import Tuple\n", + "import pandas as pd" ] }, { @@ -61,7 +62,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -71,15 +72,16 @@ "# It goes without saying that you must use some of the libs from yesterday in order to solve this exercise !\n", "###\n", "\n", - "def plot_prices(data: np.array):\n", + "def plot_prices(x: np.array, y: np.array):\n", " \"\"\"This function should plot house the given house prices\"\"\"\n", - " pass\n", + " plt.plot(x, y)\n", "\n", "def get_data(filepath = \"./data/houses.csv\"):\n", " \"\"\"This function should retrieve the data from a csv file and transform it into a numpy array\"\"\"\n", - " pass\n", + " df = pd.read_csv(filepath)\n", + " return np.array(df[\"price\"]), np.array(df[\"size\"])\n", "\n", - "plot_prices(get_data())" + "plot_prices(*get_data())" ] }, { @@ -129,7 +131,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -139,7 +141,7 @@ "def forward(x):\n", " \"\"\"This method should take a number as input and return a prediction by applying the linear regression formula\"\"\"\n", " ## apply linear regression to x and return the result\n", - " return w * x + b\n", + " return None\n", "\n", "assert forward(15) == 18.6, \"The forward method is incorrectly implemented\"" ] @@ -201,7 +203,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -219,8 +221,8 @@ "\n", " ## Compute and return the partial derivatives\n", " for i in range(N):\n", - " dl_dw += -2 * x[i] * (y[i] - (w * x[i] + b))\n", - " dl_db += -2 * (y[i] - (w * x[i] + b))\n", + " dl_dw += None\n", + " dl_db += None\n", " dl_dw *= 1/N\n", " dl_db *= 1/N\n", "\n", @@ -239,13 +241,13 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def optimizer(w: float, b: float, dl_dw: float, dl_db: float, alpha: float) -> Tuple[float, float]:\n", - " w = w - alpha * dl_dw\n", - " b = b - alpha * dl_db\n", + " ## Update w and b\n", + " ##\n", " return w, b\n", "\n", "assert optimizer(w, b, dl_dw, dl_db, alpha=5e-4) == (2.2, 0.06), \"Not correct\"" @@ -281,12 +283,12 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "####################### Data #########################\n", - "x_values = np.linspace(100, 500, 100) # Choose the amount of samples of data you wish to train on\n", + "x_values = np.linspace(100, 500, None) # Choose the amount of samples of data you wish to train on\n", "x_train = np.array(x_values, dtype=np.float32)\n", "y_values = [100*i + 1 for i in x_values]\n", "y_train = np.array(y_values, dtype=np.float32)\n", @@ -300,8 +302,8 @@ "w = 0.0\n", "b = 0.0\n", "################## Hyperparameters ##################\n", - "EPOCH = 1000 # Choose the amount of times you wish to iterate on the training data\n", - "LR = 5e-4 # Choose how quick your neural network will learn (faster != better)\n", + "EPOCH = None # Choose the amount of times you wish to iterate on the training data\n", + "LR = None # Choose how quick your neural network will learn (faster != better)\n", "#####################################################" ] }, @@ -335,30 +337,9 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "for e in range(EPOCH * 100):\n", " dl_dw = 0.0\n", @@ -367,7 +348,7 @@ " # Logging predictions\n", " epoch_preds = []\n", " for i in range(N):\n", - " epoch_preds.append(w * x_train[i] + b)\n", + " epoch_preds.append(forward(x_train[i]))\n", " if e % 25 == 0:\n", " ratio = np.all(epoch_preds / y_train >= 0.95) and np.all((epoch_preds / y_train) <= 1.05)\n", " if ratio == True:\n", @@ -377,24 +358,24 @@ "\n", " for x, y in zip(x_train, y_train):\n", " # Prediction\n", - " pred = w * x + b\n", + " pred = None\n", "\n", " # Gradient descent\n", - " dl_dw += -2 * x * (y - pred)\n", - " dl_db += -2 * (y - pred)\n", + " dl_dw += None\n", + " dl_db += None\n", "\n", " # Getting the average values\n", " dl_dw *= 1/N\n", " dl_db *= 1/N\n", "\n", " # Optimization\n", - " w = w - LR * dl_dw\n", - " b = b - LR * dl_db\n", + " w = None\n", + " b = None\n", "\n", " # Logging loss\n", " total_error = 0.0\n", " for i in range(N):\n", - " total_error += (y_train[i] - (w * x_train[i] + b)) ** 2\n", + " total_error += None\n", " loss_history.append(total_error / N)\n", "\n", "\n", @@ -403,20 +384,9 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGdCAYAAAA44ojeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB8RUlEQVR4nO3dd3gU1dfA8e+m95CEkAIplNB7D4hB6QqCqCAogiLgKy0CUhQp0kE6Niw0C/wUQbEgiIBCKCEQaggIgVASQgnpfe/7R8jCkkJC293kfJ5nn4eduTNzZidkT2buvUejlFIIIYQQQhgRM0MHIIQQQghxN0lQhBBCCGF0JEERQgghhNGRBEUIIYQQRkcSFCGEEEIYHUlQhBBCCGF0JEERQgghhNGRBEUIIYQQRsfC0AHcD61Wy+XLl3F0dESj0Rg6HCGEEEIUg1KKpKQkvL29MTMr+h6JSSYoly9fxsfHx9BhCCGEEOI+XLhwgUqVKhXZxiQTFEdHRyD3BJ2cnAwcjRBCCCGKIzExER8fH933eFFMMkHJe6zj5OQkCYoQQghhYorTPUM6yQohhBDC6EiCIoQQQgijIwmKEEIIIYyOSfZBKQ6lFNnZ2eTk5Bg6FCHEY2ZpaYm5ubmhwxBCPIBSmaBkZmYSExNDamqqoUMRQhiARqOhUqVKODg4GDoUIcR9KnUJilarJSoqCnNzc7y9vbGyspLJ3IQoQ5RSXL16lYsXLxIQECB3UoQwUaUuQcnMzESr1eLj44OdnZ2hwxFCGIC7uzvnzp0jKytLEhQhTFSp7SR7ryl0hRCll9w1FcL0ybe4EEIIIYxOiRKUKVOmoNFo9F6enp669UoppkyZgre3N7a2trRt25bjx4/r7SMjI4Phw4dTvnx57O3tee6557h48eLDORtRIv7+/ixatEj3XqPRsHHjxgfa58PYx4NYuXIl5cqVe+D9xMbG0qFDB+zt7R/K/gxpx44daDQabt68WextBgwYQI8ePR5ZTEIIcS8lvoNSp04dYmJidK+jR4/q1s2dO5cFCxawbNkyQkND8fT0pEOHDiQlJenaBAcHs2HDBtauXcuuXbtITk6ma9euMhzYCMTExNClS5ditZ0yZQoNGzZ8oH0Ys4ULFxITE0N4eDinTp16rMc+d+4cGo2G8PDwh7K/Vq1aERMTg7Ozc7G3Wbx4MStXrnwoxxdCiPtR4k6yFhYWendN8iilWLRoEe+//z49e/YEYNWqVXh4ePDdd98xZMgQEhIS+Oqrr1izZg3t27cH4JtvvsHHx4e//vqLTp06PeDplD2ZmZlYWVk9lH0VdF0NsQ9jcObMGZo0aUJAQMB97yMrKwtLS8uHGJW+4l57KyurEl+XkiQzQgjxKJT4Dsrp06fx9vamcuXKvPzyy5w9exaAqKgoYmNj6dixo66ttbU1QUFBhISEABAWFkZWVpZeG29vb+rWratrU5CMjAwSExP1XqVR27ZtGTZsGMOGDaNcuXK4ubkxceJElFK6Nv7+/kyfPp0BAwbg7OzMoEGDAAgJCeHJJ5/E1tYWHx8fRowYQUpKim67uLg4unXrhq2tLZUrV+bbb7/Nd/y7H89cvHiRl19+GVdXV+zt7WnatCn79u1j5cqVTJ06lcOHD+se9eX9tX33Po4ePcrTTz+Nra0tbm5uDB48mOTkZN36vEcJH330EV5eXri5uTF06FCysrJ0bT755BMCAgKwsbHBw8ODF1988Z6f5caNG6levTo2NjZ06NCBCxcu6K3ftGkTTZo0wcbGhipVqjB16lSys7N1n/H69etZvXo1Go2GAQMGABAdHU337t1xcHDAycmJXr16ceXKFd0+8+4qff3111SpUgVra2uUUiQkJDB48GAqVKiAk5MTTz/9NIcPHy409sqVKwPQqFEjNBoNbdu21fusZs2ahbe3N9WrVwdyk/ymTZvi6OiIp6cnffv2JS4uTre/ux/x5D0G+/PPP6lVqxYODg507tyZmJiYfNclT9u2bRkxYgRjx47F1dUVT09PpkyZohf3yZMneeKJJ7CxsaF27dr89ddfBn/kJ4QouZykJDLPnTN0GCVLUFq0aMHq1av5888/+eKLL4iNjaVVq1Zcv36d2NhYADw8PPS28fDw0K2LjY3FysoKFxeXQtsUZNasWTg7O+tePj4+JQkbpRSpmdkGed2ZXBTHqlWrsLCwYN++fSxZsoSFCxfy5Zdf6rWZN28edevWJSwsjA8++ICjR4/SqVMnevbsyZEjR1i3bh27du1i2LBhum0GDBjAuXPn+Pvvv/nxxx/55JNP9L7E7pacnExQUBCXL1/ml19+4fDhw4wdOxatVkvv3r0ZPXq03uO+3r1759tHamoqnTt3xsXFhdDQUH744Qf++usvvbgAtm/fzpkzZ9i+fTurVq1i5cqVuoTnwIEDjBgxgg8//JDIyEg2b97Mk08+WeRnmJqayowZM1i1ahW7d+8mMTGRl19+Wbf+zz//5NVXX2XEiBGcOHGCzz//nJUrVzJjxgwAQkND6dy5M7169SImJobFixejlKJHjx7cuHGDnTt3snXrVs6cOZPvvP/77z/+97//sX79et0jmmeffZbY2Fh+//13wsLCaNy4Me3atePGjRsFxr9//34A/vrrL2JiYvjpp59067Zt20ZERARbt27l119/BXLvpEybNo3Dhw+zceNGoqKidElVUZ/RRx99xJo1a/jnn3+Ijo5mzJgxRW6zatUq7O3t2bdvH3PnzuXDDz9k69atQO78Qz169MDOzo59+/axfPly3n///SL3J4QwLkqr5ebGjZzp8gwXR41CGbjrRYke8dzZt6BevXoEBgZStWpVVq1aRcuWLYH8w/uUUvcc8nevNhMmTGDUqFG694mJiSVKUtKycqg96c9it3+YTnzYCTur4n/MPj4+LFy4EI1GQ40aNTh69CgLFy7U3SkBePrpp/W+TF577TX69u1LcHAwAAEBASxZsoSgoCA+/fRToqOj+eOPP9i7dy8tWrQA4KuvvqJWrVqFxvHdd99x9epVQkNDcXV1BaBatWq69Q4ODoU+7svz7bffkpaWxurVq7G3twdg2bJldOvWjTlz5uiSWRcXF5YtW4a5uTk1a9bk2WefZdu2bQwaNIjo6Gjs7e3p2rUrjo6O+Pn50ahRoyI/w6ysLJYtW6Y711WrVlGrVi32799P8+bNmTFjBuPHj6d///4AVKlShWnTpjF27FgmT56Mu7s71tbW2Nra6s5v69atHDlyhKioKN3P3po1a6hTpw6hoaE0a9YMyE0W1qxZg7u7OwB///03R48eJS4uDmtrawA++ugjNm7cyI8//sjgwYPzxZ+3rZubW77P197eni+//FLv0c4bb7yh+3eVKlVYsmQJzZs3Jzk5udCZVLOysvjss8+oWrUqAMOGDePDDz8s8nOtX78+kydPBnJ/xpYtW8a2bdvo0KEDW7Zs4cyZM+zYsUMX84wZM+jQoUOR+xRCGIf0iAhiP5xG2qFDue+tNew9/BuBjZ8zWEwPNMzY3t6eevXqcfr0ad0vpbvvhMTFxem+iDw9PcnMzCQ+Pr7QNgWxtrbGyclJ71VatWzZUi9ZCwwM5PTp03qdiJs2baq3TVhYGCtXrsTBwUH36tSpk25W3YiICCwsLPS2q1mzZpGjU8LDw2nUqJEuObkfERERNGjQQJecALRu3RqtVktkZKRuWZ06dfQm0/Ly8tLd3enQoQN+fn5UqVKFfv368e23396zhEFh5xoREQHkfl4ffvih3uc1aNCgIssjRERE4OPjo5cY165dW2+/AH5+froEI+9YycnJuLm56R0vKiqKM2fOFHkeBalXr16+fieHDh2ie/fu+Pn54ejoqHskFB0dXeh+7OzsdMkJ6H/mhalfv77e+zu3iYyMxMfHRy+hat68ebHOSQhhWFeXLiPqhRdzkxNbG7Z3rcRrr9xgatQnZORkGCyuB5pJNiMjg4iICNq0aUPlypXx9PRk69atur9wMzMz2blzJ3PmzAGgSZMmWFpasnXrVnr16gXkjvo4duwYc+fOfcBTKZytpTknPjRMB1xby4c/i+WdX/iQe3t9yJAhjBgxIl9bX19fXTJQksmrbG1tHyxIir4zdufyuzuSajQatFotAI6Ojhw8eJAdO3awZcsWJk2axJQpUwgNDS0ywSrouHnLtFotU6dO1XXmvpONjU2JzuXu5QVdGy8vL3bs2JFv2/sZvnz3/lNSUujYsSMdO3bkm2++wd3dnejoaDp16kRmZmah+ynoM7/X48iirlNx7pQKIYyTZaVKoNVyobkvs5rHcM0xFhtzW3pU62HQuEqUoIwZM4Zu3brh6+tLXFwc06dPJzExkf79+6PRaAgODmbmzJkEBAQQEBDAzJkzsbOzo2/fvkDuyICBAwcyevRo3NzccHV1ZcyYMdSrV083qudR0Gg0JXrMYkh79+7N9/5e9UQaN27M8ePH9R7B3KlWrVpkZ2dz4MAB3V+1kZGRRc6LUb9+fb788ktu3LhR4F0UKyurew4Nr127NqtWrSIlJUX3xbp7927MzMx0HTyLw8LCgvbt29O+fXsmT55MuXLl+PvvvwtMMIBCz7VmzZpA7ucVGRlZ6OdV2LlER0dz4cIF3V2UEydOkJCQUOSjssaNGxMbG4uFhQX+/v7FOlbeHZLiDL0/efIk165dY/bs2bq4Dhw4UKzjPEw1a9YkOjqaK1eu6O6GhoaGPvY4hBD3lnb0GDkJCTg80ZpsbTa/VU/m94GOHKlwGYDO/p0Z1WQUXg5eBo2zRN/aFy9epE+fPly7dg13d3datmzJ3r178fPzA2Ds2LGkpaXx9ttvEx8fT4sWLdiyZQuOjo66fSxcuBALCwt69epFWloa7dq1Y+XKlVIv45YLFy4watQohgwZwsGDB1m6dCnz588vcptx48bRsmVLhg4dyqBBg7C3t9d1pFy6dCk1atSgc+fODBo0iOXLl2NhYUFwcHCRd0n69OnDzJkzdaNGvLy8OHToEN7e3gQGBuLv709UVBTh4eFUqlQJR0dHXR+LPK+88gqTJ0+mf//+TJkyhatXrzJ8+HD69etX5CO9O/3666+cPXuWJ598EhcXF37//Xe0Wi01atQodBtLS0uGDx/OkiVLsLS0ZNiwYbRs2VKXsEyaNImuXbvi4+PDSy+9hJmZGUeOHOHo0aNMnz69wH22b9+e+vXr88orr7Bo0SKys7N5++23CQoKyvfI7e7tAgMD6dGjB3PmzKFGjRpcvnyZ33//nR49ehS4bYUKFbC1tWXz5s1UqlQJGxubQof9+vr6YmVlxdKlS3nrrbc4duwY06ZNK+ojfSQ6dOhA1apV6d+/P3PnziUpKUnXSVburAhhHLLj47m6cBE3f/gBC3d3bqyYyuxji/nv5n9QAWq41GBc83E082xm6FCBEvZBWbt2LZcvXyYzM5NLly6xfv16ateurVuv0WiYMmUKMTExpKens3PnTurWrau3DxsbG5YuXcr169dJTU1l06ZNJR6VU5q99tprpKWl0bx5c4YOHcrw4cML7Eh5p/r167Nz505Onz5NmzZtaNSoER988AFeXrez3xUrVuDj40NQUBA9e/bUDXstjJWVFVu2bKFChQo888wz1KtXj9mzZ+sSyRdeeIHOnTvz1FNP4e7uzvfff59vH3Z2dvz555/cuHGDZs2a8eKLL9KuXTuWLVtW7M+jXLly/PTTTzz99NPUqlWLzz77jO+//546deoUuo2dnR3jxo2jb9++BAYGYmtry9q1a3XrO3XqxK+//srWrVtp1qwZLVu2ZMGCBbpEuyB5w2VdXFx48sknad++PVWqVGHdunVFxq/RaPj999958skneeONN6hevTovv/wy586dKzRJs7CwYMmSJXz++ed4e3vTvXv3Qvfv7u7OypUr+eGHH6hduzazZ8/mo48+KjKmR8Hc3JyNGzeSnJxMs2bNePPNN5k4cSJQ+GMzIcTjoXJyiF+7lrOdu3Dzf/8DpYjwtyB4yzD+u/kfztbOTGwxkXVd1xlNcgKgUSUdB2sEEhMTcXZ2JiEhIV+H2fT0dKKioqhcubLJ/WJs27YtDRs21Jt+XghTtXv3bp544gn+++8/vQ65j4Mp/x4Q4mFKCw8n9sNppJ84AUCyrxuLglI4Uikbc405vWr0YmjDoThbP57JGYv6/r6baXTMEEIYvQ0bNuDg4EBAQAD//fcfI0eOpHXr1o89ORFC5MqIiuJcn76gFFo7G356ypof695Ea6ahuWdzxjUfR3WX4vcHfNwkQRFCPBRJSUmMHTuWCxcuUL58edq3b3/P/lNCiEfHunJl6NCGozdPsKRlPAn22XjbV2RMszG0921v9P3DJEExIgUNRRXCVLz22mu89tprhg5DiDIrNSyMuI/mU3HBfFJcbFkWvowfG+8hR6OwMbfl7Xpv8Hqd17GxMI3HnpKgCCGEECYsKy6OuI8+IvGXTQDsm/YO49pcIDEzETTQyb8To5uMNviw4ZKSBEUIIYQwQSorixvffsu1pcvQpqSgNBpCmznxeb1jJGVqqO5SnfHNxxvVyJySkARFCCGEMDEp+/ZzZfo0Mk7/B0CcvzMLg5I5452Cs3U5JjYczgvVX8DCzHS/5k03ciGEEKKMStm9m4zT/5HpaMPqJ7VsrZeMxsyc3tVfYljDYZSzKWfoEB+YJChCCCGEkVOZmWTfuIGlpydKKcKfqcrJk4581ziVFFsNzTybM67ZOGq4Fj7LtqmRBEUIIYQwYsm7d3Nl+gzMHB3J+GQKcw7M5cCVA9AavOy9+bDpGDr4dTD6YcMlVaKp7kXp4u/vrzdrbd507g/iYezjUVNKMXjwYFxdXdFoNISHhxs6JJO2Y8cONBpNkcUnhRAll3X5MheHj+DCwDfJjIri5rlTjPimNweuHMDa3Jq3G7zNzz1+pqN/x1KXnIAkKOIOMTExdOnSpVhtp0yZQsOGDR9oH4ayefNmVq5cya+//kpMTAx169Z95InVgAED0Gg0eq+WLVvqtcnIyGD48OGUL18ee3t7nnvuOS5evPjIYhJCGCdtRgbXPvuMM888S9LWrSgzDVtbWDNkYBYxLoqOfh35pccv/F/D/8PWovCir6ZOHvGYuMzMTKysrB7Kvjw9PY1iH4/amTNn8PLyolWrVg9931lZWVhaWha4rnPnzqxYsUL3/u7rFhwczKZNm1i7di1ubm6MHj2arl27EhYWJtW+hSgjsi5f5vyA18mKjgYgqrIdy57O4EKFHKqVC2BC8wk092pu4CgfD7mDYkTatm3LsGHDGDZsGOXKlcPNzY2JEydyZz1Hf39/pk+fzoABA3B2dmbQoEEAhISE8OSTT2Jra4uPjw8jRowgJSVFt11cXBzdunXD1taWypUr8+233+Y7/t13ES5evMjLL7+Mq6sr9vb2NG3alH379rFy5UqmTp3K4cOHdXcDVq5cWeA+jh49ytNPP42trS1ubm4MHjyY5ORk3foBAwbQo0cPPvroI7y8vHBzc2Po0KFkZWXp2nzyyScEBARgY2ODh4cHL774YqGf4fXr1+nTpw+VKlXCzs6OevXq6VVaHjBgAMOHDyc6OhqNRoO/vz/+/v4APP/887pleTZt2kSTJk2wsbGhSpUqTJ06lezsbL3P7LPPPqN79+7Y29szffr0QmOztrbG09NT93J1ddWtS0hI4KuvvmL+/Pm0b9+eRo0a8c0333D06FH++uuvQveplGLu3LlUqVIFW1tbGjRowI8//qhbn/f45bfffqNBgwbY2NjQokULjh49qref9evXU6dOHaytrfH39883RX1GRgZjx47Fx8cHa2trAgIC+Oqrr/TahIWF0bRpU+zs7GjVqhWRkZG6dYcPH+app57C0dERJycnmjRpwoEDBwo9LyHKKgsPD7QOtqQ4W7P4OTPG9c4goZIz77V4jx+6/VBmkhMAlAlKSEhQgEpISMi3Li0tTZ04cUKlpaXdXqjVKpWRbJiXVlvs8woKClIODg5q5MiR6uTJk+qbb75RdnZ2avny5bo2fn5+ysnJSc2bN0+dPn1anT59Wh05ckQ5ODiohQsXqlOnTqndu3erRo0aqQEDBui269Kli6pbt64KCQlRBw4cUK1atVK2trZq4cKFujaA2rBhg1JKqaSkJFWlShXVpk0b9e+//6rTp0+rdevWqZCQEJWamqpGjx6t6tSpo2JiYlRMTIxKTU3Nt4+UlBTl7e2tevbsqY4ePaq2bdumKleurPr37687Zv/+/ZWTk5N66623VEREhNq0aZPeOYeGhipzc3P13XffqXPnzqmDBw+qxYsXF/oZXrx4Uc2bN08dOnRInTlzRi1ZskSZm5urvXv3KqWUunnzpvrwww9VpUqVVExMjIqLi1NxcXEKUCtWrNAtU0qpzZs3KycnJ7Vy5Up15swZtWXLFuXv76+mTJmi95lVqFBBffXVV+rMmTPq3LlzBcbVv39/5ezsrNzd3VVAQIB688031ZUrV3Trt23bpgB148YNve3q16+vJk2aVOj5vvfee6pmzZpq8+bN6syZM2rFihXK2tpa7dixQyml1Pbt2xWgatWqpbZs2aKOHDmiunbtqvz9/VVmZqZSSqkDBw4oMzMz9eGHH6rIyEi1YsUKZWtrq1asWKE7Tq9evZSPj4/66aef1JkzZ9Rff/2l1q5dq3eMFi1aqB07dqjjx4+rNm3aqFatWum2r1Onjnr11VdVRESEOnXqlPrf//6nwsPDCz2vB1Xg7wEhjFBOWpq69sUXKic1VaVlpalPDn2inlncWDX9vI6qv6q+mrZnmopPizd0mA9NUd/fdysbCUpGslKTnQzzykgu9nkFBQWpWrVqKe0dSc24ceNUrVq1dO/9/PxUjx499Lbr16+fGjx4sN6yf//9V5mZmam0tDQVGRmpAN2XtFJKRUREKKDQBOXzzz9Xjo6O6vr16wXGOnnyZNWgQYN8y+/cx/Lly5WLi4tKTr79Gfz222/KzMxMxcbGKqVyv7j9/PxUdna2rs1LL72kevfurZRSav369crJyUklJiYWGEdxPPPMM2r06NG69wsXLlR+fn6Fxp2nTZs2aubMmXrL1qxZo7y8vPS2Cw4OvmcMa9euVb/++qs6evSo+uWXX1SDBg1UnTp1VHp6ulJKqW+//VZZWVnl265Dhw75rm2e5ORkZWNjo0JCQvSWDxw4UPXp00cpdTt5yEsmlFLq+vXrytbWVq1bt04ppVTfvn1Vhw4d9Pbx7rvvqtq1ayullO7nZ+vWrQXGkXeMv/76S7fst99+U4Du/6Gjo6NauXJl4R/QQyYJijB2Wq1WJW7dqk4/3U6dqFFT7ZkyQnX8oaOqu7KuqruyrhrwxwB18vpJQ4f50JUkQZE+KEamZcuWer2xAwMDmT9/Pjk5Obp+CE2bNtXbJiwsjP/++0/vsY1SCq1WS1RUFKdOncLCwkJvu5o1a1KuXLlC4wgPD6dRo0Z6jyFKKiIiggYNGmBvb69b1rp1a7RaLZGRkXh4eABQp04dvT4WXl5eukcQHTp0wM/PjypVqtC5c2c6d+7M888/j52dXYHHzMnJYfbs2axbt45Lly6RkZFBRkaGXgzFFRYWRmhoKDNmzNDbf3p6OqmpqboY7r4eBendu7fu33Xr1qVp06b4+fnx22+/0bNnz0K3U0oV2jv/xIkTpKen06FDB73lmZmZNGrUSG9ZYGCg7t+urq7UqFGDiIgIIPc6de/eXa9969atWbRoETk5OYSHh2Nubk5QUFCR51i/fn3dv728cmt+xMXF4evry6hRo3jzzTdZs2YN7du356WXXqJq1apF7k+I0irz3DliZ8wk5d9/AUgsZ8XyjL+4nGKGp70no5uOppNfp1I5MqckykaCYmkH71023LEfsru/bLVaLUOGDGHEiBH52vr6+ur6ApTkh93W9sF7hhf15Xrn8rs7lWo0GrRaLQCOjo4cPHiQHTt2sGXLFiZNmsSUKVMIDQ0tMMGaP38+CxcuZNGiRdSrVw97e3uCg4PJzMwscfxarZapU6cWmEDY2NyuBno/yY+Xlxd+fn6cPn0ayO1cnJmZSXx8PC4uLrp2cXFxhXbmzfuMfvvtNypWrKi3ztra+p4x5F2Dgq6TuqPfU3F/Fu68jnn7y4txypQp9O3bl99++40//viDyZMns3btWp5//vli7VuI0kCbmsq1z5dz4+uvUVlZ5FiY8Utz+CkwB2xt+b+6b/B63ddL9cickigbCYpGA1Yl/xIxhL179+Z7HxAQUOQojsaNG3P8+HGqVatW4PpatWqRnZ3NgQMHaN48t4NVZGRkkfNW1K9fny+//JIbN24UeBfFysqKnJycIs+ldu3arFq1ipSUFN2X+O7duzEzM6N69epFbnsnCwsL2rdvT/v27Zk8eTLlypXj77//LjBx+Pfff+nevTuvvvoqkPsFefr0aWrVqlXkMSwtLfOdT+PGjYmMjCz0c30Q169f58KFC7o7DU2aNMHS0pKtW7fSq1cvIHfI9rFjx5g7d26B+6hduzbW1tZER0ff8+7G3r178fX1BSA+Pp5Tp05Rs2ZN3X527dql1z4kJITq1atjbm5OvXr10Gq17Ny5k/bt29/3OVevXp3q1avzzjvv0KdPH1asWCEJiihTrsyZy8116wA4Ws2SL9ppiXXV0MGvA6ObjqaiQ8V77KFskVE8RubChQuMGjWKyMhIvv/+e5YuXcrIkSOL3GbcuHHs2bOHoUOHEh4ezunTp/nll18YPnw4ADVq1KBz584MGjSIffv2ERYWxptvvlnkX8Z9+vTB09OTHj16sHv3bs6ePcv69evZs2cPkDuaKCoqivDwcK5du0ZGRka+fbzyyivY2NjQv39/jh07xvbt2xk+fDj9+vXTPd65l19//ZUlS5YQHh7O+fPnWb16NVqtlho1Cp7OuVq1amzdupWQkBAiIiIYMmQIsbGx9zyOv78/27ZtIzY2lvj4eAAmTZrE6tWrmTJlCsePHyciIoJ169YxceLEYsWeJzk5mTFjxrBnzx7OnTvHjh076NatG+XLl9d9QTs7OzNw4EBGjx7Ntm3bOHToEK+++ir16tUrNClwdHRkzJgxvPPOO6xatYozZ85w6NAhPv74Y1atWqXX9sMPP2Tbtm0cO3aMAQMGUL58eXr06AGgO+a0adM4deoUq1atYtmyZYwZM0b32fTv35833niDjRs3EhUVxY4dO/jf//5XrPNPS0tj2LBh7Nixg/Pnz7N7925CQ0PvmTQKURrceTfy0vMtuOJhzdwXzJj2ohaHKgF82fFLFrRdIMlJQR5pb5hHpMSdZE1EUFCQevvtt9Vbb72lnJyclIuLixo/frxep1k/Pz+9jq159u/frzp06KAcHByUvb29ql+/vpoxY4ZufUxMjHr22WeVtbW18vX1VatXr863L+7qKHru3Dn1wgsvKCcnJ2VnZ6eaNm2q9u3bp5RSKj09Xb3wwguqXLlyuhEwBe3jyJEj6qmnnlI2NjbK1dVVDRo0SCUlJenW9+/fX3Xv3l3vXEaOHKmCgoKUUrmdfYOCgpSLi4uytbVV9evX13XuLMj169dV9+7dlYODg6pQoYKaOHGieu211/SOUVAn2V9++UVVq1ZNWVhY6K3bvHmzbsSTk5OTat68ud6oqrvPtyCpqamqY8eOyt3dXVlaWipfX1/Vv39/FR0drdcuLS1NDRs2TLm6uipbW1vVtWvXfG3uptVq1eLFi1WNGjWUpaWlcnd3V506dVI7d+5USt3uwLpp0yZVp04dZWVlpZo1a5ZvBM2PP/6oateurYtv3rx5+WJ75513lJeXl7KyslLVqlVTX3/9td4x4uPjde0PHTqkABUVFaUyMjLUyy+/rHx8fJSVlZXy9vZWw4YNe6T/R03594AoHbKTklXs3Lnq0oT31OWky2r0jtG5HWBX1FGB3wWqb058o7Jysgwd5mNXkk6yGqXuSO9MRGJiIs7OziQkJODk5KS3Lj09naioKCpXrqzXT8AUtG3bloYNG+pNPy/Eg9ixYwdPPfUU8fHxRXaKLm1M+feAMG1KKRJ/+524uXPJjosD4L3BtvznloWZxowXA15kWKNhuNi43GNPpVNR3993Kxt9UIQQQohHLP3UKa5Mm05qaCgAV10t+LKdlv/csmji0YTxzcdT07WmgaM0HZKgCCGEEA8gJzmFq0sWE//td5CTQ5alGesDYVMLhauTF3Objqazf+cyP2y4pCRBMSI7duwwdAiilGnbti0m+BRXCBOjSPj9d8jJYV8NM1a105DoYs0bdV/njbpvYPcIppsoCyRBEUIIIUoo48wZrKpUQau0rL/0Ozs6ZJGgNeNIFTPa+7ZndNPRVHKsZOgwTZokKEIIIUQx5SQkcHXxYuLXriNjwmBmlNvFyRsnwR+qlavOF83H0dKrpaHDLBUkQRFCCCHuQWm1JPz0E3HzF5Bza66kvzd/zsmO5jhaOTK04VB61+iNhZl8rT4s8kkKIYQQRUg7eozYadNIP3IEgEvlzfiyI5zwM+el6i8yvNHwMjts+FGSBEUIIYQoxLUvvuDqgoWgFOnWGtY9oWFzEw0NvJqwrvl4arnJjMiPiiQoQgghRCFuVKsASvFPHQ3fPG2GdQVPZsmw4cdCavGUYf7+/nqz1mo0GjZu3PhA+3wY+3jUlFIMHjwYV1dXNBoN4eHhhg5JkFvxuGHDhoYOQ5RxqYcOcfOnDSRkJDB7/2x6XZjMyMHmLO9hS69WQ/ilxy90qdxFkpPHQBIUoRMTE0OXLl2K1bawL5OS7MNQNm/ezMqVK/n111+JiYmhbt26jzyx+umnn+jUqRPly5cvNCnKyMhg+PDhlC9fHnt7e5577jkuXryo1yY+Pp5+/frh7OyMs7Mz/fr1y1eVOjo6mm7dumFvb0/58uUZMWIEmZmZj+zchCgNsq9f5/KE9zjfpy+XpkxiwNfP8G3Et+SoHGo3as/PPX5meKPhMqfJYyQJiol7mF88np6eWFtbG3wfj9qZM2fw8vKiVatWeHp6YmHx8J50ZmVlFbg8JSWF1q1bM3v27EK3DQ4OZsOGDaxdu5Zdu3aRnJxM165dycnJ0bXp27cv4eHhbN68mc2bNxMeHk6/fv1063Nycnj22WdJSUlh165drF27lvXr1zN69OiHdo5ClCYqO5sba77hTOcuJGzYAMDOmjlcIYGqzlVZ3mE5i55aJHOaGMKjrVv4aJTmasZDhw5VQ4cOVc7OzsrV1VW9//77+aoZT5s2TfXv3185OTmp1157TSml1O7du1WbNm2UjY2NqlSpkho+fLhKTk7WbXflyhXVtWtXZWNjo/z9/dU333xzz2rGFy5cUL1791YuLi7Kzs5ONWnSRO3du1etWLFCAXqvB61mPG/ePOXp6alcXV3V22+/rTIzM3VtPv74Y1WtWjVlbW2tKlSooF544YVCP8Nr166pl19+WVWsWFHZ2tqqunXrqu+++07veHfG7efnp/z8/PIty/PLL7+oxo0bK2tra1W5cmU1ZcoUlZV1uwIpoD799FP13HPPKTs7OzVp0qTCL7BSKioqSgHq0KFDestv3rypLC0t1dq1a3XLLl26pMzMzNTmzZuVUkqdOHFCAWrv3r26Nnv27FGAOnnypFJKqd9//12ZmZmpS5cu6dp8//33ytrausjqoTdv3lSDBg1S7u7uytHRUT311FN6FY8nT56sGjRooD777DNVqVIlZWtrq1588UW9CsY5OTlq6tSpqmLFisrKyko1aNBA/fHHH3rHKexn6s5j5FXadnJyUr1791aJiYm67X/44QdVt25d3c9Tu3bt9H7O85jy7wHx+KSEhqozz3VXJ2rUVCdq1FS/BtVUz8+oowK/za02nJmTee+diBIpSTXjMpGgaLValZKZYpDXncnFvQQFBSkHBwc1cuRIdfLkSfXNN98oOzs7tXz5cl2bvF/c8+bNU6dPn1anT59WR44cUQ4ODmrhwoXq1KlTavfu3apRo0ZqwIABuu26dOmi6tatq0JCQtSBAwdUq1atlK2tbaEJSlJSkqpSpYpq06aN+vfff9Xp06fVunXrVEhIiEpNTVWjR49WderUUTExMSomJkalpqbm20dKSory9vZWPXv2VEePHlXbtm1TlStXVv3799cdMy/Reuutt1RERITatGmT3jmHhoYqc3Nz9d1336lz586pgwcPqsWLFxf6GV68eFHNmzdPHTp0SJ05c0YtWbJEmZub674Eb968qT788ENVqVIlFRMTo+Li4lRcXJwuycpbppRSmzdvVk5OTmrlypXqzJkzasuWLcrf319NmTJF7zOrUKGC+uqrr9SZM2fUuXPnirzGhSUo27ZtU4C6ceOG3vL69evrkp6vvvpKOTs759uns7Oz+vrrr5VSSn3wwQeqfv36eutv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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "plt.plot(x_train, global_preds[0], label=\"predictions before training\")\n", "plt.plot(x_train, global_preds[1], label=\"predictions after 50 epochs\")\n", @@ -457,17 +427,9 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The house will cost $20293\n" - ] - } - ], + "outputs": [], "source": [ "def predict_house_price(size: int):\n", " size /= 100\n",