PolynomialRegression/Polynomial Regression.ipynb

536 lines
266 KiB
Plaintext
Raw Normal View History

2021-06-24 11:07:41 +02:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Algorytm najszybszego spadku dla regresji wielomianowej. "
2021-06-24 11:07:41 +02:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Skład grupy:\n",
2021-06-27 14:09:23 +02:00
"- Nowak Anna,\n",
"- Łaźna Patrycja,\n",
"- Bregier Damian"
2021-06-24 11:07:41 +02:00
]
},
{
"cell_type": "code",
2021-06-25 01:36:15 +02:00
"execution_count": 1,
2021-06-24 13:03:10 +02:00
"metadata": {},
"outputs": [],
"source": [
2021-06-25 01:36:15 +02:00
"import pandas as pd\n",
2021-06-25 09:42:03 +02:00
"import random\n",
2021-06-25 01:36:15 +02:00
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"np.set_printoptions(suppress=True)"
2021-06-24 13:03:10 +02:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 0. Podstawowe informacje o zbiorze danych"
]
},
{
"attachments": {
"image.png": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA2oAAAJACAYAAAD8a5XvAAAgAElEQVR4Aezd8Wsbd4L/f/8Z/nENhsU0HPUeBxbcwUZsOOLSwgrMl48hPwTv8r2c6efomXIEX5Ylp20hiPAhpyuk6Bu+25zdNl2l+cYo3ipf+eJvUqlrfzOum6zVq3blOMHIjXI339g1qhOV15eRNNZIlh2PbFmS8zQISzPvmXnPY2Y0fs37PeMO8YMAAggggAACCCCAAAIIINBSAh0tVRsqgwACCCCAAAIIIIAAAgggIIIaOwECCCCAAAIIIIAAAggg0GICBLUW2yBUBwEEEEAAAQQQQAABBBAgqLEPIIAAAggggAACCCCAAAItJkBQa7ENQnUQQAABBBBAAAEEEEAAAYIa+wACCCCAAAIIIIAAAggg0GICBLUW2yBUBwEEEEAAAQQQQAABBBAgqLEPIIAAAggggAACCCCAAAItJkBQa7ENQnUQQAABBBBAAAEEEEAAgT0Ete/10Ijr89uGHn5fCfn0P2sPryzFJwQQQAABBBBAAAEEEEAAgVoCewhqj/XRyW79qOuEPnpUOeu779YeXlnq4D99/99P9f3zg18uS0QAAQQQQAABBBBAAAEE3Ai0YFB7qrv/fl6B8+c1+aDGqjz4rDAu8O+GntYYvd2gx1d/oR93desv/iWuqgbA7SYpDH86e7mwvN/OulnajrNkJAIIIIAAAggggAACCCCwo0ALBjW7pa5bv5mtUffZd/Wjrm796OQVPa4xertBT39/Wn/R9Ypeu/jH7YrUHP74k18UlnfykxctzdD7b7yh194I6W7NOTEQAQQQQAABBBBAAAEEENidgKug9jhyWq8VwogVSN7QX71idXHs1l/8rPjZHvezn9QYfvqzXQarxgS13XFsLeUmqP3GCpBd7xLUtjIyBAEEEEAAAQQQQAABBFwI7ENQe0V/9VqtoFY1/B+vNzaoZeL67T//fSlI/r1+84mhx4770TZD5kWjzPP8sT6/+JYGrfB54tf66D+/l13unyLFFrRyUHukp3+8ol+dKK7r3717XanvSrMyQnrtjb/VXxSC2k/0M2t+uw6m5erwDgEEEEAAAQQQQAABBBCwBFwFtUoyu+Vrvx8mYs93910fvzf+Ta8VWvdKIelnPym09P34F1f0sBTW7MD1o3dLQe35n/TbwVeK3Shf8ei11zz68Su/0G/+5URFV0d7usF//rV8VuvhT4rztloSf/yLUvgkqFXuGnxCAAEEEEAAAQQQQACBPQm0dFCr7lJZ6FpZCmHle9Qe6bc+q8vhgP71K/sxId/r7rt/Wwhcf3e9+BAQO3DZQe3p9b8vhjTfv+m+3TL24LJOFlrFumXfk7Y53d/8WlP2bWqb5X6ha/YwGaLr4572RSZGAAEEEEAAAQQQQACBkkBLB7XCQ0NKwWnLe/thIo+uaNAq879fUeq/n+qp/foqVGgB+9G/xAuruhm4Si1qn/9L8T66f4g4n+b4vab+uTh8S1CzW+KKcyv9awJnqx9BjaMKAQQQQAABBBBAAAEE9kegpYParp76aD8F8gWBrjKobd+9MvV/FFviCGr7s4MxFwQQQAABBBBAAAEEEHAv4Cqo2Q/asJ/u2BJPffzjv+lvrJD2j9f10G5Nc/5+WuwOWRnUyi1nv/oPu7tkEc9uaSOoud+ZmAIBBBBAAAEEEEAAAQT2R2AfglrV0x3feEPFx/NXDW/UUx+/j+tX1oNEXvm1pux7zSybR/+hj67H9fl/1r5HzQ5uzgeO6Ol/FOfVVeMeNRddHz93PG1yfzYTc0EAAQQQQAABBBBAAIGXScBVUKuEsbsPNv+pjw8/+YV+bD2F8bW39P71uKY+eVeDhf/l9lP9ZrZWi5qk7wz95mfF+9F+7LH/L9zf6melYe5b1P6of/0ba36v6LX/+a4Cv39UycUnBBBAAAEEEEAAAQQQQGCXAociqEnfK/XJr+Ur/aPtwoNHfjKgX0XKYcluQbOf+ljwefpHXXu3/L/X/jX+WJ+/W+/DRKTvvwqVAmK3fmQ/un+XG4JiCCCAAAIIIIAAAggggIAt0IJBza5afb+/t+5PK92Xtqs5VHVTvFsKapVPg9zVnDYLfe9m+ZtT8QYBBBBAAAEEEEAAAQQQKArsIah9r4dGXJ/fNvTQeW+YpKf/WXt4K6F/P3teP3ulWz8eOK/PHxQf6//4q8s6WfjH2QP67YNWqi11QQABBBBAAAEEEEAAgZdJYA9Brd2Zvtfd828U7m2r+B9tr7yhf3J0mWz3taT+CCCAAAIIIIAAAggg0H4CL3FQK22s//6T7t62WgDj+nz2T3pc+bT+9tui1BgBBBBAAAEEEEAAAQTaXoCg1vabkBVAAAEEEEAAAQQQQACBwyZAUDtsW5T1QQABBBBAAAEEEEAAgbYXIKi1/SZkBRBAAAEEEEAAAQQQQOCwCRDUDtsWZX0QQAABBBBAAAEEEECg7QUIam2/CVkBBBBAAAEEEEAAAQQQOGwCBLXDtkVZHwQQQAABBBBAAAEEEGh7AYJa229CVgABBBBAAAEEEEAAAQQOmwBB7bBtUdYHAQQQQAABBBBAAAEE2l6AoNb2m5AVQAABBBBAAAEEEEAAgcMmQFA7bFuU9UEAAQQQQAABBBBAAIG2FyCotf0mZAUQQAABBBBAAAEEEEDgsAkQ1A7bFmV9EEAAAQQQQAABBBBAoO0FCGptvwlZAQQQQAABBBBAAAEEEDhsAgS1w7ZFWR8EEEAAAQQQQAABBBBoewGCWttvQlYAAQQQQAABBBBAAAEEDpsAQe2wbVHWBwEEEEAAAQQQQAABBNpegKDW9puQFUAAAQQQQAABBBBAAIHDJkBQO2xblPVBAAEEEEAAAQQQQACBthcgqLX9JmQFEEDgZRHouPW/xAsD9gH2AfYB9gH2gfbaB+r9O4WgVq8c0yGAAAIHLMCJub1OzGwvthf7APsA+wD7gLUP1PtDUKtXjukQQACBAxbghM8Jn32AfYB9gH2AfaD99oF6/1wgqNUrx3QIIIDAAQtwcm6/kzPbjG3GPsA+wD7APlDvnwsEtXrlmA4BBBA4YAFO9pzs2QfYB9gH2AfYB9pvH6j3zwWCWr1yTIcAAggcsAAn5/Y7ObPN2GbsA+wD7APsA/X+uUBQq1eO6RBAAIEDFuBkz8mefYB9gH2AfYB9oP32gXr/XCCo1Sv3kk/369h9dYx+1LSXtXx+EHjZBDg5t9/JmW3GNmMfYB9gH2AfqPfvFYJavXIv+XQEtZd8B2D1EUAAAQQQQAABBBoqQFBrKO/hnTlB7fBuW9YMAQQQQAABBBBAoPkCBLXmb4O2rEErBLVWqENbbjwqjQACCCCAAAIIINDyAgS1lt9ErVnBVghJrVCH1tw61AoBBBBAAAEEEECg3QUIau2+BZtU/1YISa1Qhybxs1gEEEAAAQQQQACBQy5AUDvkG7hRq9cKIakV6tAoX+aLAAIIIIAAAggg8HILENRe7u1f99q3QkhqhTrUDciECCCAAAIIIIAAAgjsIEBQ2wGHUdsLtEJIaoU6bC/EGAQQQAABBBBAAAEE6hcgqNVv91JP2QohqRXq8FLvBKw8AggggAACCCCAQMMECGoNoz3cM26FkNQKdTjcW5m1QwABBBBAAAEEEGiWAEGtWfJtvtxWCEmtUIc234xUHwEEEEAAAQQQQKBFBQhqLbphWr1arRCSWqEOrb6dqN8hE1iLafRYQMaW1Upr7OSwwo+2jCgPyEQ08lZEGeUUeatTngsL5XHOd7NBeS9sXYKzCO8RQAABBA65gGkoeNKrkesZx4qaMi4Ny3fMK+9JvyKLjlHW28WI/Ce98h7zafiSIbNi9F6mrZjRPnzYUPbetCbiS1p3zG3jcVJ3bk5oIjIt4+GqY4ykH1a1dHdaE5EJRW8nld1wjH6W1f3pqKKxhJYck63+OaGZh86Cjml2+ZagtksoilUKtEJIaoU6VKrwCYFGC+QUe7tTo1O5ygWlQvIeDyldObTy06Mx+QbGVDjlZhaUrjyDlssm/Oo4Gy9/drzruPW/tNPLUZS3CCCAAAJtKpC+PqL+
}
},
"cell_type": "markdown",
"metadata": {},
"source": [
"Ze względu na specyfikę wytycznych projektu zakładającego wykorzystanie jedynie dwóch cech: x i y oraz modelowanie zależności y od x za pomocą funkcji wielomianowej dobrany został przez nas odpowiedni dataset. Obejmuje on jedynie trzy kolumny, czyli: płeć, wzrost w calach oraz wagę w funtach, z czego ze względu na specyfikę projektu wykorzystywane są jedynie wzrost oraz waga. Każdy z parametrów zawiera po 10 tysięcy unikalnych wartości.\n",
"\n",
2021-06-27 17:34:20 +02:00
"![image.png](attachment:image.png)\n",
"\n",
"Dokładne informacje na temat tego zbioru, jego zawartości i samych danych można znaleźć pod adresem: https://www.kaggle.com/mustafaali96/weight-height."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. Wczytywanie i preprocessing danych"
]
},
2021-06-24 13:03:10 +02:00
{
"cell_type": "code",
2021-06-27 11:07:37 +02:00
"execution_count": 2,
2021-06-24 11:07:41 +02:00
"metadata": {},
2021-06-25 01:36:15 +02:00
"outputs": [],
2021-06-24 11:07:41 +02:00
"source": [
2021-06-27 11:07:37 +02:00
"# Stopień wielomianu\n",
"degree = 4\n",
"X_plot = np.linspace(0, 100, 1000)\n",
2021-06-25 01:36:15 +02:00
"initial_theta = np.matrix([0] * (degree + 1)).reshape(degree + 1, 1)"
2021-06-24 11:07:41 +02:00
]
},
{
"cell_type": "code",
2021-06-25 01:36:15 +02:00
"execution_count": 3,
2021-06-24 11:07:41 +02:00
"metadata": {},
2021-06-25 01:36:15 +02:00
"outputs": [],
2021-06-24 11:07:41 +02:00
"source": [
"# Wybór dwóch kolumn - dotyczących wzrostu i wagi\n",
2021-06-25 01:36:15 +02:00
"data = pd.read_csv('weight-height.csv')[[\"Height\", \"Weight\"]]\n",
"# Czyszczenie tabeli i wartości pustych\n",
2021-06-25 01:36:15 +02:00
"data = data.dropna()\n",
"data_matrix = np.matrix(data)\n",
"\n",
"m, n_plus_1 = data_matrix.shape\n",
"n = n_plus_1 - 1\n",
"X = (np.ones((m, 1)))\n",
"\n",
"for i in range(1, degree + 1):\n",
" Xn = np.power(data_matrix[:, 0:n], i)\n",
" Xn /= np.amax(Xn, axis=0)\n",
" X = np.concatenate((X, Xn), axis=1)\n",
"\n",
"X = np.matrix(X).reshape(m, degree * n + 1)\n",
"Y = np.matrix(data_matrix[:, -1])"
2021-06-24 11:07:41 +02:00
]
2021-06-24 13:03:10 +02:00
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2021-06-27 17:34:20 +02:00
"## 2. Metody regresji wielomianowej"
2021-06-24 13:03:10 +02:00
]
},
{
"cell_type": "code",
2021-06-25 01:36:15 +02:00
"execution_count": 4,
2021-06-27 17:34:20 +02:00
"metadata": {},
"outputs": [],
2021-06-24 13:03:10 +02:00
"source": [
2021-06-27 14:09:23 +02:00
"def print_theta(theta):\n",
" print(\"f(x) = \", end=\"\")\n",
" for i,x in enumerate(theta.tolist()[:-1]):\n",
" x = x[0]\n",
" print(f\"{x}x^{i}\", end=\" + \")\n",
" print(f\"{theta.tolist()[-1][0]}^{len(theta) - 1}\")\n",
"\n",
"# Implementacja wzrosu na regresję wielomianową\n",
2021-06-24 13:03:10 +02:00
"def polynomial_regression(theta, x):\n",
2021-06-27 11:07:37 +02:00
" x = x/data[\"Height\"].max()\n",
2021-06-25 01:36:15 +02:00
" return sum(theta * np.power(x, i) for i, theta in enumerate(theta.tolist()))\n",
2021-06-24 13:03:10 +02:00
"\n",
"# Implementacja wzoru na RMSE, czyli pierwiastek z błędu średniokwadratowego\n",
2021-06-25 01:36:15 +02:00
"def mean_squared_error(theta, X, Y):\n",
" J = 1.0 / (2.0 * m) * ((X * theta - Y).T * (X * theta - Y))\n",
2021-06-27 17:34:20 +02:00
" return J.item()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 3. Wybrane rodzaje gradientów"
]
},
{
"attachments": {
"image.png": {
"image/png": "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
}
},
"cell_type": "markdown",
"metadata": {},
"source": [
"Metoda gradientu prostego to algorytm numeryczny mający na celu znalezienie minimum lokalnego dla zadanej funkcji celu. Jak sama nazwa wskazuje jest to jedna z prostszych metod, która opiera się na iteracyjnym poszukiwaniu minimum. Proces ten (dla pierwszych czterech kroków), został pokazany na poniższym rysunku.\n",
"![image.png](attachment:image.png)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Wzór na gradient prosty\n",
2021-06-27 11:07:37 +02:00
"def gradient(theta, X, Y):\n",
2021-06-27 17:34:20 +02:00
" return 1.0 / len(Y) * (X.T * (X * theta - Y)) "
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
2021-06-25 09:42:03 +02:00
"# Batch gradient descent (BGD)\n",
2021-06-27 14:09:23 +02:00
"def BGD(X, Y, theta, cost_function = mean_squared_error, learning_rate=0.1, eps=10**-5, max_steps = 10000000000):\n",
2021-06-27 11:07:37 +02:00
" cost = cost_function(theta, X, Y)\n",
" logs = [[cost, theta]]\n",
" \n",
" for i in range(max_steps):\n",
2021-06-27 14:09:23 +02:00
" theta = theta - learning_rate * gradient(theta, X, Y)\n",
2021-06-27 11:07:37 +02:00
" next_cost = cost_function(theta, X, Y)\n",
" logs.append([next_cost, theta])\n",
" if abs(cost - next_cost) <= eps:\n",
" break\n",
" cost = next_cost\n",
" return theta, logs\n",
"\n",
2021-06-27 14:09:23 +02:00
"# BGD z momentum\n",
"def momentum(X, Y, theta, cost_function = mean_squared_error, learning_rate=0.1, momentum = 0.9, epochs=30):\n",
2021-06-25 01:36:15 +02:00
" cost = cost_function(theta, X, Y)\n",
2021-06-24 13:03:10 +02:00
" logs = [[cost, theta]]\n",
2021-06-27 14:09:23 +02:00
" delta_history = [np.matrix([0]*(degree+1)).T]\n",
" for i in range(epochs):\n",
" delta_history.append(momentum * delta_history[-1] + learning_rate * gradient(theta, X, Y))\n",
" theta = theta - delta_history[-1]\n",
2021-06-25 01:36:15 +02:00
" next_cost = cost_function(theta, X, Y)\n",
2021-06-24 13:03:10 +02:00
" logs.append([next_cost, theta])\n",
2021-06-25 01:36:15 +02:00
" cost = next_cost\n",
2021-06-24 13:03:10 +02:00
" return theta, logs\n",
2021-06-25 09:42:03 +02:00
"\n",
"# Mini-batch gradient descent (MBGD)\n",
2021-06-27 14:09:23 +02:00
"def MBGD(X, Y, theta, cost_function = mean_squared_error, learning_rate=0.1, epochs=5, batch_size=16):\n",
2021-06-25 09:42:03 +02:00
" cost = cost_function(theta, X, Y)\n",
" logs = [[cost, theta]]\n",
" start, end = 0, batch_size\n",
2021-06-24 13:03:10 +02:00
" \n",
2021-06-25 09:42:03 +02:00
" steps = m / batch_size\n",
" for i in range(epochs):\n",
" zipped_XY = list(zip(X, Y))\n",
" random.shuffle(zipped_XY)\n",
" X_shuffled, Y_shuffled = zip(*zipped_XY)\n",
" X_shuffled = np.concatenate(X_shuffled, axis=0) \n",
" Y_shuffled = np.concatenate(Y_shuffled, axis=0) \n",
" for j in range(int(steps)):\n",
" batch = X_shuffled[start:end,:], Y_shuffled[start:end,:]\n",
2021-06-27 14:09:23 +02:00
" theta = theta - learning_rate * gradient(theta, batch[0], batch[1])\n",
2021-06-25 09:42:03 +02:00
" cost = cost_function(theta, X, Y)\n",
" logs.append([cost, theta])\n",
"\n",
" if start + batch_size < batch_size:\n",
" start += batch_size\n",
" else:\n",
" start = 0\n",
" end = min(start + batch_size, m)\n",
" return theta, logs\n",
"\n",
"# Stochastic gradient descent (SGD)\n",
2021-06-27 14:09:23 +02:00
"def SGD(X, Y, theta, cost_function = mean_squared_error, learning_rate=0.1, epochs=5):\n",
2021-06-27 17:34:20 +02:00
" return MBGD(X, Y, theta, cost_function, learning_rate, epochs, 1)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 4. Zestawienie wyników"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"BGD:\n",
"f(x) = -65.64506277392528x^0 + 68.77648241256031x^1 + 114.75349304333466x^2 + 102.20675310280708x^3 + 52.80014652046691^4\n",
"82705 updates\n",
"\n",
"MBGD:\n",
"f(x) = -41.87728446390563x^0 + 46.386342187505655x^1 + 88.11833962940423x^2 + 98.52549425766668x^3 + 88.61917555232853^4\n",
"37501 updates\n",
"\n",
"SGD:\n",
"f(x) = 17.68516933588153x^0 + 37.059293160781614x^1 + 49.84892452267522x^2 + 57.756973382905485x^3 + 62.07857245324558^4\n",
"600001 updates\n",
"\n",
"momentum:\n",
"f(x) = 8.015549563834169x^0 + 38.129978604712115x^1 + 58.33870778356634x^2 + 71.22019895802788x^3 + 78.72511869002662^4\n",
"61 updates\n",
"\n"
]
}
],
"source": [
2021-06-27 14:09:23 +02:00
"final_theta_BGD, logs_1 = BGD(X, Y, initial_theta)\n",
"print(\"BGD:\")\n",
"print_theta(final_theta_BGD)\n",
"print(f\"{len(logs_1)} updates\\n\")\n",
"\n",
"final_theta_MBGD, logs_2 = MBGD(X, Y, initial_theta, epochs = 60)\n",
"print(\"MBGD:\")\n",
"print_theta(final_theta_MBGD)\n",
"print(f\"{len(logs_2)} updates\\n\")\n",
"\n",
"final_theta_SGD, logs_3 = SGD(X, Y, initial_theta, epochs = 60)\n",
"print(\"SGD:\")\n",
"print_theta(final_theta_SGD)\n",
"print(f\"{len(logs_3)} updates\\n\")\n",
2021-06-25 09:42:03 +02:00
"\n",
2021-06-27 14:09:23 +02:00
"final_theta_momentum, logs_4 = momentum(X, Y, initial_theta, epochs = 60)\n",
"print(\"momentum:\")\n",
"print_theta(final_theta_momentum)\n",
"print(f\"{len(logs_4)} updates\\n\")"
2021-06-25 01:36:15 +02:00
]
},
{
"attachments": {
"image.png": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA70AAAFDCAYAAAD22mnsAAAgAElEQVR4Aey9i5MV1b33/fwBp97UqefkVl5m9gCHPSC3Y0TfWEblMigMaAheciByDorUaLQgJuflIFFHAoxIEIgKMUclyiUqCnEorAcPRnDAwQHHh0GMAySMWB7HGzMJMpMw7t9bq7tX9+q1e3ev3rt77758qaJm797d6/JZq7vXb/1u/4vwDwRAAARAAARAAARAAARAAARAAAQSSuB/JbRf6BYIgAAIgAAIgAAIgAAIgAAIgAAIEIReTAIQAAEQAAEQAAEQAAEQAAEQAIHEEoDQm9ihRcdAAARAAARAAARAAARAAARAAAQg9GIOgAAIgAAIgAAIgAAIgAAIgAAIJJYAhN7EDi06BgIgAAIgAAIgAAIgAAIgAAIgAKEXcwAEQAAEQAAEQAAEQAAEQAAEQCCxBCD0JnZo0TEQAAEQAAEQAAEQAAEQAAEQAAEIvZgDIAACIAACIAACIAACIAACIAACiSUAoTexQ4uOgQAIgAAIgAAIgAAIgAAIgAAIQOjFHAABEAABEAABEAABEAABEAABEEgsAQi9iR1adAwEQAAEQAAEQAAEQAAEQAAEQABCL+YACIAACIAACIAACIAACIAACIBAYglA6E3s0KJjIAACIAACIAACIAACIAACIAACEHoxB0AABEAABEAABEAABEAABEAABBJLAEJvYocWHQMBEAABEAABEAABEAABEAABEIDQizkAAiAAAiAAAiAAAiAAAiAAAiCQWAIQehM7tOgYCIAACIAACIAACIAACIAACIAAhF7MARAAARAAARAAARAAARAAARAAgcQSgNCb2KFFx0AABEAABEAABEAABEAABEAABCD0Yg6AAAiAAAiAAAiAAAiAAAiAAAgklgCE3sQOLToGAiAAAiAAAiAAAiAAAiAAAiAAoRdzAARAAARAAARKJHBy+700fUwVZYaPpakNy6i5829mid1vbaFfzJtME8ZUUyaTodrvTqWGppfp+JfmKdRz7DV6YsHNVD9hpHXOz5+l1k+tc/AJBEAABEAABECgOAIQeovjhqtAAARAAARAQCNwdvciGlpTR427j1Pb6mma0Fo9Yg7tOPUB7bznaspcNJUWPPEyHen6C31ybBstHn+Bdk7NDRvpxEAvtaycRNnMKJrV9Dy9eeJT6vnz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
}
},
"cell_type": "markdown",
"metadata": {},
"source": [
"Metoda gradientu prostego\n",
"![image.png](attachment:image.png)"
2021-06-24 13:03:10 +02:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2021-06-27 17:34:20 +02:00
"## 4. Reprezentacja graficzna regresji wielomianowej"
2021-06-24 13:03:10 +02:00
]
},
{
"cell_type": "code",
2021-06-27 17:34:20 +02:00
"execution_count": 7,
2021-06-25 01:36:15 +02:00
"metadata": {
2021-06-27 17:34:20 +02:00
"scrolled": false
2021-06-25 01:36:15 +02:00
},
2021-06-24 13:03:10 +02:00
"outputs": [
2021-06-27 14:09:23 +02:00
{
"name": "stdout",
"output_type": "stream",
"text": [
"BGD:\n"
]
},
{
"data": {
2021-06-27 17:34:20 +02:00
"image/png": "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
2021-06-27 14:09:23 +02:00
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"MBGD:\n"
]
},
{
"data": {
2021-06-27 17:34:20 +02:00
"image/png": "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
2021-06-27 14:09:23 +02:00
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"SGD:\n"
]
},
2021-06-24 13:03:10 +02:00
{
"data": {
2021-06-27 17:34:20 +02:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlYAAAEzCAYAAADzdE1rAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA0s0lEQVR4nO3deXxU5b3H8c+TkGBCMApSRDAJKFpRXONa97iiiOJutKjVKGoFa69V09Zyvbm1Vi3WlmpcKspURdyggtVGrctVEawaqIqoCYvIKmFJINtz/3gmMEkm+8ycMzPf9+uVV2bOmTnz43WAfPOc5/weY61FRERERHouxesCRERERBKFgpWIiIhIhChYiYiIiESIgpWIiIhIhChYiYiIiESIgpWIiIhIhHQYrIwxuxtj3jDGfGaMWWiMmRDc/htjzHJjzMfBr1Eh77nNGLPYGPOFMebUaP4BRERERPzCdNTHyhgzCBhkrf3IGNMXmA+cDVwAbLLW3tPi9SOAp4DDgN2AfwJ7WWsbIl++iIiIiH90OGJlrV1hrf0o+Hgj8BkwuJ23jAGettZutdZ+AyzGhSwRERGRhNalOVbGmDzgIOCD4KYbjDGfGmMeM8bsHNw2GFga8rZltB/ERERERBJCr86+0BiTBTwHTLTWbjDG/AW4E7DB7/cCVwImzNtbXW80xhQBRQB9+vQ55Ic//GHXqxcRkaQ3/9v5kTuYgaE7DaVfRr/IHRNg6VJYtQr69AH9vIt78+fPX2OtHRBuX6eClTEmDReqAtba5wGstStD9j8M/D34dBmwe8jbhwDftjymtbYUKAXIz8+38+bN60wpIiIizeRNzqOyqjIixzIYvr7j64gca5tPPoGDD4aUFHjnHTjwwMgeX2LOGNPmX7jO3BVogEeBz6y194VsHxTysnOABcHHM4GLjDG9jTFDgeHA3O4ULiIi0pGSghIy0zIjcqyc7JxtjwPlAfIm55EyKYW8yXkEygNdP2BjI1x3nft+/fUKVUmgMyNWPwIuA8qNMR8Ht90OXGyMORB3ma8CuAbAWrvQGDMd+A9QD1yvOwJFRCRaCkcWAjBhzgTW1qxttb9PWh82123u8DiZaZmUFJQALlQVzSqiuq4agMqqSopmFTX7vE6ZOhX+7/9g4EC4887Ov0/iVoftFmJBlwJFRCQSAuUBisuKWVK1hJzsHEoKSigcWdjh5cLc7Nxtr4W2Ly/mZudSMbGic8WsWwd77w1r1sC0aVDYhUAmvmaMmW+tzQ+3r9OT10VERPyucGRh2BGlkoISLn3+0rDv6Z/Rv1VYWlK1JOxr29oeVnGxC1XHHw+XXNL590lc05I2IiISd7o6/6lwZCFZ6Vlh923curHVsULnWoVqa3srH34IDz0EvXrBn/8MJtwN85KIdClQRETiSsv5T6H6Z/Tn/tPvB5rPuersPCtwc63GHTCOqZ9MbfYZmWmZlI4u7XiOVUMDHH44zJ8Pt9wCv/tdJ/9kEi/auxSoYCUiInElku0V2tI05yrcfK0O3X8/TJwIQ4bAZ59BVviRMolfmmMlIiIJo0vznHrwGW3N12rX0qXwy1+6x3/+s0JVEtIcKxERiSudnucU68+wFm64ATZtgrFj4ayzIl+Y+J6ClYiIxJU9++0Z1eOH9rPqkhdegJkzoW9f+OMfI1+YxAUFKxERiRuB8gCvf/N61I7fP6N/5yaot1RVBT/9qXt8110weHDki5O4oDlWIiISN4rLirFE/qarrPQsHjzzwa4HqibFxfDtt3DEEXDttZEtTuKKRqxERCRuRGvieu/U3t0PVe+/D1OmuJ5VpaVusWVJWjr7IiISN6I1cT3cGoOdUlcHV1/tJq7//OcwcmRkC5O4o2AlIiJxIVAe6H4A6oTOdnFv5t57YcECGDYMfv3rqNUm8UNzrERExPcC5QGufOlKahtqo/YZFktlVSVFs4oAOr40+NVXMGmSe/zgg5CREbXaJH5oxEpERHwpUB5gl7t3wUwyXPr8pVENVaGq66opLitu/0XWwvjxsGULFBbCySfHpDbxP41YiYiI5wLlgW3Lx/TL6MeW+i2dXtsvGjqcJP/EE/Daa7DzznDffbEpSuKCgpWIiHjqupev48F5D25roxDNeVSd1e4k+RUr3FqAAJMnww9+EIuSJE7oUqCIiHgmUB5oFqr8oN3O69bC9dfD+vVw2mlw2WUxrU38T8FKREQ8E62Gn92ValIpHV0KQN7kvNZ3Cs6Y4ZauycqChx4CYzysVvxIlwJFRCSmQudT+SlUATTaRgCKZhVRXVcNsO1OwfT1Gzn/hjvcC+++G3Kivxi0xB8FKxERiYlAeYAJcyb4Yg5VW3KycyguK94WqppU11WTetPPYdVmOO44uOYajyoUv9OlQBERibpAeYCiWUW+DlVNc6vC3RE4ahGMnb/Z9ap65BEtWyNt0t8MERGJunCjQH7SNLeqcGRhqzsCd9wCD80KPrnzTthzz9gXKHFDwUpERKIuWosnR0J6ajpTz5m6rdN6SUEJmWmZ2/bf/RoM2Qhr9ttje5sFkTYoWImISNT1y+jndQlh9c/oz2NjHmu2fE3hyEJKR5eSm53LCd/ANfOhoVcquzz9EqSmelitxANNXhcRkagKlAfYsHWD12U0k2pSqf91fZv7C0cWUjjsbNh/f+BrUn99B+y7b8zqk/ilYCUiIlETKA8w7oVxNNgGr0tppuiQoo5fdOut8PXXLlz94hfRL0oSgoKViIhExUlPnETZN2Vel9FKwdACppwxpf0XlZXBn/4EvXrB1KmQnh6b4iTuaY6ViIhE3HUvX+fbULV43eLWHdVDVVXBlVe6x3fcAQceGNMaJb5pxEpERCKudH6p1yWEFRr2mjqqA80mr/Ozn8GSJXDooe5yoEgXaMRKREQizm9zqtpSXVdNcVnx9g1//zs89hj07u0uAfbS+IN0jYKViIhEXKqJn7YE23psrV0LV1/tHpeUwD77eFeUxC0FKxERibhO3XXnE9s6rf/0p/Ddd3D00WoEKt2mYCUiIhEVKA8w+8vZXpfRaaOGj4Jnn4WnnoLMTHj8cTUClW7TxWMREYmYpsWW/bwuYEtzP5oF9093T37/e9hjD28LkrimYCUiIhHj98WWW7Hwy8AyWAucdBJce63XFUmc06VAERGJGD8vthzOuI/h7C+gNisDHn0UUvRjUXpGf4NERCRi/LrYcjhD18EDc9zj20dnQk6OtwVJQlCwEhGRDgXKA+RNzmu/YzmwpX5LjCvrntQGmPY89K2FZ0fAfXut9bokSRCaYyUiIu1qOSE9tGM5uHlVlVWVXpXXaZlpmWT0ymBtzVpueweOWgbL+8I1Z0LOTrlelycJQsFKRETaFW5CenVdNRPmTKCmviYuJqv3z+jP/affD0DplJ9wx5tbARh3NmzNzqSkoMTD6iSR6FKgiIi0q60J6Wtr1sZFqAKoqa8BoHDoGGbN3oleFu47EhYfnEvp6NLmawWK9IBGrEREpF052TlxcamvPU1rAhYufJMdl6yEkSP52etz+dkOO3hdmiQYjViJiEi7SgpKyEzLbLYtMy2T/hn9Paqoew56vxIeecQtsBwIgEKVRIGClYiItKtwZCGlo0vJzXYTvA2G6rpq1tbEz510u26ER/8e/JF3110wcqS3BUnCUrASEZGwQlssFJcVM2r4KHql9MJivS6tayw8MTOFfpsb4eST4cYbva5IEpjmWImISCvhWiw8OO/BuApV/TP6s65mHXd8shMnf/k99OvnFlhWd3WJog7/dhljdjfGvGGM+cwYs9AYMyG4vZ8x5jVjzJfB7zuHvOc2Y8xiY8wXxphTo/kHEBGRyAvXYiGeQhVAVnoWjaPnccfszW7Dww/Dbrt5W5QkvM7E9nrgZmvtPsARwPXGmBHArUCZtXY4UBZ8TnDfRcC+wGnAFGNMajSKFxGR6Ii3Nf/CWbeqEi66CGpr4brrYOxYr0uSJNBhsLLWrrDWfhR8vBH4DBgMjAGmBl82FTg7+HgM8LS1dqu19htgMXBYhOsWEZEoysmO/3Xz/vpaH/jySzdR/Z57vC5HkkSXLjQbY/K
2021-06-27 14:09:23 +02:00
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Momentum:\n"
]
},
{
"data": {
2021-06-27 17:34:20 +02:00
"image/png": "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
2021-06-24 13:03:10 +02:00
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"def plot_polynomial_regression(theta):\n",
" fig = plt.figure(figsize=(10,5))\n",
2021-06-25 01:36:15 +02:00
" Y_plot = polynomial_regression(theta, X_plot).tolist()\n",
2021-06-24 13:03:10 +02:00
" chart = fig.add_subplot()\n",
2021-06-27 11:07:37 +02:00
" chart.plot(data[\"Height\"], Y ,\"go\")\n",
2021-06-24 13:03:10 +02:00
" chart.plot(X_plot, Y_plot, color=\"red\", lw=2, label=f\"degree {len(theta)}\")\n",
2021-06-27 11:07:37 +02:00
" plt.ylim([0,250])\n",
2021-06-24 13:03:10 +02:00
" plt.show()\n",
2021-06-27 14:09:23 +02:00
"\n",
"print(\"BGD:\")\n",
"plot_polynomial_regression(final_theta_BGD)\n",
"print(\"MBGD:\")\n",
"plot_polynomial_regression(final_theta_MBGD)\n",
"print(\"SGD:\")\n",
"plot_polynomial_regression(final_theta_SGD)\n",
"print(\"Momentum:\")\n",
"plot_polynomial_regression(final_theta_momentum)"
2021-06-27 11:07:37 +02:00
]
},
2021-06-24 13:03:10 +02:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
2021-06-27 17:34:20 +02:00
"## 5. Regresja wielomianowa z wykorzystaniem gotowych bibliotek"
2021-06-24 13:03:10 +02:00
]
},
{
"cell_type": "code",
2021-06-27 17:34:20 +02:00
"execution_count": 8,
2021-06-24 13:03:10 +02:00
"metadata": {},
"outputs": [],
"source": [
"from sklearn.preprocessing import PolynomialFeatures, StandardScaler\n",
"from sklearn.pipeline import make_pipeline\n",
"from sklearn.linear_model import Ridge, LinearRegression"
]
},
{
"cell_type": "code",
2021-06-27 17:34:20 +02:00
"execution_count": 9,
2021-06-24 13:03:10 +02:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
2021-06-27 11:07:37 +02:00
"Pipeline(steps=[('polynomialfeatures', PolynomialFeatures(degree=4)),\n",
2021-06-24 13:03:10 +02:00
" ('linearregression', LinearRegression())])"
]
},
2021-06-27 17:34:20 +02:00
"execution_count": 9,
2021-06-24 13:03:10 +02:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model = make_pipeline(PolynomialFeatures(degree=degree, include_bias=True), \n",
" LinearRegression())\n",
2021-06-25 01:36:15 +02:00
"model.fit(data[[\"Height\"]],Y)"
2021-06-24 13:03:10 +02:00
]
},
{
"cell_type": "code",
2021-06-27 17:34:20 +02:00
"execution_count": 10,
2021-06-24 13:03:10 +02:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
2021-06-27 11:07:37 +02:00
"4"
2021-06-24 13:03:10 +02:00
]
},
2021-06-27 17:34:20 +02:00
"execution_count": 10,
2021-06-24 13:03:10 +02:00
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
2021-06-27 17:34:20 +02:00
"image/png": "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
2021-06-24 13:03:10 +02:00
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
2021-06-27 11:07:37 +02:00
"Y_plot_2 = model.predict([[x] for x in X_plot])\n",
2021-06-24 13:03:10 +02:00
"\n",
"fig = plt.figure(figsize=(10,5))\n",
"chart = fig.add_subplot()\n",
2021-06-25 01:36:15 +02:00
"chart.plot(data[\"Height\"], Y ,\"go\")\n",
2021-06-27 11:07:37 +02:00
"chart.plot(X_plot, Y_plot_2, color=\"red\", lw=2, label=f\"degree {degree}\")\n",
"plt.ylim([0,250])\n",
2021-06-27 11:07:37 +02:00
"plt.xlim([0,100])\n",
2021-06-24 13:03:10 +02:00
"degree"
]
2021-06-27 14:09:23 +02:00
},
{
"cell_type": "code",
2021-06-27 17:34:20 +02:00
"execution_count": 11,
2021-06-27 14:09:23 +02:00
"metadata": {},
"outputs": [
{
"data": {
2021-06-27 17:34:20 +02:00
"image/png": "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
2021-06-27 14:09:23 +02:00
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"polyfit_theta = np.polyfit(data[\"Height\"]/data[\"Height\"].max(), Y, degree)\n",
"plot_polynomial_regression(polyfit_theta)"
]
2021-06-24 11:07:41 +02:00
}
],
"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",
2021-06-27 17:34:20 +02:00
"version": "3.8.8"
2021-06-24 11:07:41 +02:00
}
},
"nbformat": 4,
"nbformat_minor": 4
}