done ex6
This commit is contained in:
1 parent
8ec28596c0
commit
d23d2a51c4
1 file changed
+191
-81
@@ -18,7 +18,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 141,
|
"execution_count": 312,
|
||||||
"id": "d6eb2aab",
|
"id": "d6eb2aab",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 142,
|
"execution_count": 313,
|
||||||
"id": "5f3f924f",
|
"id": "5f3f924f",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
@@ -66,7 +66,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 143,
|
"execution_count": 314,
|
||||||
"id": "5108e239",
|
"id": "5108e239",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
@@ -84,7 +84,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 144,
|
"execution_count": 315,
|
||||||
"id": "34222aff",
|
"id": "34222aff",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
@@ -158,7 +158,7 @@
|
|||||||
"4 33 1.5 830"
|
"4 33 1.5 830"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"execution_count": 144,
|
"execution_count": 315,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"output_type": "execute_result"
|
"output_type": "execute_result"
|
||||||
}
|
}
|
||||||
@@ -185,7 +185,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 145,
|
"execution_count": 316,
|
||||||
"id": "ad07d4cd",
|
"id": "ad07d4cd",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
@@ -219,7 +219,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 146,
|
"execution_count": 317,
|
||||||
"id": "ac0c9f07",
|
"id": "ac0c9f07",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
@@ -253,7 +253,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 147,
|
"execution_count": 318,
|
||||||
"id": "6d015af9",
|
"id": "6d015af9",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
@@ -312,7 +312,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 148,
|
"execution_count": 319,
|
||||||
"id": "19ffbbd9",
|
"id": "19ffbbd9",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
@@ -375,7 +375,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": 320,
|
||||||
"id": "db65a2fa",
|
"id": "db65a2fa",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
@@ -453,30 +453,42 @@
|
|||||||
"Theta = [240.07710713 26.33242457]\n",
|
"Theta = [240.07710713 26.33242457]\n",
|
||||||
"Cost = 138034.95779787414\n"
|
"Cost = 138034.95779787414\n"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"image/png": "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KI888ogaN26s8ePHKycnp9Tz+/fv1yuvvCJJuuGGGySp1JkmL730kiRpxIgRks7tmj//G/F5ffr0kSTPbvnzZ4Lk5uZWqM4bbrhBmzdvVnp6uqetsLBQc+bMUfv27dW9e3dPe5MmTRQXF6f33ntPqampCgwMVHx8vNf6brnlFqWnp2vVqlWltpWbm6vi4uIK1VUR568F8uPXGhcXJ5fLpWeffbbM4yiOHz/+k+s+v0fih/NtjPH8nVWkjrLWef311+vDDz/0umpsTk6OFi5cqEGDBnm+4quoirwngNqqVu0ZuZCsrCzNnTtXWVlZatWqlSTp4Ycf1sqVKzV37lw9++yzOnDggDIzM7V48WItWLBAJSUleuihh3TzzTdr3bp1ll8BaqtOnTpp4cKFGjNmjC6//HKvK7Bu2rRJixcv9txnpXfv3kpMTNScOXOUm5urIUOGaPPmzZo/f77i4+M1bNgwSdL8+fP12muv6cYbb1SnTp1UUFCg119/XS6XyxNoGjZsqO7du2vRokXq0qWLmjVrph49eqhHjx5l1jl58mS9++67Gj58uO6//341a9ZM8+fP18GDB/X++++X+vpizJgxuuOOO/Taa68pLi7OcwDleX/84x/197//Xb/85S81btw4RUVFqbCwUDt27NCSJUt06NAhr691LkafPn3k7++v559/Xnl5eXI6nbr22mvVsmVLzZw5U2PHjtWVV16pW2+9VS1atFBWVpY++ugjDRw4UH/9618vuO5u3bqpU6dOevjhh3XkyBG5XC69//77nmM1figqKkqSdP/99ysuLk7+/v669dZby1zv008/rTVr1mjQoEH6/e9/r4CAAM2ePVtFRUV64YUXfJ6DirwngFrL4pk8F0WSWbp0qefx8uXLjSTTuHFjryUgIMDccsstxhhjJkyYYCSZPXv2eMZt3brVSDJffPFFTb8E1DF79+41EyZMMO3btzeBgYEmJCTEDBw40Lz66qteFzQ7e/aseeKJJ0yHDh1MgwYNTGRkZKmLnm3bts3cdtttpm3btsbpdJqWLVuaX/7yl2bLli1e29y0aZOJiooygYGBPl30rEmTJiYoKMj069fP66JnP5Sfn28aNmxoJJl33nmnzD4FBQUmOTnZdO7c2QQGBprmzZubmJgYM3XqVHPmzBljjPdFzyrqx6f2GmPM66+/bjp27Gj8/f1Lneb78ccfm7i4OBMaGmqCgoJMp06dzLhx47zm6/xFz8qye/duExsba4KDg03z5s3NhAkTzP/93/8ZSWbu3LmefsXFxea+++4zLVq0MA6Ho0IXPYuLizPBwcGmUaNGZtiwYWbTpk1efc6f2vvjU3Y//vhjr9dZ0fcEUBs5jPnRfr9awuFwaOnLine truncated
|
||||||
|
"text/plain": [
|
||||||
|
"<Figure size 640x480 with 1 Axes>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "display_data"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"source": [
|
"source": [
|
||||||
"# Your code here\n",
|
"# Your code here\n",
|
||||||
"\n",
|
"\n",
|
||||||
"theta = np.zeros((2))\n",
|
"def gradient_descent(X, y, max_iter, alpha):\n",
|
||||||
|
" theta = np.zeros((2))\n",
|
||||||
|
" costs = []\n",
|
||||||
"\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",
|
"\n",
|
||||||
"alpha = 0.0001 # i got the best results with those parameters\n",
|
" c = cost_J(y_pred, y) # to plot the costs over iters\n",
|
||||||
|
" costs.append(c)\n",
|
||||||
"\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",
|
" y_pred = X @ theta\n",
|
||||||
" theta[0] = theta[0] - alpha * (1/len(y)) * np.sum(y_pred - y)\n",
|
" print(f\"Theta = {theta}\")\n",
|
||||||
" theta[1] = theta[1] - alpha * (1/len(y)) * np.sum((y_pred - y) * X[:,1]) \n",
|
" print(f\"Cost = {cost_J(y_pred, y)}\")\n",
|
||||||
"\n",
|
"\n",
|
||||||
" c = cost_J(y_pred, y) # to plot the costs over iters\n",
|
" plt.plot(range(0, len(costs)), costs)\n",
|
||||||
" costs.append(c)\n",
|
" plt.title(\"Cost over iterations\")\n",
|
||||||
|
" plt.show()\n",
|
||||||
"\n",
|
"\n",
|
||||||
"y_pred = X @ theta\n",
|
"gradient_descent(X, y, max_iter = 1000000, alpha = 0.0001) # i got the best results with those parameters"
|
||||||
"print(f\"Theta = {theta}\")\n",
|
|
||||||
"print(f\"Cost = {cost_J(y_pred, y)}\")\n"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -489,13 +501,13 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 167,
|
"execution_count": 330,
|
||||||
"id": "5a34ad43",
|
"id": "5a34ad43",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
"image/png": "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1izNmjXLVlEAACB8sDYNAAAwijACAACMIowAAACjCCMAAMAowoikK1sqEAAAXAnCCAAAMIowAgAAjCKMAAAAo8I6jLA0DQAA5oV1GAEAAOYRRgAAgFGEEQAAYBRhBAAAGEUYAQAARhFGAACAUYQRAABgFGFEkiUWpwEAwBTCCAAAMIowAgAAjCKMAAAAo8I6jDhYnAYAAOPCOowAAADzCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCiCSLu8EDAGAMYQQAABhFGAEAAEYRRgAAgFGEEQAAYFRYhxGHWJwGAADTwjqMAAAA8wgjAADAKMIIAAAwijACAACMIowAAACjbIWRgoICjRkzRjExMYqLi1N2drYOHz7c6pjCwkI5HI4mW3R09BUVDQAAQoetMPLGG28oLy9Pb731lnbt2qXz58/r61//uurr61sd53K5dOLEicBWWVl5RUV3NJamAQDAnG52Om/fvr3J48LCQsXFxamsrExf/epXWxzncDiUkJDQvgoBAEBIu6JzRmpqaiRJsbGxrfarq6tT//795fF4NHPmTB08eLDV/g0NDfL5fE02AAAQmtodRvx+v+6//35NnDhRo0aNarHfsGHDtHbtWm3ZskUvvvii/H6/JkyYoI8++qjFMQUFBXK73YHN4/G0t0wAAHCVa3cYycvL04EDB1RUVNRqv4yMDOXk5Cg1NVWTJ0/Wq6++qq985St67rnnWhyTn5+vmpqawHb8+PH2lgkAAK5yts4ZuWTBggXaunWrdu/erb59+9oa2717d6WlpenIkSMt9nE6nXI6ne0pzRYHS9MAAGCcrSMjlmVpwYIF2rRpk15//XUNHDjQ9g4bGxu1f/9+JSYm2h4LAABCj60jI3l5edqwYYO2bNmimJgYeb1eSZLb7VaPHj0kSTk5OerTp48KCgokSY8++qjGjx+vIUOG6OzZs3rqqadUWVmpefPmdfBbAQAAwchWGFm1apUkacqUKU3a161bp+9+97uSpKqqKkVEfHHA5dNPP9X8+fPl9XrVq1cvpaena+/evRo5cuSVVQ4AAEKCrTBiWV9+e7CSkpImj5955hk988wztooCAADhg7VpAACAUYQRte2IDwAA6ByEEQAAYBRhBAAAGEUYAQAARhFGAACAUYQRAABgVFiHEdamAQDAvLAOIwAAwDzCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwK6zDiEIvTAABgWliHEQAAYB5hBAAAGEUYAQAARhFGAACAUYQRAABgFGFEkmWZrgAAgPBFGAEAAEYRRgAAgFGEEQAAYBRhBAAAGEUYAQAARoV1GHGwNA0Line truncated
|
"image/png": "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KI888ogaN26s8ePHKycnp9Tz+/fv1yuvvCJJuuGGGySp1JkmL730kiRpxIgRks7tmj//G/F5ffr0kSTPbvnzZ4Lk5uZWqM4bbrhBmzdvVnp6uqetsLBQc+bMUfv27dW9e3dPe5MmTRQXF6f33ntPqampCgwMVHx8vNf6brnlFqWnp2vVqlWltpWbm6vi4uIK1VUR568F8uPXGhcXJ5fLpWeffbbM4yiOHz/+k+s+v0fih/NtjPH8nVWkjrLWef311+vDDz/0umpsTk6OFi5cqEGDBnm+4quoirwngNqqVu0ZuZCsrCzNnTtXWVlZatWqlSTp4Ycf1sqVKzV37lw9++yzOnDggDIzM7V48WItWLBAJSUleuihh3TzzTdr3bp1ll8BaqtOnTpp4cKFGjNmjC6//HKvK7Bu2rRJixcv9txnpXfv3kpMTNScOXOUm5urIUOGaPPmzZo/f77i4+M1bNgwSdL8+fP12muv6cYbb1SnTp1UUFCg119/XS6XyxNoGjZsqO7du2vRokXq0qWLmjVrph49eqhHjx5l1jl58mS9++67Gj58uO6//341a9ZM8+fP18GDB/X++++X+vpizJgxuuOOO/Taa68pLi7OcwDleX/84x/197//Xb/85S81btw4RUVFqbCwUDt27NCSJUt06NAhr691LkafPn3k7++v559/Xnl5eXI6nbr22mvVsmVLzZw5U2PHjtWVV16pW2+9VS1atFBWVpY++ugjDRw4UH/9618vuO5u3bqpU6dOevjhh3XkyBG5XC69//77nmM1figqKkqSdP/99ysuLk7+/v669dZby1zv008/rTVr1mjQoEH6/e9/r4CAAM2ePVtFRUV64YUXfJ6DirwngFrL4pk8F0WSWbp0qefx8uXLjSTTuHFjryUgIMDccsstxhhjJkyYYCSZPXv2eMZt3brVSDJffPFFTb8E1DF79+41EyZMMO3btzeBgYEmJCTEDBw40Lz66qteFzQ7e/aseeKJJ0yHDh1MgwYNTGRkZKmLnm3bts3cdtttpm3btsbpdJqWLVuaX/7yl2bLli1e29y0aZOJiooygYGBPl30rEmTJiYoKMj069fP66JnP5Sfn28aNmxoJJl33nmnzD4FBQUmOTnZdO7c2QQGBprmzZubmJgYM3XqVHPmzBljjPdFzyrqx6f2GmPM66+/bjp27Gj8/f1Lneb78ccfm7i4OBMaGmqCgoJMp06dzLhx47zm6/xFz8qye/duExsba4KDg03z5s3NhAkTzP/93/8ZSWbu3LmefsXFxea+++4zLVq0MA6Ho0IXPYuLizPBwcGmUaNGZtiwYWbTpk1efc6f2vvjU3Y//vhjr9dZ0fcEUBs5jPnRfr9awuFwaOnLine truncated
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
"<Figure size 640x480 with 1 Axes>"
|
"<Figure size 640x480 with 1 Axes>"
|
||||||
]
|
]
|
||||||
@@ -507,6 +519,7 @@
|
|||||||
"source": [
|
"source": [
|
||||||
"# Your code here\n",
|
"# Your code here\n",
|
||||||
"plt.plot(range(0, len(costs)), costs)\n",
|
"plt.plot(range(0, len(costs)), costs)\n",
|
||||||
|
"plt.title(\"Cost over iterations\")\n",
|
||||||
"plt.show()"
|
"plt.show()"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -544,7 +557,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 152,
|
"execution_count": 323,
|
||||||
"id": "e80c04b3",
|
"id": "e80c04b3",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
@@ -580,7 +593,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 153,
|
"execution_count": 324,
|
||||||
"id": "5e594f32",
|
"id": "5e594f32",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
@@ -588,7 +601,7 @@
|
|||||||
"name": "stdout",
|
"name": "stdout",
|
||||||
"output_type": "stream",
|
"output_type": "stream",
|
||||||
"text": [
|
"text": [
|
||||||
"The best cost value is 138034.95779787409, the exercice 2 cost value is 138034.95779787414\n"
|
"The best cost value is inf, the exercice 2 cost value is 138034.95779787414\n"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -632,7 +645,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": 325,
|
||||||
"id": "3f693388",
|
"id": "3f693388",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
@@ -640,48 +653,13 @@
|
|||||||
"name": "stdout",
|
"name": "stdout",
|
||||||
"output_type": "stream",
|
"output_type": "stream",
|
||||||
"text": [
|
"text": [
|
||||||
"144176.78676766725\n",
|
"Theta = [ 0.32873692 29.18572953]\n",
|
||||||
"[ 0.32486065 28.59143527]\n"
|
"Cost = 145335.46042386265\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": {
|
"data": {
|
||||||
"image/png": "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 truncated
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGzCAYAAAD9pBdvAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAASKhJREFUeJzt3Xl8E3X+P/DX5O6V9L6gpeWQQ05RoIDiUanIutRdXeSrCx7gsaAgrq51d8Vj3eoqHusqh/4EXBdBVFARgS7nIkXOKody03L0AtqkTds0yXx+f6QJBFpoaJrp8Xo+HvOATj4zeWcIzSufz2dmJCGEABEREZFCVEoXQERERO0bwwgREREpimGEiIiIFMUwQkRERIpiGCEiIiJFMYwQERGRohhGiIiISFEMI0RERKQohhEiIiJSFMMIEbU4KSkpuP/++5UuwyeSJOGFF15QugyiVolhhMhPDh8+jEceeQSdO3eGwWCA0WjEsGHD8M4776C6utrvz1dVVYUXXngB69ev9/u+W5p9+/bhhRdewLFjxxStY8WKFQwcRM1Ao3QBRG3Bt99+i7vvvht6vR7jx49H7969UVtbi02bNuHpp5/G3r17MXfuXL8+Z1VVFV588UUAwI033ujXfStt//79UKnOfVfat28fXnzxRdx4441ISUlRrK4VK1bgvffeqzeQVFdXQ6Phr1SiK8H/OURNdPToUdxzzz3o1KkT1q5di4SEBM9jkydPxqFDh/Dtt98qWGHL43A4IMsydDpdvY/r9fqA1GG1WhESEuKXfRkMBr/sh6hdEkTUJI8++qgAIL7//vtGtbfb7eKll14SnTt3FjqdTnTq1ElkZWWJmpoar3bbtm0TI0eOFFFRUcJgMIiUlBTxwAMPCCGEOHr0qABw0TJjxoxLPvfhw4fFXXfdJSIiIkRQUJAYPHiwWL58uefxoqIioVarxQsvvHDRtr/88osAIN59913PurKyMjF16lTRsWNHodPpRJcuXcSrr74qnE6np4271tdff1289dZbonPnzkKlUoldu3Y1WGenTp3EhAkThBBCzJs3r97Xum7dOk/7FStWiOHDh4vg4GARGhoqbr/9drFnzx6vfU6YMEGEhISIQ4cOiVGjRonQ0FAxZswYIYQQGzduFHfddZdISkoSOp1OdOzYUUybNk1UVVV5bV9fHW71Hf+dO3eK2267TYSFhYmQkBBx8803i9zcXK827te3adMm8eSTT4ro6GgRHBwsMjMzRUlJiVfbS70niFoz9owQNdE333yDzp07Y+jQoY1qP3HiRCxYsAB33XUXnnrqKfzwww/Izs7Gzz//jKVLlwIASkpKMHLkSMTExODZZ59FeHg4jh07hi+//BIAEBMTg1mzZuGxxx7DnXfeid/85jcAgL59+zb4vMXFxRg6dCiqqqrwxBNPICoqCgsWLMCvf/1rfP7557jzzjsRFxeHESNG4LPPPsOMGTO8tl+8eDHUajXuvvtuAK5hohEjRuDkyZN45JFHkJycjM2bNyMrKwuFhYV4++23vbafN28eampq8PDDD0Ov1yMyMrJRx+uGG27AE088gX/+85947rnn0LNnTwDw/Pnvf/8bEyZMQEZGBl577TVUVVVh1qxZGD58OHbt2uU1rONwOJCRkYHhw4fjjTfeQHBwMABgyZIlqKqqwmOPPYaoqChs3boV7777Lk6cOIElS5YAAB555BGcOnUKOTk5+Pe//33Zuvfu3Yvrr78eRqMRzzzzDLRaLebMmYMbb7wRGzZswODBg73aP/7444iIiMCMGTNw7NgxvP3225gyZQoWL14M4PLvCaJWTek0RNSamc1mAcDzDfty8vLyBAAxceJEr/V//OMfBQCxdu1aIYQQS5cuFQDEtm3bGtxXaWlpo3pD3KZNmyYAiP/973+edRUVFSI1NVWkpKR4ejPmzJkjAIjdu3d7bd+rVy9x8803e35++eWXRUhIiDhw4IBXu2effVao1WpRUFAghDjXM2I0Gi/6pt+Q83tGhBBiyZIlF/WGuOsPDw8XkyZN8lpfVFQkTCaT13p3z8azzz570fOd3wPilp2dLSRJEvn5+Z51kydPFg392rzw3yIzM1PodDpx+PBhz7pTp06JsLAwccMNN3jWuXtG0tPThSzLnvVPPvmkUKvVory8XAjRuPcEUWvFs2mImsBisQAAwsLCGtV+xYoVAIDp06d7rX/qqacAwDO3JDw8HACwfPly2O12f5SKFStWYNCgQRg+fLhnXWhoKB5++GEcO3YM+/btAwD85je/gUaj8XwjB4A9e/Zg3759GDt2rGfdkiVLcP311yMiIgKnT5/2LOnp6XA6ndi4caPX8//2t79FTEyMX16LW05ODsrLyzFu3DivGtRqNQYPHox169ZdtM1j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 truncated
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
"<Figure size 640x480 with 1 Axes>"
|
"<Figure size 640x480 with 1 Axes>"
|
||||||
]
|
]
|
||||||
@@ -691,8 +669,34 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"source": [
|
"source": [
|
||||||
"plt.plot(range(0, len(costs)), costs)\n",
|
"# Your code here\n",
|
||||||
"plt.show()"
|
"import random\n",
|
||||||
|
"def stochastic_gradient_descent(X, y, max_iter, alpha):\n",
|
||||||
|
" \n",
|
||||||
|
" theta = np.zeros((2))\n",
|
||||||
|
"\n",
|
||||||
|
" costs = []\n",
|
||||||
|
"\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(f\"Theta = {theta}\")\n",
|
||||||
|
" print(f\"Cost = {cost_J(y_pred, y)}\")\n",
|
||||||
|
"\n",
|
||||||
|
" plt.plot(range(0, len(costs)), costs)\n",
|
||||||
|
" plt.title(\"Cost over iterations\")\n",
|
||||||
|
" plt.show()\n",
|
||||||
|
"\n",
|
||||||
|
"stochastic_gradient_descent(X, y, max_iter = 1000, alpha = 0.000001)"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -705,13 +709,13 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 179,
|
"execution_count": 326,
|
||||||
"id": "f73c6af3",
|
"id": "f73c6af3",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
"image/png": "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 truncated
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAk4AAAGwCAYAAABfKeoBAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAbhdJREFUeJzt3XlcVFX/B/DPgOzK4AYDbuAu4Z7LpFkpikqmZYvknlkatmAlWbm1mfornza1cqvH7cmyTFQM91RcQlGRNDUMF5YEYdxAYO7vj3FGLjMDd4bZ+bxfL15PnHvmzrnMo3w953u+RyYIggAiIiIiqpKbvQdARERE5CwYOBERERFJxMCJiIiISCIGTkREREQSMXAiIiIikoiBExEREZFEDJyIiIiIJKpl7wE4A7VajStXrqBOnTqQyWT2Hg4RERFJIAgCrl+/jpCQELi5WWauiIGTBFeuXEGTJk3sPQwiIiIyw8WLF9G4cWOL3IuBkwR16tQBoPnB+/v723k0REREJIVKpUKTJk10v8ctgYGTBNrlOX9/fwZORERETsaSaTZMDiciIiKSiIETERERkUQMnIiIiIgkYuBEREREJBEDJyIiIiKJGDgRERERScTAiYiIiEgiBk5EREREEjFwIiIiIpKIlcOJiBxImVrA4Yx85F4vQmAdb3QPqwd3Nx4uTuQoGDgRETmIxLQszNmUjqzCIl1bsNwbs4aEY2BEsB1HRkRaXKojInIAiWlZmLzqqChoAoDswiJMXnUUiWlZdhoZEZXHwImIyM7K1ALmbEqHYOCatm3OpnSUqQ31ICJbYuBERGRnhzPy9WaayhMAZBUW4XBGvu0GRUQGMXAiIrKz3OvGgyZz+hGR9TBwIiKys8A63hbtR0TWw8CJiMjOuofVQ7DcG8aKDsig2V3XPayeLYdFRAYwcCIisjN3NxlmDQkHAL3gSfv9rCHhrOdE5AAYOBEROYCBEcFYPKoLFHLxcpxC7o3Fo7qwjhORg2ABTCIiBzEwIhj9wxWsHE7kwBg4ERE5EHc3GZQt6tt7GERkBJfqiIiIiCRi4EREREQkEQMnIiIiIokYOBERERFJxMCJiIiISCIGTkREREQSMXAiIiIikoiBExEREZFEdg2cQkNDIZPJ9L5iY2MBAEVFRYiNjUX9+vVRu3ZtDB8+HDk5OaJ7ZGZmIjo6Gr6+vggMDMSbb76J0tJSUZ/du3ejS5cu8PLyQsuWLbFy5UpbPSIRERG5ELsGTkeOHEFWVpbuKykpCQDw1FNPAQDi4uKwadMmrF+/Hnv27MGVK1fwxBNP6F5fVlaG6Oho3LlzBwcOHMB3332HlStXYubMmbo+GRkZiI6OxiOPPILU1FS89tpreP7557Ft2zbbPiwRERE5PZkgCIK9B6H12muvISEhAWfPnoVKpULDhg2xZs0aPPnkkwCA06dPo127dkhOTkbPnj2xdetWPProo7hy5QqCgoIAAEuWLEF8fDz+/fdfeHp6Ij4+Hps3b0ZaWprufUaMGIGCggIkJiZKGpdKpYJcLkdhYSH8/f0t/+BERERkcdb4/e0wOU537tzBqlWr8Nxzz0EmkyElJQUlJSWIjIzU9Wnbti2aNm2K5ORkAEBycjLat2+vC5oAICoqCiqVCqdOndL1KX8PbR/tPQwpLi6GSqUSfRERERE5TOD0yy+/oKCgAOPGjQMAZGdnw9PTEwEBAaJ+QUFByM7O1vUpHzRpr2uvVdZHpVLh9u3bBscyd+5cyOVy3VeTJk2q+3hERETkAhwmcFq2bBkGDRqEkJAQew8F06dPR2Fhoe7r4sWL9h4SEREROYBa9h4AAPzzzz/Yvn07NmzYoGtTKBS4c+cOCgoKRLNOOTk5UCgUuj6HDx8W3Uu76658n4o78XJycuDv7w8fHx+D4/Hy8oKXl1e1n4uIiIhci0PMOK1YsQKBgYGIjo7WtXXt2hUeHh7YsWOHru3MmTPIzMyEUqkEACiVSpw8eRK5ubm6PklJSfD390d4eLiuT/l7aPto70FEREQkld0DJ7VajRUrVmDs2LGoVeveBJhcLseECRMwdepU7Nq1CykpKRg/fjyUSiV69uwJABgwYADCw8MxevRoHD9+HNu2bcO7776L2NhY3YzRpEmT8Pfff2PatGk4ffo0Fi1ahB9++AFxcXF2eV4iIiJyXnZfqtu+fTsyMzPx3HPP6V1buHAh3NzcMHz4cBQXFyMqKgqLFi3SXXd3d0dCQgImT54MpVIJPz8/jB07Fu+9956uT1hYGDZv3oy4uDh89tlnaNy4MZYuXYqoqCibPB8RERG5Doeq4+SoWMeJiIjI+bh0HSciIiIiR8fAiYiIiEgiBk5EREREEtk9OZyIiIhqrjK1gMMZ+ci9XoTAOt7oHlYP7m4yew/LKAZOREREZBeJaVmYsykdWYVFurZguTdmDQnHwIhgO47MOC7VERERkc0lpmVh8qqjoqAJALILizB51VEkpmXZaWSVY+BERERENlWmFjBnUzoM1UPSts3ZlI4yteNVTGLgRERERDZ1OCNfb6apPAFAVmERDmfk225QEjFwIiIiIpvKvW48aDKnny0xcCIiIiKbCqzjbdF+tsTAiYiIiGyqe1g9BMu9YazogAya3XXdw+rZcliSMHAiIiIim3J3k2HWkHAA0AuetN/PGhLukPWcGDgRERGRzQ2MCMbiUV2gkIuX4xRybywe1cVh6zixACYRERHZxcCIYPRv3QBXR41HZrcHUfrEkw5fOVwmCILjFUlwMCqVCnK5HIWFhfD397f3cIiIiFxDQgIwZMi97y0ckljj9zdnnIiIiMi2iouBRo2AvLx7bU8/bb/xmIA5TkRERGQ7a9cC3t7ioGnPHuB//7PfmEzAGSciIiKyvps3gTp1xMtxffoAu3YBbs4zj+M8IyUiIiLn9PXXQO3a4qDpjz80M01OFDQBnHEiIiIia7l2DahXoYjl448DP/0EyBx351xlnCvMIyIiIuewYIF+0HTqFLBhg9MGTQBnnIiIiMiScnOBoCBx27hxwIoVdhmOpXHGiYiIiCzjnXf0g6a//3aZoAngjBMRERFV18WLQNOm4rapU4FPPrHPeKyIgRMRERGZLzYWWLRI3Hb5MhASYp/xWBmX6oiIiMh0f/2lSfIuHzS9956m5ICLBk0AZ5yIiIjIVDExwLp14rarV4H69e0zHhvijBMREZEFlKkFJJ/Pw8bUy0g+n4cytWUPrHUIJ05oZpnKB02ffaaZZaoBQRPAGSciIqJqS0zLwpxN6cgqLNK1Bcu9MWtIOAZGBNtxZBYiCMCgQcC2beL2wkLA398+Y7ITzjgRERFVQ2JaFiavOioKmgAgu7AIk1cdRWJalp1GZiEHD2qORSkfNC1frgmmaljQBHDGiYiIyGxlagFzNqXD0KKcAEAGYM6mdPQPV8DdzcmqZavVQI8emjPltPz8gH//BXx87DcuO+OMExERkZkOZ+TrzTSVJwDIKizC4Yx82w3KEnbsANzdxUHTjz8CN27U6KAJ4IwTERGR2XKvGw+azOlndyUlQNu2mmrfWk2aAOfOAZ6e9huXA+GMExERkZkC63hbtJ9dbdyoCY7KB02JiUBmJoOmcjjjREREZKbuYfUQLPdGdmGRwTwnGQCF3Bvdw+rZemjSFRVpClZeu3avrWNHICVFs1xHIpxxIiIiMpO7mwyzhoQD0ARJ5Wm/nzUk3HETw1et0uQslQ+afv8dSE1l0GQEAyciIqJqGBgRjMWjukAhFy/HKeTeWDyqi2PWcbpxQ1PIcvToe22PPKLZSde7t/3G5QS4VEdERFRNAyOC0T9cgcMZ+ci9XoTAOprlOYecaVq8GHjpJXFbSgrQpYt9xuNkGDgRERFZgLubDMoWDnzsSH6+/rEow4cD69drZp9IErsv1V2+fBmjRo1C/fr14ePjg/bt2+OPcnUjBEHAzJkzERwcDB8fH0RGRuLs2bOie+Tn52PkyJHw9/dHQEAAJkyYgBs3boj6nDhxAg8++CC8vb3RpEkTzJ8/3ybPR0REZHcff6wfNP35p6Y2E4Mmk9g1cLp27Rp69eoFDw8PbN26Fenp6fjkk09Qt25dXZ/58+fj888/x5IlS3Do0CH4+fkhKioKRUX3amKMHDkSp06dQlJSEhISErB371688MILuusqlQoDBgxAs2bNkJKSggULFmD27Nn45ptvbPq8RERENpWdrQmMpk+/1/b885rjUtq2td+4nJlgR/Hx8ULv3r2NXler1YJCoRAWLFigaysoKBC8vLyEtWvXCoIgCOnp6QIA4ciRI7o+W7duFWQymXD58mVBEARh0aJFQt26dYXi4mLRe7dp08bg+xYVFQmFhYW6r4sXLwoAhMLCwmo9LxERkc3ExwuCJkS695WRYe9R2VRhYaHFf3/bdcbp119/xf3334+nnnoKgYGB6Ny5M7799lvd9YyMDGRnZyMyMlLXJpfL0aNHDyQnJwMAkpOTERAQgPvvv1/XJzIyEm5ubjh06JCuT58+feBZroBXVFQUzpw5g2vlt2DeNXfuXMjlct1XkyZNLP7sREREVpGZqZllmjfvXtsbb2hCp9BQuw3LVdg1cPr777+xePFitGrVCtu2bcPkyZPxyiuv4LvvvgMAZGdnAwCCgoJErwsKCtJdy87ORmBgoOh6rVq1UK9ePVEfQ/co/x7lTZ8+HYWFhbqvixcvWuBpiYiIrGzSJKBZM3HblSvAggX2GY8LsuuuOrVajfvvvx8fffQRAKBz585IS0vDkiVLMHbsWLuNy8vLC15eXnZ7fyIiIpOcOaOfs/TBB8A779hnPC7MrjNOwcHBCA8PF7W1a9cOmZmZAACFQgEAyMnJEfXJycnRXVMoFMjNzRVdLy0tRX5+vqiPoXuUfw8iIiKnIwjA00/rB015eQyarMSugVOvXr1w5swZUdtff/2FZnenGcPCwqBQKLBjxw7ddZVKhUOHDkGpVAIAlEolCgoLine truncated
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
"<Figure size 640x480 with 1 Axes>"
|
"<Figure size 640x480 with 1 Axes>"
|
||||||
]
|
]
|
||||||
@@ -774,7 +778,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 180,
|
"execution_count": 327,
|
||||||
"id": "dbcb6f22",
|
"id": "dbcb6f22",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
@@ -782,16 +786,16 @@
|
|||||||
"name": "stdout",
|
"name": "stdout",
|
||||||
"output_type": "stream",
|
"output_type": "stream",
|
||||||
"text": [
|
"text": [
|
||||||
"144176.78676766725\n",
|
"Theta = [240.07710713 26.33242457]\n",
|
||||||
"[ 0.32486065 28.59143527]\n"
|
"Cost = 138034.95779787414\n"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"source": [
|
"source": [
|
||||||
"# Your code here\n",
|
"# Your code here\n",
|
||||||
"y_pred = X @ theta\n",
|
"y_pred = X @ theta\n",
|
||||||
"print(cost_J(y_pred, y))\n",
|
"print(f\"Theta = {theta}\")\n",
|
||||||
"print(theta)"
|
"print(f\"Cost = {cost_J(y_pred, y)}\")"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -823,7 +827,7 @@
|
|||||||
"id": "eecbe019",
|
"id": "eecbe019",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"source": [
|
"source": [
|
||||||
"_Your answer here_"
|
"The closed form solution is great to have to best value possible, but it is very compute hungry. The inverse of a really big matrix is not something simple to do. So, the gradient descent is better when compute time is limited."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -839,7 +843,7 @@
|
|||||||
"id": "4873219d",
|
"id": "4873219d",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"source": [
|
"source": [
|
||||||
"_Your answer here_"
|
"Since for each iterations we update theta based on a random point, the outliers could significantly slow the congergence. If there is a lot of them, each update of the thetha values will not decrease the total cost value. This means that, if we are in a while loop searching to improve the cost value, it might either cause more loops to achieve the desired goal or cause the while loop to exit because the cost value is not getting smaller, but bigger."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -855,7 +859,7 @@
|
|||||||
"id": "d1536554",
|
"id": "d1536554",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"source": [
|
"source": [
|
||||||
"_Your answer here_"
|
"A too small alpha value would make the descent too slow and remove the speed advantage of this method. An alpha too big would cause the theta values to jump from an extreme to another. This would be highly susceptible to outliers. To mitigate this, we could apply the same logic, but pick a small number of samples (mini-batch) rather than a single one for each operations. This would reduce the impact of outliers while keeping the algorithm faster than the full one."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -871,7 +875,7 @@
|
|||||||
"id": "d4f242c5",
|
"id": "d4f242c5",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"source": [
|
"source": [
|
||||||
"_Your answer here_"
|
"If we have a dependency to the square and to the cube of the feature f1, we would augment the matrix to reflect this : h(f) = theta0 + theta1xf1 + theta2xf1² + theta3xf1³. Yes, we need to take precautions because f1³ could mean huge numbers and cause overflows. The solutions would be to scale down each value to keep the relations between them but reduce their overall values"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -897,6 +901,112 @@
|
|||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": []
|
"source": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "8ce59c65",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"# Exercice 6 Optional – Mini-batch gradient descent for linear regression"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "8604ed56",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"Stochastic : \n",
|
||||||
|
"Theta = [ 0.31013607 29.29520581]\n",
|
||||||
|
"Cost = 145871.70198566347\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"image/png": "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 truncated
|
||||||
|
"text/plain": [
|
||||||
|
"<Figure size 640x480 with 1 Axes>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "display_data"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"batch of 1 : \n",
|
||||||
|
"Theta = [ 0.33356128 29.13574287]\n",
|
||||||
|
"Cost = 145123.94167962432\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGzCAYAAAD9pBdvAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAARYNJREFUeJzt3Xl8VNX9//H3zCSZrJOFkIQlYVUQWQWBIIoLmqK1xlar1Apa94IbrrTfurS10brXWpT2J1otoqhoi7hQFikSRDZlkU2BICQBhOz7zPn9kWRgIIFMksnN8no+HCF3zp37uWdC8p5zz73XZowxAgAAsIjd6gIAAEDHRhgBAACWIowAAABLEUYAAIClCCMAAMBShBEAAGApwggAALAUYQQAAFiKMAIAACxFGAHQ6vTs2VPXXXed1WX4xWaz6ZFHHrG6DKBNIowAzeTbb7/VLbfcot69eys0NFQul0tnnXWWnn/+eZWWljb79kpKSvTII49o6dKlzf7arc3mzZv1yCOPaNeuXZbWsWDBAgIHEABBVhcAtAcffvihrrzySjmdTk2aNEkDBw5URUWFli9frvvuu0+bNm3SzJkzm3WbJSUlevTRRyVJ5557brO+ttW2bt0qu/3IZ6XNmzfr0Ucf1bnnnquePXtaVteCBQv04osv1hlISktLFRTEj1SgMfiXAzTRzp07dfXVV6tHjx5avHixunTp4n1uypQp2rFjhz788EMLK2x9qqqq5PF4FBISUufzTqezReooLi5WREREs7xWaGhos7wO0CEZAE1y6623Gknm888/b1D7yspK8/vf/9707t3bhISEmB49epjp06ebsrIyn3Zffvmlueiii0ynTp1MaGio6dmzp7n++uuNMcbs3LnTSDru8fDDD59w299++6254oorTGxsrAkLCzOjRo0y8+fP9z6fk5NjHA6HeeSRR45bd8uWLUaSeeGFF7zLDh8+bO68807TvXt3ExISYvr06WMef/xx43a7vW1qa33yySfNs88+a3r37m3sdrtZt25dvXX26NHDTJ482RhjzKxZs+rc1yVLlnjbL1iwwIwdO9aEh4ebyMhIc/HFF5uNGzf6vObkyZNNRESE2bFjh5kwYYKJjIw0l112mTHGmGXLlpkrrrjCJCcnm5CQENO9e3dz1113mZKSEp/166qjVl39v3btWvOjH/3IREVFmYiICHP++eebzMxMnza1+7d8+XJz9913m/j4eBMeHm7S09PN/v37fdqe6HsCaMsYGQGa6D//+Y969+6tMWPGNKj9jTfeqNdee01XXHGF7rnnHn3xxRfKyMjQN998o3nz5kmS9u/fr4suukidO3fWgw8+qJiYGO3atUvvvfeeJKlz586aMWOGbrvtNl1++eX66U9/KkkaPHhwvdvNzc3VmDFjVFJSojvuuEOdOnXSa6+9pp/85Cd65513dPnllysxMVHjxo3T22+/rYcffthn/bfeeksOh0NXXnmlpOrDROPGjdPevXt1yy23KCUlRStWrND06dOVnZ2t5557zmf9WbNmqaysTDfffLOcTqfi4uIa1F/nnHOO7rjjDv3lL3/Rb37zG5122mmS5P3z9ddf1+TJk5WWlqYnnnhCJSUlmjFjhsaOHat169b5HNapqqpSWlqaxo4dq6eeekrh4eGSpLlz56qkpES33XabOnXqpFWrVumFF17Q999/r7lz50qSbrnlFu3bt08LFy7U66+/ftK6N23apLPPPlsul0v333+/goOD9fLLL+vcc8/VZ599plGjRvm0v/322xUbG6uHH35Yu3bt0nPPPaepU6fqrbfeknTy7wmgTbM6DQFtWX5+vpHk/YR9MuvXrzeSzI033uiz/N577zWSzOLFi40xxsybN89IMl9++WW9r3XgwIEGjYbUuuuuu4wk87///c+7rLCw0PTq1cv07NnTO5rx8ssvG0lmw4YNPusPGDDAnH/++d6v//CHP5iIiAizbds2n3YPPvigcTgcJisryxhzZGTE5XId90m/PkePjBhjzNy5c48bDamtPyYmxtx0000+y3Nyckx0dLTP8tqRjQcffPC47R09AlIrIyPD2Gw2s3v3bu+yKVOmmPp+bB77XqSnp5uQkBDz7bffepft27fPREVFmXPOOce7rHZkZPz48cbj8XiX33333cbhcJi8vDxjTMO+J4C2irNpgCYoKCiQJEVFRTWo/YIFCyRJ06ZN81l+zz33SJJ3bklMTIwkaf78+aqsrGyOUrVgwQKNHDlSY8eO9S6LjIzUzTffrF27dmnz5s2SpJ/+9KcKCgryfiKXpI0bN2rz5s266qqrvMvmzp2rs88+W7GxsTp48KD3MX78eLndbi1btsxn+z/72c/UuXPnZtmXWgsXLlReXp4mTpzoU4PD4dCoUaO0ZMmS49a57bbbjlsWFhbm/XtxcbEOHjyoMWPGyBijdevW+V2X2+3Wp59+qvT0dPXu3du7vEuXLvrFL36h5cuXe793at18882y2Wzer88++2y53W7t3r1bUmC+J4DWok2FkWXLlunSSy9V165dZbPZ9P777/v9GsYYPfXUUzr11FPldDrVrVs3PfbYY81fLDoEl8slSSosLGxQ+927d8tut6tv374+y5OSkhQTE+P9xTNu3Dj97Gc/06OPPqr4+HhddtllmjVrlsrLyxtd6+7du9WvX7/jltce7qjddnx8vC644AK9/fbb3jZvvfWWgoKCvIeDJGn79u36+OOP1blzZ5/H+PHjJVUfVjhar169Gl17fbZv3y5JOv/884+r49NPPz2uhqCgIHXv3v2418nKytJ1112nuLg4RUZGqnPnzho3bpwkKT8/3++6Dhw4oJKSknr72+PxaM+ePT7LU1JSfL6OjY2VJB0+fFhSYL4ngNaiTc0ZKS4u1pAhQ/SrX/3K54eiP+688059+umneuqppzRo0CAdOnRIhw4dauZK0VG4XC517dpVGzdu9Gu9oz8B1/f8O++8o5UrV+o///mPPvnkE/3qV7/S008/rZUrVyoyMrIpZZ/U1Vdfreuvv17r16/X0KFD9fbbb+uCCy5QfHy8t43H49GFF16o+++/v87XOPXUU32+Pnr0obl4PB5J1fNGkpKSjnv+2FNtnU6nzynDUvUoxoUXXqhDhw7pgQceUP/+/RUREaG9e/fquuuu824j0BwOR53LjTGSrP+eAAKpTYWRCRMmaMKECfU+X15ert/+9rd68803lZeXp4EDB+qJJ57wXoPhm2++0YwZM7Rx40bvJ5ZAfFpDx/LjH/9YM2fOVGZmplJTU0/YtkePHvJ4PNq+fbt3REKqnlyal5enHj16+LQfPXq0Ro8erccee0yzZ8/WNddcozlz5ujGG288aaCpa9tbt249bvmWLVu8z9dKT0/XLbfc4j1Us23bNk2fPt1nvT59+qioqMg7EhJI9e1rnz59JEkJCQmNrmPDhg3atm2bXnvtNU2aNMm7fOHChQ2u41idO3dWeHh4vf1tt9uVnJzcqHpP9D0BtFVt6jDNyUydOlWZmZmaM2eOvv76a1155ZX60Y9+5B3KrT3rYf78+erVq5d69uypG2+8kZERNMn999+viIgI3XjjjcrNzT3u+W+//VbPP/+8JOniiy+WpOPONHnmmWckSZdccomk6qH52k/EtYYOHSpJ3mH52jNB8vLyGlTnxRdfrFWrVikzM9O7rLi4WDNnzlTPnj01YMAA7/KYmBilpaXp7bff1pw5cxQSEqL09HSf1/v5z3+uzMxMffLJJ8dtKy8vT1VVVQ2qqyFqrwVy7L6mpaXJ5XLpT3/6U53zKA4cOHDS164dkTi6v40x3vesIXXU9ZoXXXSRPvjgA5+rxubm5mr27NkaO3as9xBfQzXkewJoq9rUyMiJZGVladasWcrKylLXrl0lSffee68+/vhjzZo1S3/605/03Xffaffu3Zo7d67++c9/yu126+6779YVV1yhxYsXW7wHaKv69Omj2bNn66qrrtJpp53mcwXWFStWaO7cud77rAwZMkSTJ0/WzJkzlZeXp3HjxmnVqlV67bXXlJ6ervPOO0+S9Nprr+lvf/ubLr/8cvXp00eFhYX6+9//LpfL5Q00YWFhGjBggN566y2deuqpiouL08CBAzVw4MA663zwwQf15ptvasKECbrjjjsUFxen1157TTt37tS777573OGLq666Sr/85S/1t7/9TWlpad4JlLXuu+8+/fvf/9aPf/xjXXfddRo+fLiKi4u1YcMGvfPOO9q1a5fPYZ2mGDp0qBwOh5544gnl5+fL6XTq/PPPV0JCgmbMmKFrr71WZ5xxhq6++mp17txZWVlZ+vDDD3XWWWfpr3/96wlfu3///urTp4/uvfde7d27Vy6XS++++653rsbRhg8fLkm64447lJaWJofDoauvvrrO1/3jH/+ohQsXauzYsfr1r3+toKAgvfzyyyovL9ef//xnv/ugId8TQJtl4Zk8TSLJzJs3z/v1/PnzjSQTERHh8wgKCjI///nPjTHG3HTTTUaS2bp1q3e9NWvWGElmy5YtLb0LaGe2bdtmbrrpJtOzZ08TEhJioqKizFlnnWVeeOEFnwuaVVZWmkcffdT06tXLBAcHm+Tk5OMuerZ27VozceJEk5KSYpxOp0lISDA//vGPzerVq322uWLFCjN8+HATEhLi10XPYmJiTGhoqBk5cqTPRc+OVlBQYMLCwowk88Ybb9TZprCw0EyfPt307dvXhISEmPj4eDNmzBjz1FNPmYqKCmOM70XPGurYU3uNMebvf/+76d27t3E4HMed5rtkyRKTlpZmoqOjTWhoqOnTp4+57rrrfPqr9qJnddm8ebMZP368iYyMNPHx8eamm24yX331lZFkZs2a5W1XVVVlbr/9dtO5c2djs9kadNGztLQ0ExkZacLDw815551nVqxY4dOm9tTeY0/ZXbJkic9+NvR7AmiLbMYcM+7XRthsNs2bN88Line truncated
|
||||||
|
"text/plain": [
|
||||||
|
"<Figure size 640x480 with 1 Axes>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "display_data"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"Theta = [ 0.32898838 28.78840806]\n",
|
||||||
|
"Cost = 144232.79516214516\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"image/png": "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 truncated
|
||||||
|
"text/plain": [
|
||||||
|
"<Figure size 640x480 with 1 Axes>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "display_data"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"def batch_gradient_descent(X, y, batch_size, max_iter, alpha):\n",
|
||||||
|
" theta = np.zeros((2))\n",
|
||||||
|
"\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",
|
||||||
|
" batch_idx = np.random.choice(y.shape[0], batch_size)\n",
|
||||||
|
" y_stoch = y[batch_idx]\n",
|
||||||
|
" y_pred_stoch = X[batch_idx, :] @ theta\n",
|
||||||
|
"\n",
|
||||||
|
" theta[0] = theta[0] - alpha * (1/len(y_stoch)) * np.sum(y_pred_stoch - y_stoch)\n",
|
||||||
|
" theta[1] = theta[1] - alpha * (1/len(y_stoch)) * np.sum((y_pred_stoch - y_stoch) * X[batch_idx, 1])\n",
|
||||||
|
"\n",
|
||||||
|
" y_pred = X @ theta\n",
|
||||||
|
" costs.append(cost_J(y_pred, y))\n",
|
||||||
|
"\n",
|
||||||
|
"\n",
|
||||||
|
" y_pred = X @ theta\n",
|
||||||
|
" print(f\"Theta = {theta}\")\n",
|
||||||
|
" print(f\"Cost = {cost_J(y_pred, y)}\")\n",
|
||||||
|
"\n",
|
||||||
|
" plt.plot(range(0, len(costs)), costs)\n",
|
||||||
|
" plt.title(\"Cost over iterations\")\n",
|
||||||
|
" plt.show()\n",
|
||||||
|
"\n",
|
||||||
|
"\n",
|
||||||
|
"print(\"Stochastic : \")\n",
|
||||||
|
"stochastic_gradient_descent(X, y, max_iter = 1000, alpha=0.000001)\n",
|
||||||
|
"print(\"batch of 1 : \")\n",
|
||||||
|
"batch_gradient_descent(X, y, batch_size = 1, max_iter = 1000, alpha = 0.000001)\n",
|
||||||
|
"print(\"batch of 10 : \")\n",
|
||||||
|
"batch_gradient_descent(X, y, batch_size = 10, max_iter = 1000, alpha = 0.000001)"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"metadata": {
|
"metadata": {
|
||||||
|
|||||||
Reference in new issue
Block a user