"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3e0f8c42",
+ "metadata": {},
+ "source": [
+ "**Remark** You need to iterate several times over the training set. If you have problems of convergence, you need to use a smaller value of $\\alpha$. Values such as $0.000001$ are common."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "9ca79a3d",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Theta = [240.07710713 26.33242457]\n",
+ "Cost = 138034.95779787414\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Your code here\n",
+ "\n",
+ "theta = np.zeros((2))\n",
+ "\n",
+ "\n",
+ "alpha = 0.0001 # i got the best results with those parameters\n",
+ "\n",
+ "max_iter = 1000000\n",
+ "costs = []\n",
+ "\n",
+ "for i in range(0, max_iter): # we could also use a delta on the cost function with a while to stop when the cost is not improving but we wanted to see the curve after x iterations\n",
+ " y_pred = X @ theta\n",
+ " theta[0] = theta[0] - alpha * (1/len(y)) * np.sum(y_pred - y)\n",
+ " theta[1] = theta[1] - alpha * (1/len(y)) * np.sum((y_pred - y) * X[:,1]) \n",
+ "\n",
+ " c = cost_J(y_pred, y) # to plot the costs over iters\n",
+ " costs.append(c)\n",
+ "\n",
+ "y_pred = X @ theta\n",
+ "print(f\"Theta = {theta}\")\n",
+ "print(f\"Cost = {cost_J(y_pred, y)}\")\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "da5121b6",
+ "metadata": {},
+ "source": [
+ "a) Plot the cost value (Equation 2) as a function of the iterations. What do you observe?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 167,
+ "id": "5a34ad43",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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oc2bN3/pmJKSEt10001yOp0aMmSICgsLO7dIK4QVFRVZUVFR1tq1a62DBw9a8+fPt6677jqrurq62f579uyxIiMjrSeffNJ67733rIcfftjq3r27tX///i6uPLjYnedvf/vb1sqVK63y8nLr0KFD1ne/+13L7XZbH330URdXHnzszvUlx44ds/r06WNNmjTJmjlzZtcUG8TsznNDQ4N18803W9/85jetN9980zp27JhVUlJiVVRUdHHlwcXuPP/617+2nE6n9etf/9o6duyYtWPHDisxMdF64IEHurjy4LJt2zZr8eLF1quvvmpJsjZt2tRq/6NHj1rXXHONtWjRIuu9996zfv7zn1uRkZHW9u3bO63GkA4jY8eOtfLy8gKPGxsbraSkJKugoKDZ/nfccYc1ffr0Jm3jxo2z/v3f/71T6wx2duf5X124cMGKiYmxfvnLX3ZWiSGjPXN94cIFa8KECdbzzz9v5ebmEkbawO48r1q1yho0aJB17ty5rioxJNid57y8POtrX/tak7ZFixZZEydO7NQ6Q0lbwsgPf/hD68Ybb2zSNnv2bCsrK6vT6grZr2nOnTunsrIyZWZmBtoiIiKUmZmp0tLSZseUlpY26S9JWVlZLfZH++b5X/3973/X+fPnFRsb21llhoT2zvWjjz6quLg4zZ07tyvKDHrtmeff/e53ysjIUF5enuLj4zVq1Cj95Cc/UWNjY1eVHXTaM88TJkxQWVlZ4Kuco0ePatu2bfrmN7/ZJTWHCxOfhbYXygsWp0+fVmNjY2ABv0vi4+P117/+tdkxXq+32f5er7fT6gx27Znnf/Xf//3fSkpKuuyPH021Z67ffPNNvfDCC6qoqOiCCkNDe+b56NGjev311/Wd73xH27Zt05EjR/T9739f58+f15IlS7qi7KDTnnn+9re/rdOnT+uWW26RZVm6cOGC7r33Xj300ENdUXLYaOmz0Ofz6bPPPlOPHj06fJ8he2QEwWHp0qUqKirSpk2bFB0dbbqckFJbW6s5c+boF7/4hXr37m26nJDm9/sVFxenNWvWKD09XbNnz9bixYu1evVq06WFlJKSEv3kJz/Rs88+q3feeUevvvqqXnvtNT322GOmS8MVCtkjI71791ZkZKSqq6ubtFdXVyshIaHZMQkJCbb6o33zfMmyZcu0dOlS/fGPf1RKSkpnlhkS7M71hx9+qL/97W+aMWNGoM3v90uSunXrpsOHD2vw4MGdW3QQas/fdGJiorp3767IyMhA24gRI+T1enXu3DlFRUV1as3BqD3z/D//8z+aM2eO5s2bJ0lKTk5WfX297rnnHi1evFgREfz/dUdo6bPQ5XJ1ylERKYSPjERFRSk9PV3FxcWBNr/fr+LiYmVkZDQ7JiMjo0l/Sdq1a1eL/dG+eZakJ598Uo899pi2b9+um2++uStKDXp253r48OHav3+/KioqAtu3vvUtTZ06VRUVFfJ4PF1ZftBoz9/0xIkTdeTIkUDYk6T3339fiYmJBJEWtGee//73v18WOC4FQItl1jqMkc/CTjs19ipQVFRkOZ1Oq7Cw0Hrvvfese+65x7ruuussr9drWZZlzZkzx3rwwQcD/ffs2WN169bNWrZsmXXo0CFryZIlXNrbBnbneenSpVZUVJT1yiuvWCdOnAhstbW1pt5C0LA71/+Kq2naxu48V1VVWTExMdaCBQusw4cPW1u3brXi4uKsxx9/3NRbCAp253nJkiVWTEyM9dJLL1lHjx61du7caQ0ePNi64447TL2FoFBbW2uVl5db5eXlliTr6aeftsrLy63KykrLsizrwQcftObMmRPof+nS3v/6r/+yDh06ZK1cuZJLe6/Uz3/+c6tfv35WVFSUNXbsWOutt94KPDd58mQrNze3Sf/f/OY31tChQ62oqCjrxhtvtF577bUurjg42Znn/v37W5Iu25YsWdL1hQchu3/T/4ww0nZ253nv3r3WuHHjLKfTaQ0aNMh64oknrAsXLnRx1cHHzjyfP3/e+tGPfmQNHjzYio6Otjwej/X973/f+vTTT7u+8CDypz/9qdn/5l6a29zcXGvy5MmXjUlNTbWioqKsQYMGWevWrevUGh2WxbEtAABgTsieMwIAAIIDYQQAABhFGAEAAEYRRgAAgFGEEQAAYBRhBAAAGEUYAQAARhFGAACAUYQRAADC1O7duzVjxgwlJSXJ4XBo8+bNtl/DsiwtW7ZMQ4cOldPpVJ8+ffTEE0/Yeo2QXbUXAAC0rr6+XqNHj9b3vvc93Xbbbe16jYULF2rnzp1atmyZkpOTdebMGZ05c8bWa3A7eAAAIIfDoU2bNik7OzvQ1tDQoMWLF+ull17S2bNnNWrUKP30pz/VlClTJEmHDh1SSkqKDhw4oGHDhrV733xNAwAAmrVgwQKVlpaqqKhI7777rmbNmqVvfOMb+uCDDyRJv//97zVo0CBt3bpVAwcO1IABAzRv3jzbR0YIIwAA4DJVVVVat26dNm7cqEmTJmnw4MH6wQ9+oFtuuUXr1q2TJB09elSVlZXauHGj1q9fr8LCQpWVlen222+3tS/OGQEAAJfZv3+/GhsbNXTo0CbtDQ0Nuv766yVJfr9fDQ0NWr9+faDfCy+8oPT0dB0+fLjNX90QRgAAwGXq6uoUGRmpsrIyRUZGNnmuZ8+ekqTExER169atSWAZMWKEpItHVggjAACg3dLS0tTY2KiTJ09q0qRJzfaZOHGiLly4oA8//FCDBw+WJL3//vuSpP79+7d5X1xNAwBAmKqrq9ORI0ckXQwfTz/9tKZOnarY2Fj169dPd911l/bs2aPly5crLS1Np06dUnFxsVJSUjR9+nT5/X6NGTNGPXv21IoVK+T3+5WXlyeXy6WdO3e2uQ7CCAAAYaqkpERTp069rD03N1eFhYU6f/68Hn/8ca1fv14ff/yxevfurfHjx+vHP/6xkpOTJUmffPKJ7rvvPu3cuVPXXnutpk2bpuXLlys2NrbNdRBGAACAUVzaCwAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwKj/D83cC8kh/J9qAAAAAElFTkSuQmCC",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Your code here\n",
+ "plt.plot(range(0, len(costs)), costs)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "63917be0",
+ "metadata": {},
+ "source": [
+ "In this scenario, we can clearly observe a plateau of the cost function. This means that we have reached a local minimum while trying to minimise the cost."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c5903f37",
+ "metadata": {},
+ "source": [
+ "b) Imagine a stopping criterion, i.e. when do we stop iterating on the training set?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "93905b85",
+ "metadata": {},
+ "source": [
+ "The stopping criterion can be a small delta between each calculations of the cost. Like if the cost did not change of at least delta, this means we are in a plateau and should stop."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7667bec1",
+ "metadata": {},
+ "source": [
+ "c) Plot the computed line $h_{\\theta}(\\mathbf{x})$ on top of the scatter plot of exercise 1."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 152,
+ "id": "e80c04b3",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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119/RatWreDt7Y1HHnkE3333HWQyGQoKCiod2549e3D79m289957UKlUOHDggOj67Nmz0alTJyxduhRhYWHw9vYGABQUFOD5559Hw4YN4e/vj759++L48eO6150/fx5Dhw5FUFAQateujW7dumH79u2m/NiIyIYYOBGRQxo5ciTWrVuH8ueQ/+9//0NISAgefPBBo6+bM2cOnn76aZw4cQKDBw/GyJEjkZ+fDwDIyMjAk08+iWHDhuH48eN48cUX8c4770gaz7JlyxATEwMPDw/ExMRg2bJlen3OnTuHn376CRs2bEBqaioA4KmnnkJubi62bt2KlJQUdOnSBf369dON6caNGxg8eDB27NiBY8eOYeDAgRgyZAgyMzOl/qiIyJYEIiIbGTt2rDB06FCj1wEIP//8syAIgpCbmyvUqlVL2Lt3r+66UqkU4uPjdd83a9ZMWLhwoej17777ru77GzduCACErVu3CoIgCPHx8UJERIToPd955x0BgHDt2jWj4yosLBR8fHyE1NRUQRAE4dixY0Lt2rWF69ev6/rMmjVL8PDwEHJzc3Vtv//+u+Dv7y8UFRWJ7teiRQvh66+/Nvp+9913n/DFF18YvU5E9sMZJyJySA0bNsSAAQOwevVqAJrZouTkZIwcObLS13Xo0EH3335+fvD390dubi4A4MyZM+jWrZuof/fu3ascy9q1a9GiRQt07NgRANCpUyc0a9YM//vf/0T9mjVrhoYNG+q+P378OG7cuIH69eujdu3auq+MjAycP38egGbG6Y033kC7du0QEBCA2rVr488//+SME5GDqmXvARARGTNy5Ei88sor+OKLL7BmzRq0b98e7du3r/Q1Hh4eou9lMhnUanW1xrFs2TKcOnUKtWrd+ytTrVZj+fLlmDBhgq7Nz89P9LobN24gODgYu3fv1rtnQEAAAOCNN95AUlIS/u///g8tW7aEj48PnnzySSaXEzkoBk5E5LCGDh2KF154AYmJiVizZg3GjBlTrfu1adMGW7ZsEbUdOXKk0tecPHkSf/zxB3bv3o169erp2vPz8/Hwww/j9OnTaNu2rcHXdunSBdnZ2ahVqxZCQ0MN9tm/fz/GjRuHxx9/HIAm2Lpw4YL0hyIim2LgREQ2VVhYqEuc1qpfvz6aNGmi19fPzw/Dhg3DjBkz8OeffyImJqZa7/3iiy/i008/RXx8PCZMmIDU1FSsXLkSgGZmypBly5ahe/fu6NOnj961bt26YdmyZUbrOkVGRkKpVGLYsGGYP38+WrdujStXrmDz5s14/PHHcf/996NVq1bYsGEDhgwZAplMhhkzZlR7hoyIrIc5TkRkU7t370bnzp1FX3PmzDHaf+TIkTh+/DgefPBBNG3atFrvHRYWhh9//BEbNmxAhw4dsHjxYt2uOkP1o+7cuYNVq1Zh+PDhBu83fPhwfP/99ygpKTF4XSaTYcuWLejTpw/Gjx+P1q1bY8SIEfjnn38QFBQEAPj0009Rt25dPPDAAxgyZAiioqLQpUuXaj0nEVmPTBDK7fUlIqphPvzwQyxZsgQXL16091CIyAlwqY6IapRFixahW7duqF+/Pvbv348FCxZgypQp9h4WETkJBk5EVKOcPXsWH3zwAfLz89G0aVO8/vrrmD59ur2HRUROgkt1RERERBIxOZyIiIhIIgZORERERBIxcCIiIiKSiIETERERkUQMnIiIiIgkYuBEREREJBEDJyIiIiKJGDgRERERSfT/U/rB2yrKbYwAAAAASUVORK5CYII=",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.scatter(dataset[\"living_area\"], dataset[\"rent_price\"])\n",
+ "plt.xlabel(\"Living Area\")\n",
+ "plt.ylabel(\"Rent price\")\n",
+ "\n",
+ "y_regr = theta[0] + theta[1] * X[:,1]\n",
+ "plt.plot(X[:,1], y_regr, color='red', label='Regression line')\n",
+ "\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d1fdf27b",
+ "metadata": {},
+ "source": [
+ "d) Compute the final cost value according to Equation 2 and compare it to the one of exercise 2. What can you conclude?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 153,
+ "id": "5e594f32",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "The best cost value is 138034.95779787409, the exercice 2 cost value is 138034.95779787414\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Your code here\n",
+ "\n",
+ "print(f\"The best cost value is {best_cost}, the exercice 2 cost value is {closed_form_cost}\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "cd10b91b",
+ "metadata": {},
+ "source": [
+ "We took some time to experiment with the alpha and max_iter values to try to get the best possible result. It seems that the closed form formula is the best one but we can get really close by tweaking those two values. "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "54727ff1",
+ "metadata": {},
+ "source": [
+ "## Exercise 4 - Stochastic gradient descent for linear regression"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "32a00957",
+ "metadata": {},
+ "source": [
+ "Implement the stochastic gradient descent algorithm for the previous problem. As seen in the theory, the update rules are:"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "636920d2",
+ "metadata": {},
+ "source": [
+ "
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "3f693388",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "144176.78676766725\n",
+ "[ 0.32486065 28.59143527]\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Your code here\n",
+ "import random\n",
+ "theta = np.zeros((2))\n",
+ "\n",
+ "\n",
+ "alpha = 0.000001 # i got the best results with those parameters\n",
+ "\n",
+ "max_iter = 1000\n",
+ "costs = []\n",
+ "\n",
+ "best_cost = np.inf\n",
+ "\n",
+ "for i in range(0, max_iter): # we could also use a delta on the cost function with a while to stop when the cost is not improving but we wanted to see the curve after x iterations\n",
+ " rand = int(random.random() * X.shape[0])\n",
+ " y_pred_stoch = X[rand] @ theta\n",
+ " theta[0] = theta[0] - alpha * (y_pred_stoch - y[rand])\n",
+ " theta[1] = theta[1] - alpha * (y_pred_stoch - y[rand]) * X[rand,1]\n",
+ "\n",
+ " y_pred = X @ theta\n",
+ " costs.append(cost_J(y_pred, y))\n",
+ "\n",
+ "\n",
+ "y_pred = X @ theta\n",
+ "print(cost_J(y_pred, y))\n",
+ "print(theta)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 178,
+ "id": "edbc5a14",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.plot(range(0, len(costs)), costs)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "cb73d7c1",
+ "metadata": {},
+ "source": [
+ "a) Plot the computed line $h_{\\theta}(\\mathbf{x})$ on top of the scatter plot of exercise 1."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 179,
+ "id": "f73c6af3",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Your code here\n",
+ "plt.scatter(dataset[\"living_area\"], dataset[\"rent_price\"])\n",
+ "plt.xlabel(\"Living Area\")\n",
+ "plt.ylabel(\"Rent price\")\n",
+ "\n",
+ "y_regr = theta[0] + theta[1] * X[:,1]\n",
+ "plt.plot(X[:,1], y_regr, color='red', label='Regression line')\n",
+ "\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "16e1eec7",
+ "metadata": {},
+ "source": [
+ "b) How many samples do you need to visit for reaching the convergence?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "fd7870eb",
+ "metadata": {},
+ "source": [
+ "The biggest improvements are made before the first 300ish iterations but smaller improvements still occur after that. If we were very limited in cpu time, we would tell that the convergence vas reached around 300 samples"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c185d7bc",
+ "metadata": {},
+ "source": [
+ "c) What kind of stopping criterion could we use here?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "235f3ac0",
+ "metadata": {},
+ "source": [
+ "We would use the delta of the global cost function. When we compute the cost function, we can stop the iterations when the result is not improving more than a set delta."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5e7ce003",
+ "metadata": {},
+ "source": [
+ "d) Compute the final cost value according to Equation 2 and compare it to the one of exercise 2 and 3. What can you conclude?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 180,
+ "id": "dbcb6f22",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "144176.78676766725\n",
+ "[ 0.32486065 28.59143527]\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Your code here\n",
+ "y_pred = X @ theta\n",
+ "print(cost_J(y_pred, y))\n",
+ "print(theta)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "27a8e7fd",
+ "metadata": {},
+ "source": [
+ "The result is really close to both of the other methods but the stochastic is way faster because we dont loop trough the whole dataset for each update. The stochastic might have a slightly worse final result because it is harder to find the exact perfect values but its speed and efficency compensates this."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a8a85676",
+ "metadata": {},
+ "source": [
+ "## Exercise 5 - Review questions"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "84f82d3d",
+ "metadata": {},
+ "source": [
+ "a) The linear regression has a mathematical _closed form_ solution. Then, in which conditions would we prefer a gradient descent algorithm to compute the regression model?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "eecbe019",
+ "metadata": {},
+ "source": [
+ "_Your answer here_"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3696b258",
+ "metadata": {},
+ "source": [
+ "b) Outliers in a data set can be defined as values that are out of the \"usual\" range in comparison with other values. They typically come from noise or anomalies in the data capturing process. What is the impact of an outlier in the stochastic gradient descent process? What if we have many outliers? _Hint_: look at the equation of the MSE, and to the equation of the update rule."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4873219d",
+ "metadata": {},
+ "source": [
+ "_Your answer here_"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "22dce221",
+ "metadata": {},
+ "source": [
+ "c) In the case of stochastic gradient descent, what is the danger of having a too large or too small $\\alpha$ value? Could you think of a better (more advanced) strategy as the one stated in Slide 36?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d1536554",
+ "metadata": {},
+ "source": [
+ "_Your answer here_"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "07bdad8b",
+ "metadata": {},
+ "source": [
+ "d) Let's assume we expect that the target variable $y$ has a dependency to the square and to the cube of one of the feature $x_d$ in our multi-variable training set $(x_1, \\ldots, x_d, \\ldots, x_D)$. How would you proceed? Do we need to take precautions in terms of numerical stability?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d4f242c5",
+ "metadata": {},
+ "source": [
+ "_Your answer here_"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b7cf619b",
+ "metadata": {},
+ "source": [
+ "e) _Advanced_. Could we use a descent algorithm without computing the gradient? If yes, give a pseudo code of the algorithm to find $(\\theta_{0}, \\theta_{1})$ using a linear regression $h_{\\theta}(x) = \\theta_0 + \\theta_1 x$."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "89317af1",
+ "metadata": {},
+ "source": [
+ "_Your answer here_"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "2b0997fa",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": ".venv",
+ "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.12.3"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}