{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "oMv_I3EiF6Rd" }, "source": [ "# Regresja logistyczna, walidacja krzyżowa, krzywe ROC\n", "Autor: Jarosław Żygierewicz" ] }, { "cell_type": "markdown", "metadata": { "id": "yJjklVp9F6Rg" }, "source": [ "## Część I: regresja logistyczna\n", "Ten notebook pomoże Ci zapoznać się z regresją logistyczną. \n", "\n", "Zbudujemy klasyfikator bazujący na regresji logistycznej. Jego zadaniem będzie określanie prawdopodobieństwa przyjęcia kandydata na studia na podstawie wyników z dwóch egzaminów maturalnych (każdy przeskalowany na zakres 0-100%): z matematyki i z biologii. " ] }, { "cell_type": "markdown", "metadata": { "id": "qpPO3J51F6Rj" }, "source": [ "Zanim przejdziemy do właściwych zadań zaimportujmy potrzebne moduły:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import scipy.optimize as so" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Zestaw uczący pobieramy z repozytorium github i wczytujemy używając klasy Pandas DataFrame. Najpierw pobieramy repozytorium z github. Repozytorium zawiera kod do naszych ćwiczeń, oraz przykładowe dane w katalogu \"dane\"." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "#!git clone https://github.com/rav2/uczenie-maszynowe-2021-22" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "df = pd.read_csv(\"../uczenie-maszynowe-2021-22/dane/reg_log_data.txt\", encoding='latin-1', sep=\",\", names=[\"matematyka\", \"biologia\", \"wynik\"])" ] }, { "cell_type": "markdown", "metadata": { "id": "tK8shSDdF6R2" }, "source": [ "Aby łatwiej było się nimi posługiwać wydzielmy z nich dane wejściowe jako 'X' i wyjściowe jako 'Y':" ] }, { "cell_type": "markdown", "metadata": { "id": "lzoi2OTNF6R7" }, "source": [ "## Analiza wizualna danych. \n", "\n", "Pierwszy krok przy analizie danych z użyciem dowolnego algorytmu to ich inspekcja. Korzystając z metod klasy DataFrame proszę:\n", "* wypisać na ekran framgent danych\n", "* narysować rozkłady wszystkich zmiennych wejściowych, w naszym przypadku wyniku egzaminów z matematyki i biologii dla całego zbioru\n", "* narysować rozkłady wszystkich zmiennych wejściowych, w naszym przypadku wyniku egzaminów z matematyki i biologii dla wierszy gdzie wynik=0\n", "* narysować rozkłady wszystkich zmiennych wejściowych, w naszym przypadku wyniku egzaminów z matematyki i biologii dla wierszy gdzie wynik=1\n", "\n", "**Wskazówka**: proszę użyć filtrowania danych, tak jak to było robione na pierwszych zajęciach." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " matematyka biologia wynik\n", "0 34.623660 78.024693 0\n", "1 30.286711 43.894998 0\n", "2 35.847409 72.902198 0\n", "3 60.182599 86.308552 1\n", "4 79.032736 75.344376 1\n", ".. ... ... ...\n", "95 83.489163 48.380286 1\n", "96 42.261701 87.103851 1\n", "97 99.315009 68.775409 1\n", "98 55.340018 64.931938 1\n", "99 74.775893 89.529813 1\n", "\n", "[100 rows x 3 columns]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# uzyj tego do okreslenia rozmiaru obrazka\n", "figsize=(15,5)\n", "# wypisz dataframe\n", "print(df)\n", "# wyplotuj wszystko\n", "df.hist(figsize=figsize);\n", "# wyplotuj tych co zdali\n", "df_passed = df[df[\"wynik\"]==1]\n", "df_passed.hist(figsize=figsize);\n", "# wyplotuj tych co nie zdali\n", "df_failed = df[df[\"wynik\"]==0]\n", "df_failed.hist(figsize=figsize);\n", "\n", "#To samo co powyżej w jednej linii\n", "df.hist(figsize=figsize, by=\"wynik\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To co nas interesuje to są jednak korelacje między zmiennymi. Korzystając z przykładu z pierwszych ćwiczeń proszę:\n", "\n", "* narysować wykres korelacji między zmiennymi wejściowymi dla pełnych danych, oraz wierszy gdzie wynik=0 lub 1\n", "\n", "**Wskazówka**: proszę użyć parametru \"hue\" funkcji sns.jointplot()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import seaborn as sns\n", "\n", "x = sns.jointplot(x=\"matematyka\", y=\"biologia\", data=df_passed, kind='hist')\n", "x.set_axis_labels('matematyka', 'biologia', fontsize=16);\n", "\n", "x = sns.jointplot(x=\"matematyka\", y=\"biologia\", data=df_failed, kind='hist')\n", "x.set_axis_labels('matematyka', 'biologia', fontsize=16);\n", "\n", "x = sns.jointplot(x=\"matematyka\", y=\"biologia\", data=df, kind='hist', hue=\"wynik\")\n", "x.set_axis_labels('matematyka', 'biologia', fontsize=16);" ] }, { "cell_type": "markdown", "metadata": { "id": "KCic0Ta2F6SH" }, "source": [ "## Hipoteza\n", "Dla przypomnienia _hipoteza_ w regresji logistycznej ma postać: \n", "\n", "$\\qquad$ $h_\\theta(x) = \\frac{1}{1+\\exp(-\\theta x^T )}$.\n", "\n", "W implementacji dobrze jest myśleć o tej funkcji tak:\n", "\n", "$\\qquad$ $h_\\theta(x) = \\frac{1}{1+f}$.\n", "\n", "gdzie: $f = \\exp(-\\theta x^T)$\n", "\n", "Proszę napisać funkcję ```logistic_func(x, theta)``` która:\n", "\n", "* implementuje funkcję logistyczną\n", "* jako argumenty przyjmuje parametry regresji logistycznej $(\\theta_{0}, \\theta_{1}, ..., \\theta_{i})$ oraz tablicę danych wejściowych $x$. \n", "* w kodzie fukcji proszę rozszerzyć tablicę $x$ o dodatkową kolumnę jedynek, by parametr $\\theta_{0}$ był traktowany na tej same zasadzie co pozostałe parametry\n", "* ze względu na stabilność numeryczną obliczeń ma ograniczony zakres zmienności. Proszę ograniczyć wartości wykładnika w mianowniku do zakresu $\\pm18$\n", "\n", "**Ostrzeżenie:** x to tablica która może zawierać wiele kolumn i wiele wierszy.\n", "\n", "**Wskazówka**: ograniczając zakres zwracanych wartości proszę skorzystać z funkcji np.where() zaaplikowanej do wektora wartości wykładnika.\n", "\n", "Proszę sprawdzić działanie funkcji na następujących danych testowych:\n", "```\n", "theta = np.array([1,1,2])\n", "x = np.array([[5,5],\n", " [5,6],\n", " [-5,-5],\n", " [-5,-8]])\n", "```" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 16., 18., -14., -20.])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "theta = np.array([1,1,2])\n", "x = np.array([[5,5],\n", " [5,6],\n", " [-5,-5],\n", " [-5,-8]])\n", "x_expanded = np.column_stack((np.ones(x.shape[0]), x))\n", "\n", "np.sum(theta*x_expanded, axis=1)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[9.99999887e-01 9.99999985e-01 8.31528028e-07 1.52299795e-08]\n" ] } ], "source": [ "def logistic_func(theta, x):\n", " # dodaj kolumne jedynek\n", " x_expanded = np.column_stack((np.ones(x.shape[0]), x))\n", " #arg1 = (theta.reshape(1, len(theta)) @ x_expanded.T).reshape(-1)\n", " # policz argument funkcji\n", " arg = np.sum(theta*x_expanded, axis=1)\n", " # uzyj np.where żeby ograniczyc wartosci parmetru do [-18,18]\n", " arg = np.where(np.abs(arg)<18, arg, 18*np.sign(arg))\n", " return 1.0/(1+np.exp(-arg))\n", "\n", "\n", "\n", "theta = np.array([1,1,2])\n", "x = np.array([[5,5],\n", " [5,6],\n", " [-5,-5],\n", " [-5,-8]])\n", "res = logistic_func(theta, x)\n", "# poprosze liste o podanym wymiarze na wyniku\n", "assert res.shape == (4,)\n", "print(res)\n" ] }, { "cell_type": "markdown", "metadata": { "id": "ARAowqB7F6SP" }, "source": [ "## Funkcja log-wiarygodności: \n", "Parametry regresji znajdujemy przez maksymalizację [funkcji log-wiarygodności](https://brain.fuw.edu.pl/edu/index.php/Uczenie_maszynowe_i_sztuczne_sieci_neuronowe/Wykład_6#Funkcja_wiarygodno.C5.9Bci):\n", "\n", "$\\qquad$ $l(\\theta) = \\log L(\\theta) = \\sum_{j=1}^m y^{(j)} \\log h(x^{(j)}) + (1 - y^{(j)}) \\log (1 - h(x^{(j)}))$,\n", "gdzie: \n", "\n", "m - liczebność próbki\n", "\n", "x - dane wejściowe, u nas wyniki z egaminów z matematyki i biologii\n", "\n", "y - dane wyjściowe, u nas wynik rekrutacji na studia\n", "\n", "h - postać zależności wyniku od danych wejściowych. U nas to jest funkcja logistyczna, czyli oczekujemy, że wzór y = h(x) dobrze opisuje zależnośc między danymi wejściowymi, a wyjściowymi.\n", "\n", "\n", "
\n", "\n", "Proszę napisać funkcję ```log_likelihood(theta, x,y, model)``` która:\n", "\n", "* implementuje funkcję log-wiarygodności\n", "* jako argumenty przyjmuje parametry regresji logistycznej $(\\theta_{0}, \\theta_{1}, ..., \\theta_{i})$ oraz tablicę danych wejściowych $x, y$. \n", "* model dla którego szukamy parametrów $\\theta_{i}$ w naszym przypadku to będzie funkcja logistyczna: ```logistic_func```\n", "\n", "**Uwaga**: argument $theta$ musi być pierwszy " ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "def log_likelihood(theta, x, y, model):\n", " # Miejsce na twój kod. Użyj argumentu model zamiast konkretnej funkcji.\n", " model_result = model(theta, x)\n", " result = y*np.log(model_result) + (1-y)*np.log(1-model_result)\n", " result = np.sum(result)\n", " return result" ] }, { "cell_type": "markdown", "metadata": { "id": "7pCk325NF6SS" }, "source": [ "Maksymalizacja to zadanie optymalizacyjne - szukamy optymalnych parametrów, a kryterium optymalności to maksymalna wartość funckji log-wiarygodności.\n", "W tym ćwiczeniu zrobimy to za pomocą funkcji optymalizacyjnych z modułu [scipy.optimize]( http://docs.scipy.org/doc/scipy/reference/optimize.html#module-scipy.optimize). \n", "\n", "\n", "Wynikają z tego dwie konsekwencje:\n", "* funkcje te są przystosowane do szukania minimów funkcji celu. Musimy więc podawać im jako argumenty funkcję minus log-wiarygodności\n", "* niektóre algorytmy mogą działać szybciej jeśli zaimplementujemy jawnie postać pochodnej:\n", "\n", "$\\qquad$ $\n", "\\begin{array}{lcl}\n", "\\frac{\\partial}{\\partial \\theta_i} l(\\theta) =\\sum_{j=1}^m (y^{(j)}-h_\\theta(x^{(j)}))x_i^{(j)}\n", "\\end{array}\n", "$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Proszę napisać funkcję ```negative_log_likelihood(theta, x,y, model)``` która:\n", "\n", "* zwraca funkcję log-wiarygodności pomnożoną przez $-1$" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "def negative_log_likelihood(theta, x, y, model):\n", " return -log_likelihood(theta, x, y, model)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Proszę napisać funkcję ```log_likelihood_derivative(theta, x,y, model)``` oraz ```negative_log_likelihood_derivative(theta, x,y, model)``` które:\n", "\n", "* zwraca funkcję pochodną log-wiarygodności\n", "* zwraca funkcję pochodną log-wiarygodności pomnożoną przez $-1$\n", "\n", "**Uwaga**: mnożąc przez $x_{i}$ trzeba uwzględnić kolumnę jedynek" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "def log_likelihood_derivative(theta, x, y, model):\n", " # Miejsce na Twój kod. Pamiętaj, żeby dodać kolumnę jedynek do x.\n", " #\n", " # 1. Policz wynik modelu dzialajacego na danych wejsciowych\n", " x_expanded = np.column_stack((np.ones(x.shape[0]), x))\n", " model_result = model(theta, x)\n", " # 2. Policz różnicę względem danych wyjściowcyh\n", " delta = np.array(y - model_result)\n", " # 3. Policz wartość pochodnej pamiętając o sumowaniu\n", " delta = np.reshape(delta,(-1,1))\n", " result = delta*x_expanded\n", " result = np.sum(result, axis=0)\n", " # 4. zwróc wynik, wartość pochodnej we wszystkich kierunkach (kolumnach)\n", " assert result.shape == theta.shape\n", " return result\n", "\n", "def negative_log_likelihood_derivative(theta, x, y, model):\n", " return -log_likelihood_derivative(theta, x, y, model)" ] }, { "cell_type": "markdown", "metadata": { "id": "HgN1eW3HF6Sc" }, "source": [ "## Procedura minimalizacji funkcji log-wiarygodności ze wsględu na parametry $\\theta$ dla konkretnych danych.\n", "\n", "W naszym przypadku mamy trzy parametry $\\theta$ - mnożące odpowiednio 1, wynik z matematyki, wynik z biologii.\n", "\n", "Proszę:\n", "* zainicjalizować parametry $\\theta_{0}, \\theta_{1}, \\theta_{2}$ na wartości 0.\n", "* obliczyć wartość i pochodną funkcji wiarygodności na danych początkowych \n", "\n", "Poprawne wartości to:\n", "```\n", "Wartość funkcji log-wiarygodności dla zbioru testowego = -69.31471805599453\n", "Wartość pochodnej funkcji log-wiarygodności dla zbioru testowego = [ 10. 1200.92165893 1126.28422055]\n", "```" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Wartość funkcji log-wiarygodności dla zbioru testowego = -69.31471805599453\n", "Wartość pochodnej funkcji log-wiarygodności dla zbioru testowego = [ -31. -1475.63866911 -1526.82006556]\n" ] } ], "source": [ "theta0 = np.array([0,0,0])\n", "\n", "model = logistic_func\n", "\n", "# wartość funkcji log-wiarygodności\n", "llh = log_likelihood(theta0, df[[\"matematyka\",\"biologia\"]], df[\"wynik\"], model)\n", "# wartość pochodnej\n", "llh_derivative = log_likelihood_derivative(theta0, df[[\"matematyka\",\"biologia\"]], df[\"wynik\"], model)\n", "\n", "print(\"Wartość funkcji log-wiarygodności dla zbioru testowego = {}\".format(llh))\n", "print(\"Wartość pochodnej funkcji log-wiarygodności dla zbioru testowego = {}\".format(llh_derivative))" ] }, { "cell_type": "markdown", "metadata": { "id": "cxsFdI1sF6Sv" }, "source": [ "## Optymalizacja \n", "\n", "Funkcje optymalizujące zaczerpniemy z modułu scipy.optimize: ```scipy.optimize.fmin_bfgs```. Ponieważ funkcje te są zaimplementowane do mnimalizowania to zamiast maksymalizować funkcję low-wiarygodności będziemy minimalizować tą funkcje przemnożoną przez -1 czyli ```f=negative_log_likelihood``` oraz ```fprime=negative_log_likelihood_derivative```\n", "\n", "\n", "* proszę wywołać funckję ```scipy.optimize.fmin_bfgs``` z obpowiednimi argumentami.\n", "* proszę porównać liczbę wywołań i czas wykonywania komórki z i bez podania explicite postaci pochodnej\n", "(https://ipython.readthedocs.io/en/stable/interactive/magics.html?highlight=%25time#cell-magics)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1 1 2]\n", "Optimization terminated successfully.\n", " Current function value: 20.349770\n", " Iterations: 21\n", " Function evaluations: 160\n", " Gradient evaluations: 40\n", "Optymalne wartości parametrów theta: [-25.16124413 0.20623099 0.20147087]\n", "Wartość funkcji log-wiarygodności dla optymalnych parametrów: -20.34977015906372\n", "CPU times: user 225 ms, sys: 13.8 ms, total: 239 ms\n", "Wall time: 244 ms\n" ] } ], "source": [ "%%time \n", "# ^ rozpoczecie mierzenia czasu dzieje sie tu\n", "\n", "\n", "model = logistic_func\n", "print(theta)\n", "# znajdz optymalne parametry theta\n", "theta_opt = so.fmin_bfgs(f=negative_log_likelihood, x0=theta0, \n", " #fprime=negative_log_likelihood_derivative, \n", " args=(df[[\"matematyka\",\"biologia\"]], df[\"wynik\"], model), disp= True)\n", "# policz log-wiarygosnosc z optymalnymi parametrami\n", "llh = log_likelihood(theta_opt, df[[\"matematyka\",\"biologia\"]], df[\"wynik\"], model)\n", "\n", "print('Optymalne wartości parametrów theta: {}'.format(theta_opt))\n", "print(\"Wartość funkcji log-wiarygodności dla optymalnych parametrów: {}\".format(llh))" ] }, { "cell_type": "markdown", "metadata": { "id": "UtH3eaZOF6S4" }, "source": [ "## Wyniki\n", "Wyniki regresji logistycznej możemy odbierać na dwa sposoby:\n", "* obliczyć wartość hipotezy dla badanego wejścia i dopasowanych parametrów: miara ta ma interpretację prawdopodobieństwa przynależności wejścia do klasy 1,\n", "* dopisać funkcję wykonującą klasyfikację, tzn. porównanie wartości hipotezy z 1/2: \n", " * dla wartości hipotezy > 1/2 klasyfikacja zwraca 1, \n", " * w przeciwnym razie 0.\n", " \n", " \n", "Proszę napisać funkcję ```classification(theta, x)``` która:\n", "* jako argument przyjmuje wektora parametrów modelu $\\theta$, tablicę danych wejściowych $x$, oraz $model$\n", "* zwraca listę klasyfikacyjną: $1$ gdy $model(x)>0.5$, a $0$ w przeciwnym przypadku" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "def classification(theta, x, model):\n", " model_result = model(theta, x)\n", " return model_result>0.5" ] }, { "cell_type": "markdown", "metadata": { "id": "rUmEhM5WF6S8" }, "source": [ "## Przewidywanie \n", "\n", "Proszę:\n", "\n", "* korzystając z modelu ```logistic_func``` wraz z parametrami zwróconymi przez procedurę optymalizacyjną obliczyć prawdopobobieństwo zdania\n", " osoby, która uzyskała 20 pkt. z matematyki, oraz 80 z biologii.\n", "* korzystając z funckji \"classification\" wyznaczyć czy osoba należy do klasy $0$ czy $1$." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Osoba z 20 pkt z matematyki, oraz 80 pkt. z biologii ma 0.725% szans na przyjęcie na studia.\n", "Osoba zalicza się do klasy: [0]\n" ] } ], "source": [ "# stworz dane odpowiadajace naszej osobie\n", "x = np.array([[20, 80]])\n", "# policz prawdopodobienstwo zdania\n", "p = model(theta_opt, x)\n", "\n", "print(\"Osoba z {} pkt z matematyki, oraz {} pkt. z biologii ma {}% szans na przyjęcie na studia.\".format(x[0,0], x[0,1], round(p[0]*100,3)))\n", "\n", "# sklasyfikuj osobę\n", "class_number = classification(theta_opt, x, model).astype(int)\n", "print(\"Osoba zalicza się do klasy: {}\".format(class_number))" ] }, { "cell_type": "markdown", "metadata": { "id": "YtZFghLDF6TE" }, "source": [ "Narysujmy uzyskany podział. Na tle punktów pokolorowanych zgodnie z przynależnością do klas dorysujemy prostą rozgraniczającą obszary \"1\" od \"0\". Ma ona równanie \n", "\n", "$\\qquad$ $h_\\theta(x)=1/2$, \n", "\n", "tzn:\n", "\n", "$\\qquad$ $\\theta x^T = 0$\n", "\n", "czyli \n", "\n", "$\\theta_0 +\\theta_1 x_1 + \\theta_2 x_2 =0 $\n", "\n", "Przekształcając to do równania prostej we współrzędnych $(x_1,x_2)$ mamy:\n", "\n", "$- \\theta_2 x_2 = \\theta_0 +\\theta_1 x_1 $\n", "\n", "$ x_2 = - \\frac{1}{\\theta_2}( \\theta_0 +\\theta_1 x_1 )$" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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etCpUyc6d+5MVlYWQ4cOJSkpiVatWvHJJ0aFkXPnztG3b1/i4uK4++67adu27ZU2IiMj+fOf/0zLli1ZtWoVH330EUlJScTHx/Pggw9y+fLlAmUHGDt2LHFxcbRo0YJ+/fpdkenhhx8G4MCBA3Tq1IkWLVrQuXNnDh06BMDgwYN59NFHSU5O5rrrrrtyrfJy4MABGjduzODBg7nhhhsYMGAA33zzDR06dKBhw4asXWskoThx4gQ9e/akRYsWtGvXji1btgCQkZHBrbfeStOmTXnggQd+N4m7oHPUXKVOpXLMG9me66tG8sAHqSzcYJOibR7C50bP8/L8p9vZ8etptx4zrmYUz/6xqUvbLly4kE2bNrF582aOHz9OYmIiHTt25Mcff+TAgQPs2LGDtLQ0mjRpwtChQ3+376ZNmzhy5Ajbtm0D4NSpU1SoUIF33nmHN954g4SE3ydgSU9PZ/jw4Sxfvpz69etz4kTBXaUNGzawZcsWKlWqxNNPP02nTp2YMmUKp06dIikpiS5dujBu3DgqVqzIjh072LZtG/Hx8Vf2z8rKom3btvz73/9m586dvPrqq/z4448EBwczevRoZsyYQdOmTa+RHeCVV15h//79hIaGXlmXl0ceeYSUlBRSUlKYMmUKjz76KIsWLQLg6NGjrFixgl27dtGjRw969+59zf579+5l3rx5TJkyhcTERGbOnMmKFStYvHgx//rXv1i0aBHPPvssrVq1YtGiRXz77bcMGjSITZs28fzzz3PjjTfyj3/8g88++4zJk41qKzt37mTOnDnXnOOgQYOK/f39iSqRocwa3o4HP1zPE3M3cyIrmwduus5qsTyCtjQ9yIoVK+jfvz+BgYFUq1aNP/zhD6xbt44VK1bQp08fAgICqF69Orfccss1+1533XXs27ePRx55hC+++IKoqKgi21q9ejUdO3a8MtWlUqVKBW7XtWvXK9999dVXvPLKK8THx3PzzTdz4cIFDh06xIoVK65Ygs2aNaNFixZX9g8MDKRXr14ALF26lPXr15OYmEh8fDxLly5l3759hcreokULBgwYwEcffURQ0LXP61WrVnHfffcBcP/997NixYor3/Xs2ZOAgADi4uI4duxYgedWv359mjdvTkBAAE2bNqVz586ICM2bN+eAI9P3ihUruP/++wHo1KkTGRkZnD59muXLlzNw4EAAunXrRsWKFYs8R821lA8LZuqQRO5sXp0XP9vJK5/v8smwS5+2NF21CO1IxYoV2bx5M19++SXjx49n7ty5TJkypczHjYiIuPJZKcWCBQto1KiRy/uHhYURGBh4Zf+UlBRefvnla7YrSPbPPvuM5cuX8+mnn/LSSy+xdetWl9sNDb06F7CwP2LebQICAq4sBwQElNqHW9Q5aq4lNCiQt/u3pmK5bYz//mdOZF3kX3c3JyjQd+wz3zkTG3LTTTcxZ84cLl++THp6OsuXLycpKYkOHTqwYMECcnNzOXbsGN999901+x4/fpzc3Fx69erFiy++yIYNGwAoX748Z85cO72jXbt2LF++nP379wMU2j3Py2233cbbb799RQlt3LgRgA4dOjB37lwAduzYUahy69y5M/PnzyctLe1KmwcPHixQ9tzcXH755RduueUWXn31VTIzMzl79uzvjpecnMzs2bMBmDFjBjfddFOx51BSbrrpJmbMmAHAd999R5UqVYiKiqJjx47MnDkTgM8//5yTJ08WeY6awgkMEF7s2YzHOjdkbuphRn60gQs5vuMH9mlL02ruvvtuVq1aRcuWLRERXnvtNapXr06vXr1YunQpcXFx1KlTh9atWxMd/fsM2UeOHGHIkCHk5hqlVZ2WzuDBgxk5ciTh4eGsWrXqyvYxMTFMnDiRe+65h9zcXKpWrcrXX39dpHzPPPMMjz/+OC1atCA3N5f69euzZMkSRo8eTUpKCnFxcTRu3JimTZteIx9AXFwcL774Irfeeiu5ubkEBwfz7rvvEh4efo3sly9fZuDAgWRmZqKU4tFHH6VChQq/O97bb7/NkCFDeP3114mJiWHq1KklvubF8dxzzzF06FBatGhBuXLlmD59OgDPPvss/fv3p2nTpiQnJ1O3bt0iz7FevXpul82XEBH+1PUGKkeG8Ozi7QyavJb3UxKIDvf+Obs+V+5i586dNGnSxCKJXOfs2bNERkaSkZFBUlISP/74I9WrV7daLMCYSpSTk0NYWBg///wzXbp0Yffu3YTkrwqoKRCX7kGTyzdYyaebf+WJuZtoEBPJB0OTqGpW0bYyUFS5C9MtTREJA5YDoY725yulnhWR+sBsoDKwHrhfKZVttnxm0b17d06dOkV2djbPPPOMbRQmGFOObrnlFnJyclBK8d5772mF6U6cdeBDQiA72+frwP+x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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "df_passed = df[df[\"wynik\"]==1]\n", "df_failed = df[df[\"wynik\"]==0]\n", "\n", "fig, axes = plt.subplots(1,1, figsize=(5,5))\n", "# narysuj tych co zdali na niebiesko, pamietaj o argumencie \"label\" dla czytelnosci\n", "df_passed.plot(x=\"matematyka\",y=\"biologia\", ax=axes, kind=\"scatter\", label=\"passed\", c=\"blue\")\n", "# narysuj tych co nie zdali na czerwono, pamietaj o argumencie \"label\" dla czytelnosci\n", "df_failed.plot(x=\"matematyka\",y=\"biologia\", ax=axes, kind=\"scatter\", label=\"failed\", c =\"red\");\n", "\n", "# znajdz prostą\n", "x = np.array([df[\"matematyka\"].min(),df[\"matematyka\"].max()])\n", "y = -(theta_opt[0] + theta_opt[1]*x)/theta_opt[2]\n", "\n", "# rysowanie prostej i legendy\n", "axes.plot(x,y, label=\"logistic regression model\")\n", "axes.legend();" ] }, { "cell_type": "markdown", "metadata": { "id": "U8EZX9WNF6TH" }, "source": [ "## Część II: Walidacja - to na ćwiczenia w przyszłym tygodniu\n", "Teoria do tej części znajduje się tu:\n", "\n", "https://brain.fuw.edu.pl/edu/index.php/Uczenie_maszynowe_i_sztuczne_sieci_neuronowe/Wykład_Ocena_jakości_klasyfikacji" ] }, { "cell_type": "markdown", "metadata": { "id": "qzYhR3-IF6TI" }, "source": [ "### Zastosowanie w naszym przykładzie\n", "Dodamy teraz kross-walidację typu $leave-one-out$.\n", "Po kolei odłożymy po jednym przykładzie ze zbioru uczącego i na takim zredukownaym zbiorze nauczymy regresję, a następnie sprawdzimy \n", "działanie modelu na odłożonym przykładzie:\n", "\n", "
    \n", "
  1. ze zbioru uczącego odrzucamy jeden przykład
  2. \n", "
  3. na pozostałych przykładach \"trenujemy model\", czyli znajdujemy parametry $\\theta$
  4. \n", "
  5. sprawdzamy działanie modelu na odrzuconym wcześniej przykładzie
  6. \n", "
  7. procedurę powtarzamy dla wszystkich przykładów w zbiorze uczącym
  8. \n", "
\n", "\n", "Proszę napisać funckję ```leave_one_out_CV(df, theta, model)```\n", "\n", "która:\n", "* przyjmuje zestaw uczący w postaci obiektu DataFrame, początkowych parametrów $\\theta$, oraz model $model$\n", "* wykonuje operację \"leave-one-out\" i tworzy listę wyników modelu dla każdego przykładu:\n", "\n", "```\n", "passed = np.append(passed, classification(theta_opt, df_left_out[[\"matematyka\",\"biologia\"]], model))\n", "```\n", "\n", "* dodaje do obiektu DataFrame kolumnę z wynikami modelu:\n", "\n", "```\n", "df[\"model\"] = passed \n", "``` " ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " matematyka biologia wynik model\n", "0 34.623660 78.024693 0 0.0\n", "1 30.286711 43.894998 0 0.0\n", "2 35.847409 72.902198 0 0.0\n", "3 60.182599 86.308552 1 1.0\n", "4 79.032736 75.344376 1 1.0\n", ".. ... ... ... ...\n", "95 83.489163 48.380286 1 1.0\n", "96 42.261701 87.103851 1 1.0\n", "97 99.315009 68.775409 1 1.0\n", "98 55.340018 64.931938 1 0.0\n", "99 74.775893 89.529813 1 1.0\n", "\n", "[100 rows x 4 columns]\n", "CPU times: user 3.67 s, sys: 12.2 ms, total: 3.68 s\n", "Wall time: 3.68 s\n" ] } ], "source": [ "%%time \n", "\n", "def leave_one_out_CV(df, theta0, model):\n", " # tutaj bedziemy wpisywac wyniki modelu\n", " passed = np.array([])\n", " # tworzymy kopie data frame\n", " df_with_model = df.copy()\n", " \n", " # pętla po wszystkich przykładach\n", " for leave_out_index in df.index:\n", " # 1. stworz dataframe bez jednego przykladu\n", " df_filtered = df[df.index!=leave_out_index]\n", " # 2. znajdz optymalne parametry theta\n", " theta_opt = so.fmin_bfgs(f=negative_log_likelihood, x0=theta0, \n", " fprime=negative_log_likelihood_derivative, \n", " args=(df_filtered[[\"matematyka\",\"biologia\"]], df_filtered[\"wynik\"], model), disp=False)\n", " # 3. stworz dataframe z odrzuconego (pojedynczego) przykladu\n", " df_left_out = df[df.index==leave_out_index]\n", " # 4. dodajemy wynik modelu do poprzednich\n", " passed = np.append(passed, classification(theta_opt, df_left_out[[\"matematyka\",\"biologia\"]], model))\n", " # Dodajemy wyniki modelu do calego data frame\n", " df_with_model[\"model\"] = passed\n", " # zwracamy data frame powiekszony o kolumne z wynikami modelu\n", " return df_with_model\n", " \n", "theta0 = np.array([0,0,0])\n", "model = logistic_func \n", "df_with_model = leave_one_out_CV(df, theta0, model)\n", "print(df_with_model)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Zdefiniujmy następujące przypadki gdy nasz model się myli lub podaje poprawny wynik:\n", "\n", "* \"True Positive\" (TP): stan faktyczny jest pozytywny (y=1) i klasyfikator się nie myli (wynik = 1)\n", "* \"True Negative\" (TN): stan faktyczny jest negatywny (y=0) i klasyfikator się nie myli (wynik = 0) \n", "* \"False Positive\" (FP): wynik fałszywie pozytywny (fałszywy alarm): stan faktyczny jest negatywny (y=0) ale klasyfikator się myli (wynik = 1)\n", "* \"False Netative\" (FN): przegapiony alarm: stan faktyczny jest pozytywny (y=1) i klasyfikator się myli (wynik = 0)\n", "\n", "Proszę napisać kod, który oblicza TP, TN, FP, FN. Dla naszego zbioru uczącego powinniśmy uzyskać:\n", "```\n", "TP: 55\n", "FP: 6\n", "TN: 34\n", "FN: 5\n", "``` \n", "\n", "**Wskazówka:** proszę zliczać liczbę wierszy w odpowiednio przefiltrowanym obiekcie DataFrame" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "TP = 55\n", "FP = 6\n", "TN = 34\n", "FN = 5\n" ] } ], "source": [ "# podpowiedz: uzyj warunkow logicznych aby wybrac odpowiednie dane i pola shape aby dostac liczbe wierszy\n", "tp = df_with_model[(df_with_model[\"model\"]>0.5)&(df_with_model[\"wynik\"]==1)].shape[0]\n", "fp = df_with_model[(df_with_model[\"model\"]>0.5)&(df_with_model[\"wynik\"]==0)].shape[0]\n", "tn = df_with_model[(df_with_model[\"model\"]<0.5)&(df_with_model[\"wynik\"]==0)].shape[0]\n", "fn = df_with_model[(df_with_model[\"model\"]<0.5)&(df_with_model[\"wynik\"]==1)].shape[0]\n", "\n", "print(\"TP = {}\\nFP = {}\\nTN = {}\\nFN = {}\".format(tp, fp, tn, fn))" ] }, { "cell_type": "markdown", "metadata": { "id": "0UNsb51DF6TQ" }, "source": [ "## Krzywa ROC\n", "\n", "Aby wykreślić krzywą ROC należy przeprowadzić klasyfikację dla wielu możliwych wartości progu dla hipotezy, powyżej którego uznajemy przypadek za należący do klasy 1. W tym celu należy zmodyfikować funckję ```leave_one_out_CV(df, theta0, model)``` tak by zapisywała prawdopodobieństwo, a nie wynik działania funkcji ```classification```\n", "\n", "Proszę napisać funkcję ```leave_one_out_CV_with_prob(df, theta0, model)``` \n", "* która zapisuje kolumnę z prawdopodobieństwem zamiast wynikiem klasyfikacji" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " matematyka biologia wynik model_prob\n", "0 34.623660 78.024693 0 0.096879\n", "1 30.286711 43.894998 0 0.000042\n", "2 35.847409 72.902198 0 0.045566\n", "3 60.182599 86.308552 1 0.990292\n", "4 79.032736 75.344376 1 0.998192\n", ".. ... ... ... ...\n", "95 83.489163 48.380286 1 0.850268\n", "96 42.261701 87.103851 1 0.721421\n", "97 99.315009 68.775409 1 0.999897\n", "98 55.340018 64.931938 1 0.306822\n", "99 74.775893 89.529813 1 0.999751\n", "\n", "[100 rows x 4 columns]\n", "CPU times: user 3.62 s, sys: 15.4 ms, total: 3.64 s\n", "Wall time: 3.65 s\n" ] } ], "source": [ "%%time \n", "\n", "def leave_one_out_CV_with_prob(df, theta0, model):\n", " # tutaj bedziemy wpisywac wyniki modelu (prawdopodobienstwa)\n", " prob = np.array([])\n", " # robimy kopie oryginalnych danych do ktorych dodamy kolumne\n", " df_with_model = df.copy()\n", " # petla po wszystkich przykladach\n", " for leave_out_index in df.index:\n", " # 1. stworz dataframe bez jednego przykladu\n", " df_filtered = df[df.index!=leave_out_index]\n", " # 2. znajdz optymalne parametry theta\n", " theta_opt = so.fmin_bfgs(f=negative_log_likelihood, x0=theta0, \n", " fprime=negative_log_likelihood_derivative, \n", " args=(df_filtered[[\"matematyka\",\"biologia\"]], df_filtered[\"wynik\"], model), disp=False)\n", " # 3. stworz dataframe z odrzuconego (pojedynczego) przykladu\n", " df_left_out = df[df.index==leave_out_index]\n", " # 4. dodajemy wynik modelu do poprzednich\n", " prob = np.append(prob, model(theta_opt, df_left_out[[\"matematyka\",\"biologia\"]]))\n", " # Dodajemy wyniki modelu (prawdopodobienstwa) do calego data frame\n", " df_with_model[\"model_prob\"] = prob\n", " # zwracamy data frame powiekszony o kolumne z wynikami modelu (prawdopodobienstwami)\n", " return df_with_model\n", " \n", "theta0 = np.array([0,0,0])\n", "model = logistic_func \n", "df_with_prob = leave_one_out_CV_with_prob(df, theta0, model)\n", "print(df_with_prob)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Korzystając z biblioteki ```sklearn``` proszę narysować krzywą ROC oraz obliczyć pole pod nią (\"area unde ROC, AUC) dla naszego modelu.\n", "\n", "**Wskazówka:** wpisać w Google hasło \"scikit learn Receiver Operating Characteristic\"" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from sklearn.metrics import roc_curve, auc\n", "from sklearn.metrics import roc_auc_score\n", "\n", "fpr, tpr, thresholds = roc_curve(df_with_prob[\"wynik\"], df_with_prob[\"model_prob\"])\n", "roc_auc = auc(fpr, tpr)\n", "\n", "plt.figure()\n", "lw = 2\n", "plt.plot(fpr, tpr, color='darkorange',lw=lw, label='ROC curve (area = %0.2f)' % roc_auc)\n", "# narysujmy krzywą (diagonala) dla rzutu monetą (naiwny klasyfikator, najgorsze rozwiązanie)\n", "plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')\n", "plt.xlim([0.0, 1.0])\n", "plt.ylim([0.0, 1.05])\n", "plt.xlabel('False Positive Rate')\n", "plt.ylabel('True Positive Rate')\n", "plt.title('Receiver operating characteristic for logistic regression')\n", "plt.legend(loc=\"lower right\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Modyfikacja modelu\n", "\n", "Proszę wykonać trening regresji logistycznej dla modelu, który używa wyniku tylko z jednego egzaminu i narysować na jednym rysunku krzywe ROC dla trzech wariantów:\n", "* modelu używającego wyników z obu przedmiotów\n", "* modelu używającego tylko wyników z matematyki\n", "* modelu używającego tylko wyników z biologii\n", "\n", "**Wskazówka**: należy przerobić funkcję ```leave_one_out_CV_with_prob``` tak by wykonywała obliczenia dla wszystkich trzech wariantów" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " matematyka biologia wynik model_prob model_prob_matematyka \\\n", "0 34.623660 78.024693 0 0.096879 0.132115 \n", "1 30.286711 43.894998 0 0.000042 0.096571 \n", "2 35.847409 72.902198 0 0.045566 0.143957 \n", "3 60.182599 86.308552 1 0.990292 0.530217 \n", "4 79.032736 75.344376 1 0.998192 0.839340 \n", ".. ... ... ... ... ... \n", "95 83.489163 48.380286 1 0.850268 0.882310 \n", "96 42.261701 87.103851 1 0.721421 0.191751 \n", "97 99.315009 68.775409 1 0.999897 0.964477 \n", "98 55.340018 64.931938 1 0.306822 0.429564 \n", "99 74.775893 89.529813 1 0.999751 0.787323 \n", "\n", " model_prob_biologia \n", "0 0.816447 \n", "1 0.276754 \n", "2 0.750268 \n", "3 0.875439 \n", "4 0.765500 \n", ".. ... \n", "95 0.320625 \n", "96 0.881395 \n", "97 0.673462 \n", "98 0.611549 \n", "99 0.898072 \n", "\n", "[100 rows x 6 columns]\n", "CPU times: user 7.2 s, sys: 16.3 ms, total: 7.22 s\n", "Wall time: 7.22 s\n" ] } ], "source": [ "%%time\n", "\n", "def leave_one_out_CV_many_models(df, theta0, model):\n", " # tu zapisujemy wszystkie prawdopodobienstwa\n", " prob = np.array([])\n", " # tu tylko dla matematyki\n", " prob_math = np.array([])\n", " # tu tylko dla biologii\n", " prob_biol = np.array([])\n", " # tu robimy kopie\n", " df_with_model = df.copy()\n", " \n", " for leave_out_index in df.index:\n", " # robimy podobnie jak poprzednio, ale tym razem 3 razy: dla obu dziedzin, tylko dla majcy, tylko dla biologii\n", " df_filtered = df[df.index!=leave_out_index]\n", " df_left_out = df[df.index==leave_out_index]\n", " ###########\n", " theta_opt = so.fmin_bfgs(f=negative_log_likelihood, x0=theta0, \n", " fprime=negative_log_likelihood_derivative, \n", " args=(df_filtered[[\"matematyka\",\"biologia\"]], df_filtered[\"wynik\"], model), disp=False)\n", " prob = np.append(prob, model(theta_opt, df_left_out[[\"matematyka\",\"biologia\"]]))\n", " ##########\n", " theta_opt = so.fmin_bfgs(f=negative_log_likelihood, x0=theta0[0:2], \n", " fprime=negative_log_likelihood_derivative, \n", " args=(df_filtered[\"matematyka\"], df_filtered[\"wynik\"], model), disp=False)\n", " prob_math = np.append(prob_math, model(theta_opt, df_left_out[[\"matematyka\"]]))\n", " #########\n", " theta_opt = so.fmin_bfgs(f=negative_log_likelihood, x0=theta0[0:2], \n", " fprime=negative_log_likelihood_derivative, \n", " args=(df_filtered[\"biologia\"], df_filtered[\"wynik\"], model), disp=False)\n", " prob_biol = np.append(prob_biol, model(theta_opt, df_left_out[[\"biologia\"]]))\n", " ##########\n", " # dodajemy kolumny do data frame i zwracamy\n", " df_with_model[\"model_prob\"] = prob\n", " df_with_model[\"model_prob_matematyka\"] = prob_math\n", " df_with_model[\"model_prob_biologia\"] = prob_biol\n", " return df_with_model\n", " \n", "theta0 = np.array([0,0,0])\n", "model = logistic_func \n", "df_with_prob = leave_one_out_CV_many_models(df, theta0, model)\n", "print(df_with_prob)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "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ONNPnDjBsGHDWL16NSEhIQQHB7NkyZI482zdupU5c+awadMmNm7cyKxZs9i+fTvBwcF8++237Nixg+XLlzu6mYhvwIABBAcHs3v3bq5du8aPP/54yzzr16+nVq1ajuedO3cmODiYHTt2ULFiRWbPnu2YFhoayoYNG5g4cSLPPfccH330EVu3bmXChAn069cPgPvvv5+NGzeyfft2HnvsMd57770E90316tUT/Ltw4UKcecPCwsibN68jkRUrVozjx4/fss5HHnmEnDlzUqRIEUqUKMFLL73k6Ioj1pEjR9i+fTv16tVzvFazZk3Wr1+f4P5TaSdTlihcERNjmD17G8OG/cL58xFky+bN6683YejQhp4OLUtJra5Ublfx4sUdfRE9+eSTTJ48mZdeulkSDQ4OplmzZhQqVAiw+lhat24dnTp1cszzxx9/8PDDD5MzZ07AOon//vvvxMTE0LFjR/z9/fH393d0LR7fmjVreO+997h69Srnzp2jcuXKt8x78uTJOF0xJNUl+aOPPoq3tzfh4eFs2LCBRx991DHt+vXrgJVMunbtysmTJ7lx4walS5e+Ja7y5csTEhLiym502ebNm/H29ubEiROcP3+exo0b88ADD3DvvVZnmeHh4XTp0oUPP/wwzh3ihQsX5sSJE6kai7p9WTNRXM5L48Zz2LDhGACtW5dhypR2lC2bP5kFVWYRv4onrfvlioiIoF+/fmzZsoXixYszatSoBLvkzp49e5zXk+qSPDZhxcTEkDdv3gRP9gMHDmTw4MF06NCBtWvXMmrUqFvm2b9/P127dk0w7rVr15I3b17H8wIFCnDhwgVHu0hoaKijx11nn3/+OW3btsXX15fChQvTqFEjtmzZwr333ktkZCRdunShW7dudO7c+Zb9lD27donjaVmz6sn3OgcOhHH33bn48ssurFjRTZNEFnP06FH+/NOqZvz888+5//7740yvW7cuv/32G2fPniU6OpovvviCpk2bxpmncePGLFmyhKtXr3LlyhUWL15M48aNadSoET/88AMRERGEh4cnWKUUe/IvWLAg4eHhfPPNNwnGWbFiRQ4dutkTcWJdkjvLkycPpUuX5uuvvwasdoQdO3YAcbtOnzdvXoLLx5YoEvpzThJgJdjmzZs74p83b16coVVjlShRwnEF05UrV9i4cSMVKlTAGEPPnj2pWLEi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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# analogicznie jak poprzednio, ale tym razem liczymy i plotujemy 3 ROC \n", "fpr, tpr, thresholds = roc_curve(df_with_prob[\"wynik\"], df_with_prob[\"model_prob\"])\n", "fpr_math, tpr_math, thresholds = roc_curve(df_with_prob[\"wynik\"], df_with_prob[\"model_prob_matematyka\"])\n", "fpr_biol, tpr_biol, thresholds = roc_curve(df_with_prob[\"wynik\"], df_with_prob[\"model_prob_biologia\"])\n", "\n", "roc_auc = auc(fpr, tpr)\n", "roc_auc_math = auc(fpr_math, tpr_math)\n", "roc_auc_biol = auc(fpr_biol, tpr_biol)\n", "\n", "plt.figure()\n", "lw = 2\n", "# uzupelnij kod poniżej\n", "plt.plot(fpr, tpr, color='darkorange',lw=lw, label='matematyka+biologia (area = %0.2f)' % roc_auc)\n", "plt.plot(fpr_math, tpr_math, color='darkblue',lw=lw, label='matematyka (area = %0.2f)' % roc_auc_math)\n", "plt.plot(fpr_biol, tpr_biol, color='darkgreen',lw=lw, label='biologia (area = %0.2f)' % roc_auc_math)\n", "#\n", "plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')\n", "plt.xlim([0.0, 1.0])\n", "plt.ylim([0.0, 1.05])\n", "plt.xlabel('False Positive Rate')\n", "plt.ylabel('True Positive Rate')\n", "plt.title('Receiver operating characteristic for logistic regression')\n", "plt.legend(loc=\"lower right\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Zastosowanie do innego rodzaju danych\n", "\n", "Proszę przeprowadzić procedurę treningu i narysować krzywą ROC dla danych gdzie występuje inny podział między klasami:\n" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "nPoints = 100\n", "x = 100*np.random.random_sample(nPoints)\n", "y = 100*np.random.random_sample(nPoints)\n", "\n", "df = pd.DataFrame(data=x, columns=[\"matematyka\"])\n", "df[\"biologia\"] = y\n", "# tworzymy nowe dane\n", "df[\"wynik\"] = np.sqrt((x-50)**2 + (y-50)**2)<25\n", "# narysuj dwuwymiarowy wykres aby zobaczy korelacje\n", "x = sns.jointplot(x=\"matematyka\", y=\"biologia\", data=df, kind='hist', hue=\"wynik\")\n", "x.set_axis_labels('matematyka', 'biologia', fontsize=16);" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " matematyka biologia wynik model_prob\n", "0 45.926269 74.411000 True 0.190826\n", "1 60.088653 51.720146 True 0.182010\n", "2 50.269143 64.609756 True 0.188722\n", "3 5.266773 2.839107 False 0.163356\n", "4 85.158238 63.750033 False 0.209377\n", ".. ... ... ... ...\n", "95 4.371252 18.498147 False 0.170463\n", "96 81.149053 52.954530 False 0.200206\n", "97 75.106507 56.949164 False 0.201112\n", "98 52.531317 67.718316 True 0.190123\n", "99 54.916940 68.649330 True 0.190588\n", "\n", "[100 rows x 4 columns]\n" ] } ], "source": [ "theta0 = np.array([0,0,0])\n", "model = logistic_func\n", "# policz prawdopodobienstwa z modelu przy uzyciu walidacji leave_one_out\n", "df_with_prob = leave_one_out_CV_with_prob(df, theta0, model)\n", "print(df_with_prob)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# narysuj ŁADNY wykres z krzywą ROC i wypisz AUC w legendzie\n", "fpr, tpr, thresholds = roc_curve(df_with_prob[\"wynik\"], df_with_prob[\"model_prob\"])\n", "roc_auc = auc(fpr, tpr)\n", "\n", "plt.figure()\n", "lw = 2\n", "plt.plot(fpr, tpr, color='darkorange',lw=lw, label='ROC curve (area = %0.2f)' % roc_auc)\n", "plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')\n", "plt.xlim([0.0, 1.0])\n", "plt.ylim([0.0, 1.05])\n", "plt.xlabel('False Positive Rate')\n", "plt.ylabel('True Positive Rate')\n", "plt.title('Receiver operating characteristic for logistic regression')\n", "plt.legend(loc=\"lower right\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Co można zrobić by poprawić działanie modelu na takich danych?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Napisz funkcję logistic_func_1(theta, x) która będzie działać podobnie do oryginalnej, ale dodaj w niej do oryginalnych danych 3 kolumny: kolumnę jedynek (tak jak poprzednio), kolumnę x1^2, kolumnę x2^2, gdzie x1 i x2 to wyniki z matematyki i biologii odpowiednio.\n", "\n", "Następnie uzupełnij funkcję leave_one_out_CV_with_prob(df, theta0, model), analogicznie do poprzednich funkcji. Funkcja ma wykonań walidację leave-one-out i zwrocić prawdopodbieństwo uzyskane z modelu." ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " matematyka biologia wynik model_prob\n", "0 45.926269 74.411000 True 1.964148e-07\n", "1 60.088653 51.720146 True 1.000000e+00\n", "2 50.269143 64.609756 True 1.000000e+00\n", "3 5.266773 2.839107 False 1.522998e-08\n", "4 85.158238 63.750033 False 1.522998e-08\n", ".. ... ... ... ...\n", "95 4.371252 18.498147 False 1.522998e-08\n", "96 81.149053 52.954530 False 1.522998e-08\n", "97 75.106507 56.949164 False 9.999978e-01\n", "98 52.531317 67.718316 True 1.000000e+00\n", "99 54.916940 68.649330 True 1.000000e+00\n", "\n", "[100 rows x 4 columns]\n", "CPU times: user 49.5 s, sys: 170 ms, total: 49.7 s\n", "Wall time: 49.7 s\n" ] } ], "source": [ "%%time\n", "\n", "def logistic_func_1(theta, x):\n", " #x = np.reshape(x.to_numpy(), (x.shape[0],-1))\n", " x_expanded = np.column_stack((np.ones(x.shape[0]), x*x, x))\n", "# print(x, (x*x))\n", "# exit()\n", " arg = np.sum(theta*x_expanded, axis=1)\n", " arg = np.where(np.abs(arg)<18, arg, 18*np.sign(arg))\n", " return 1.0/(1+np.exp(-arg))\n", "\n", "def leave_one_out_CV_with_prob(df, theta0, model):\n", " \n", " prob = np.array([])\n", " df_with_model = df.copy()\n", " # napisz petle po przypadkach analoficznie jak poprzednio\n", " for leave_out_index in df.index:\n", " df_filtered = df[df.index!=leave_out_index]\n", " theta_opt = so.fmin_bfgs(f=negative_log_likelihood, x0=theta0, \n", " args=(df_filtered[[\"matematyka\",\"biologia\"]], df_filtered[\"wynik\"], model), disp=False)\n", " df_left_out = df[df.index==leave_out_index]\n", " prob = np.append(prob, model(theta_opt, df_left_out[[\"matematyka\",\"biologia\"]]))\n", " # dodaj prob jako nową kolumnę\n", " df_with_model[\"model_prob\"] = prob\n", " return df_with_model\n", "\n", "theta0 = np.array([0,0,0,0,0])\n", "model = logistic_func_1 \n", "df_with_prob = leave_one_out_CV_with_prob(df, theta0, model)\n", "print(df_with_prob)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# narysuj ładny wykres ROC tak jak poprzednio ale dla nowego modelu\n", "fpr, tpr, thresholds = roc_curve(df_with_prob[\"wynik\"], df_with_prob[\"model_prob\"])\n", "roc_auc = auc(fpr, tpr)\n", "\n", "plt.figure()\n", "lw = 2\n", "plt.plot(fpr, tpr, color='darkorange',lw=lw, label='ROC curve (area = %0.2f)' % roc_auc)\n", "plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')\n", "plt.xlim([0.0, 1.0])\n", "plt.ylim([0.0, 1.05])\n", "plt.xlabel('False Positive Rate')\n", "plt.ylabel('True Positive Rate')\n", "plt.title('Receiver operating characteristic for logistic regression')\n", "plt.legend(loc=\"lower right\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "colab": { "collapsed_sections": [], "name": "02M_Regresja_logistyczna.ipynb", "provenance": [ { "file_id": "1QyygSjtzI9iNile4e8Qlcur7Qn0r_VRN", "timestamp": 1546856483810 } ] }, "interpreter": { "hash": "fcb4468fb47c6127ab44332c3f3439a85914e2850b2efd86c12e06a03080f93f" }, "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" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "4a92c6b51368406ba79cf23ea6c1be11": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "a6e5e2c335854c40857d817fde071239": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "c276665ac3fb4531948d896f79ef1c22": { "model_module": "@jupyter-widgets/controls", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_4a92c6b51368406ba79cf23ea6c1be11", "max": 100, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_a6e5e2c335854c40857d817fde071239", "value": 100 } } } } }, "nbformat": 4, "nbformat_minor": 4 }