{ "cells": [ { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "0fVD-WRKhgE2" }, "source": [ "# Regresja liniowa\n", "Autor: Jarosław Żygierewicz\n", "\n", "Importujemy ponownie powtórzone `numpy`, dodajemy moduł do tworzenia wykresów `pyplot`." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "colab": {}, "colab_type": "code", "id": "DB6NUjsLhTLd" }, "outputs": [], "source": [ "import numpy as np\n", "import pylab as py" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "OE_3hFYtIDv-" }, "source": [ "# Zapoznanie się z regresją liniową\n", "* W ramach tego ćwiczenia będziemy chcieli opisać zbiór danych modelem liniowym.\n", "* Zbiór danych stworzymy sami w sposób sztuczny, ale w typowych problemach zebranie i obróbka danych stanowi znaczącą część pracy.\n", "* Nasz liniowy model ma postać: $y = \\theta_0 + \\theta_1 x$\n", "* Dane wytworzymy dla konkretnych $\\theta_0$ i $\\theta_1$, a następnie zaimplementujemy regresję liniową, aby znaleźć jak najlepsze przybliżenie dla tych parametrów.\n", "* `(X,Y)` to ciąg uczący. *Co to ciąg uczący?*" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "8PHcEKITkFAc" }, "source": [ "## Produkcja danych" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "pnbVmOFqIDv_" }, "source": [ "Zacznijmy od produkcji $x$. W późniejszej części ćwiczenia zobaczymy, że wygodniej je mieć w postaci wektora kolumnowego, ale na razie zróbmy płaską tablicę 1D. Proszę wygenerować n równoodległych punktów w przedziale [0,10], gdzie n jest wybraną przez was liczbą naturalną nie mniejszą niż 10." ] }, { "cell_type": "code", "execution_count": 79, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 52 }, "colab_type": "code", "executionInfo": { "elapsed": 1996, "status": "ok", "timestamp": 1570788655455, "user": { "displayName": "Anna Dawid", "photoUrl": "https://lh3.googleusercontent.com/a-/AAuE7mBMAlqIzrWbyBbGSDvCFuCvvSN7Xx3h3HRKaToc0r4=s64", "userId": "02862484648310443813" }, "user_tz": -120 }, "id": "ttS1qAmEIDwA", "outputId": "5a9ddf2e-ed4c-4362-cf51-15d7305753d3" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 0. 1.11111111 2.22222222 3.33333333 4.44444444 5.55555556\n", " 6.66666667 7.77777778 8.88888889 10. ]\n" ] } ], "source": [ "n = 10\n", "x = np.linspace(0, 10, n)\n", "print(x)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "OwGOuzcQIDwH" }, "source": [ "Ustalamy parametry dla symulacji $\\theta_0 = 1$ i $\\theta_1 = 3$:" ] }, { "cell_type": "code", "execution_count": 80, "metadata": { "colab": {}, "colab_type": "code", "id": "8makH4WzIDwI" }, "outputs": [], "source": [ "theta0 = 1\n", "theta1 = 3" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "N3l9-73PIDwD" }, "source": [ "Teraz produkujemy odpowiadające $y = \\theta_0 + \\theta_1 x$ korzystając z wybranych parametrów." ] }, { "cell_type": "code", "execution_count": 81, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 52 }, "colab_type": "code", "executionInfo": { "elapsed": 1961, "status": "ok", "timestamp": 1570788655459, "user": { "displayName": "Anna Dawid", "photoUrl": "https://lh3.googleusercontent.com/a-/AAuE7mBMAlqIzrWbyBbGSDvCFuCvvSN7Xx3h3HRKaToc0r4=s64", "userId": "02862484648310443813" }, "user_tz": -120 }, "id": "7aUBMKeilMQE", "outputId": "0abb0e48-7a12-48e8-8abf-96051e94a06e" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 1. 4.33333333 7.66666667 11. 14.33333333 17.66666667\n", " 21. 24.33333333 27.66666667 31. ]\n" ] } ], "source": [ "y = np.ones(n)*theta0 + x*theta1\n", "print(y)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "yewJ96CHIDwL" }, "source": [ "Proszę wyplotować dane jako punkty na wykresie." ] }, { "cell_type": "code", "execution_count": 82, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 269 }, "colab_type": "code", "executionInfo": { "elapsed": 2371, "status": "ok", "timestamp": 1570788655896, "user": { "displayName": "Anna Dawid", "photoUrl": "https://lh3.googleusercontent.com/a-/AAuE7mBMAlqIzrWbyBbGSDvCFuCvvSN7Xx3h3HRKaToc0r4=s64", "userId": "02862484648310443813" }, "user_tz": -120 }, "id": "EL_rSguzmlKi", "outputId": "95654152-da06-4942-e24a-9ed44b4d3f19" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "py.plot(x, y, 'bo')\n", "py.show()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "StUPjPEbmyO5" }, "source": [ "Skomplikujmy trochę zadanie dla naszej regresji. Wprowadźmy coś na kształt szumu: do każdego $y$ dodaj małą liczbę losową z N(0,3) i ponownie narysuj wykres. Teraz dane wyglądają bardziej życiowo! " ] }, { "cell_type": "code", "execution_count": 83, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 304 }, "colab_type": "code", "executionInfo": { "elapsed": 2344, "status": "ok", "timestamp": 1570788655898, "user": { "displayName": "Anna Dawid", "photoUrl": "https://lh3.googleusercontent.com/a-/AAuE7mBMAlqIzrWbyBbGSDvCFuCvvSN7Xx3h3HRKaToc0r4=s64", "userId": "02862484648310443813" }, "user_tz": -120 }, "id": "qWMWQc7SIDwL", "outputId": "a82b50c2-a405-4422-c1bd-3b3ad7710121" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[-0.21770599 7.14106192 6.32885821 10.34162419 12.96074282 17.64124477\n", " 21.32769986 26.19914603 28.32919825 30.71779142]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "y = np.ones(n)*theta0 + x*theta1 + 1*np.random.randn(n)\n", "print(y)\n", "py.plot(x, y, 'bo')\n", "py.show()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "c_r-QQtsIDwR" }, "source": [ "## Algorytm równań normalnych\n", "Proszę napisać funkcję, która:\n", "* na wejściu przyjmuje ciąg uczący, implementuje wzór na parametry optymalne na podstawie [równań normalnych](http://brain.fuw.edu.pl/edu/index.php/Uczenie_maszynowe_i_sztuczne_sieci_neuronowe/Wykład_1#Minimalizacja_funkcji_kosztu ). \n", "* Funkcja powinna zwracać estymowane parametry theta.\n", "* Proszę dorysować prostą reprezentującą hipotezę do wykresu punktów ciągu uczącego.\n", "* dla przypomnienia: odwrotność macierzy można obliczyć w numpy funkcją: numpy.linalg.inv\n", "* proszę zwrócić uwagę, że konieczne jest użycie wektorów kolumnowych!\n", "\n", "Podpowiedź: aby skorzystać ze wzorów z wykładu, macierz wejść $X$ musi zawierać nie tylko kolumnę $x$, ale także kolumnę jedynek, aby przemnożona przez wektor [$\\theta_0$ $\\theta_1$] dawała odpowiedni wektor (kolumnowy) wyjść $y$." ] }, { "cell_type": "code", "execution_count": 84, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 538 }, "colab_type": "code", "executionInfo": { "elapsed": 834, "status": "ok", "timestamp": 1570788770262, "user": { "displayName": "Anna Dawid", "photoUrl": "https://lh3.googleusercontent.com/a-/AAuE7mBMAlqIzrWbyBbGSDvCFuCvvSN7Xx3h3HRKaToc0r4=s64", "userId": "02862484648310443813" }, "user_tz": -120 }, "id": "_pK1Ue7oIDwS", "outputId": "e5bb40c2-bd57-487c-9ff5-3cf258fb9c09" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(10, 2) (10, 1)\n", "[[0.70260436]\n", " [3.07487236]]\n", "prawdziwe wartości parametrów: [1 3]\n", "wartości estymowane za pomocą równań normalnych: [[0.70260436 3.07487236]]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def licz_rownania_normalne(X,y):\n", " a = np.linalg.inv(np.dot(X.T,X))\n", " b = np.dot(X.T, y)\n", " theta = np.dot(a,b)\n", " print(theta)\n", " return theta\n", "\n", "X = np.column_stack( (np.ones(n), x.reshape(n, 1)) )\n", "Y = y.reshape(n, 1)\n", "print(X.shape, Y.shape)\n", "theta = np.array([theta0, theta1])\n", "\n", "theta_est = licz_rownania_normalne(X, Y)\n", "print(\"prawdziwe wartości parametrów: \", theta.T)\n", "print(\"wartości estymowane za pomocą równań normalnych: \", theta_est.T)\n", "py.plot(X[:,1], Y,'bo')\n", "y_reg = np.dot(X,theta_est) \n", "py.plot(X[:,1],y_reg,'g')\n", "y_oryg = np.dot(X,theta) \n", "py.plot(X[:,1],y_oryg,'r')\n", "py.xlabel(\"x\")\n", "py.ylabel(\"y\")\n", "py.title(\"Regresja z równań normalnych\")\n", "py.show()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "3HA0EFYBIDwV" }, "source": [ "## Algorytm gradientowy stochastyczny \n", "Proszę napisać funkcję, która znajduje optymalne parametry theta wg algorytmu gradientowego stochastycznego. \n", "Funkcja jako argumenty przyjmuje:\n", "1. ciąg uczący, \n", "2. (dowolne) wartości początkowe theta \n", "3. parametr szybkości zbiegania alpha\n", "4. liczbę epok (iteracji)\n", "\n", "W każdej iteracji funkcja wybiera losowo jeden z punktów z ciągu uczącego i modyfikuje w oparciu o niego parametry theta. Na wyjściu funkcja powinna zwracać wyestymowane wartości parametrów theta.\n", "\n", "W ramach ilustracji po każdej iteracji proszę dorysować zieloną prostą parametryzowaną przez aktualne wartości parametrów. " ] }, { "cell_type": "code", "execution_count": 93, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 330 }, "colab_type": "code", "executionInfo": { "elapsed": 3081, "status": "ok", "timestamp": 1570788656723, "user": { "displayName": "Anna Dawid", "photoUrl": "https://lh3.googleusercontent.com/a-/AAuE7mBMAlqIzrWbyBbGSDvCFuCvvSN7Xx3h3HRKaToc0r4=s64", "userId": "02862484648310443813" }, "user_tz": -120 }, "id": "_Sn8K1uIIDwW", "outputId": "720b35a9-4332-4534-de9c-fd03b6d8ea88" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "prawdziwe wartości parametrów: [1 3]\n", "wartości estymowane za pomocą algorytmu gradientowego stochastycznego: [[0.51183332 3.12234433]]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def licz_iteracyjnie_stoch(X, Y, theta = np.array([0,0]).reshape(2,1), alpha = 0.01, epochs = 15):\n", " for i in range(epochs):\n", " # wybieramy losowy indeks\n", " ind = np.random.randint(X.shape[0])\n", " # mały x to wejście pojedynczego przykładu o indeksie ind\n", " x = X[ind] \n", " # nadajemy x odpowiedni kształt by mnożyć macierzowo\n", " x = x.reshape(1,len(x))\n", " # zmieniamy wartości parametrów theta\n", " theta = theta - alpha*(np.dot(x,theta)-Y[ind])*x.T\n", " # rysujemy prostą dla wyestymowanych wartości parametrów\n", " y_est = np.dot(X,theta)\n", " py.plot(X[:,1], y_est, 'g')\n", " \n", " return theta\n", "\n", "#################################################\n", "print(\"prawdziwe wartości parametrów: \", theta.T)\n", "\n", "# narusuj dane wejściowe \n", "py.plot(X[:,1], Y, 'bo', label='true')\n", "# znajdź optymalne wartości parametrów\n", "theta_est = licz_iteracyjnie_stoch(X,Y)\n", "\n", "# narysuj prostą w oparciu o znalezione parametry\n", "y_est = np.dot(X, theta_est)\n", "py.plot(X[:,1], y_est, 'r')\n", "\n", "\n", "print(\"wartości estymowane za pomocą algorytmu gradientowego stochastycznego: \", theta_est.T)\n", "py.xlabel(\"x\")\n", "py.ylabel(\"y\")\n", "py.title(u\"Regresja z alg. grad. stochastycznego\")\n", "py.show()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "HPd4lLdUIDwZ" }, "source": [ "## Algortym gradientowy zbiorczy\n", "Proszę napisać funkcję, która znajduje optymalne parametry theta wg algorytmu gradientowego zbiorczego. \n", "Funkcja jako argumenty przyjmuje:\n", "1. ciąg uczący, \n", "2. (dowolne) wartości początkowe theta \n", "3. parametr szybkości zbiegania alpha\n", "4. liczbę epok (iteracji)\n", "\n", "W każdej iteracji funkcja modyfikuje parametry theta w oparciu o **wszystkie** punkty z ciągu uczącego. Na wyjściu funkcja powinna zwracać wyestymowane wartości parametrów theta.\n", "\n", "W ramach ilustracji po każdej iteracji proszę dorysować zieloną prostą parametryzowaną przez aktualne wartości parametrów. " ] }, { "cell_type": "code", "execution_count": 99, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 590 }, "colab_type": "code", "executionInfo": { "elapsed": 3450, "status": "ok", "timestamp": 1570788657119, "user": { "displayName": "Anna Dawid", "photoUrl": "https://lh3.googleusercontent.com/a-/AAuE7mBMAlqIzrWbyBbGSDvCFuCvvSN7Xx3h3HRKaToc0r4=s64", "userId": "02862484648310443813" }, "user_tz": -120 }, "id": "Mi3KFdUbIDwb", "outputId": "09915ca5-ca57-4c2f-bbe7-965273b72c5d" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "prawdziwe wartości parametrów: [[0.16076966 1.11702975]]\n", "wartości estymowane za pomocą algorytmu gradientowego zbiorczego: [[0.16076966 1.11702975]]\n", "prawdziwe wartości parametrów: [[0.26408014 1.83299203]]\n", "wartości estymowane za pomocą algorytmu gradientowego zbiorczego: [[0.26408014 1.83299203]]\n", "prawdziwe wartości parametrów: [[0.3305594 2.29187614]]\n", "wartości estymowane za pomocą algorytmu gradientowego zbiorczego: [[0.3305594 2.29187614]]\n", "prawdziwe wartości parametrów: [[0.37342966 2.58597706]]\n", "wartości estymowane za pomocą algorytmu gradientowego zbiorczego: [[0.37342966 2.58597706]]\n", "prawdziwe wartości parametrów: [[0.40116617 2.77445451]]\n", "wartości estymowane za pomocą algorytmu gradientowego zbiorczego: [[0.40116617 2.77445451]]\n", "prawdziwe wartości parametrów: [1 3]\n", "wartości estymowane za pomocą algorytmu gradientowego zbiorczego: [[0.40116617 2.77445451]]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def licz_iteracyjnie_batch(X,Y, theta = np.array([0,0]).reshape(2,1), alpha = 0.001, epochs = 5):\n", " for i in range(epochs):\n", " delta = np.zeros((len(theta),1))\n", "# print(enumerate(X))\n", " \n", " for ind, x in enumerate(X): \n", " # mały x to wejście pojedynczego przykładu \n", " x = x.reshape(1, len(x))\n", " delta += ( np.dot(x,theta)- Y[ind])*x.T\n", " \n", " theta = theta - alpha * delta\n", " print(\"prawdziwe wartości parametrów: \", theta.T)\n", " print(\"wartości estymowane za pomocą algorytmu gradientowego zbiorczego: \", theta.T)\n", " py.plot(X[:,1], Y, 'bo')\n", " y_reg = np.dot(X,theta) \n", " py.plot(X[:,1], y_reg, 'g')\n", " \n", " return theta\n", "\n", "py.plot(X[:,1], Y, 'bo')\n", "\n", "theta_est = licz_iteracyjnie_batch(X,Y)\n", "print(\"prawdziwe wartości parametrów: \", theta.T)\n", "print(\"wartości estymowane za pomocą algorytmu gradientowego zbiorczego: \", theta_est.T)\n", "\n", "y_reg = np.dot(X,theta_est) \n", "py.plot(X[:,1], y_reg, 'r')\n", "py.xlabel(\"x\")\n", "py.ylabel(\"y\")\n", "py.title(u\"Regresja z alg. grad. zbiorczego\")\n", "py.show() " ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "xKgTHdG9IDwe" }, "source": [ "## Porównanie algorytmów\n", "* Proszę sprawdzić zbieżność algorytmów w zależności od parametrów szybkości zbiegania.\n", "* Proszę sprawdzić czy algorytmy optymalizacyjne działają poprawnie dla danych gdzie błąd podlega innym rozkładom prawdopodobieństwa niż normalny. np. rozkład jednorodny lub t o 3 st. swobody." ] } ], "metadata": { "colab": { "collapsed_sections": [], "name": "01b_Regresja_liniowa.ipynb", "provenance": [ { "file_id": "0BzwQ_Lscn8yDWnZVeHU1MjluWFU", "timestamp": 1546856440599 } ] }, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.6" } }, "nbformat": 4, "nbformat_minor": 4 }