Sveučilište u Zagrebu
Fakultet elektrotehnike i računarstva
http://www.fer.unizg.hr/predmet/su
Ak. god. 2015./2016.
(c) 2015 Jan Šnajder
Verzija: 0.2 (2015-11-16)
import scipy as sp
import scipy.stats as stats
import matplotlib.pyplot as plt
import pandas as pd
%pylab inline
Populating the interactive namespace from numpy and matplotlib
Model logističke regresije
Gubitak unakrsne entropije
Minimizacija pogreške
Poveznica s generativnim modelom
Usporedba linearnih modela
Sažetak
$f : \mathbb{R}\to[0,1]$ ili $f : \mathbb{R}\to[-1,+1]$ je aktivacijska funkcija
Linearna granica u ulaznom prostoru (premda je $f$ nelinearna)
Model nelinearan u parametrima (jer je $f$ nelinearna)
[Skica]
Funkcija gubitka: kvadratni gubitak
Optimizacijski postupak: izračun pseudoinverza (rješenje u zatvorenoj formi)
Prednosti:
Nedostatci:
[Skica]
Funkcija gubitka: količina pogrešne klasifikacije
Optimizacijski postupak: gradijentni spust
Prednosti:
Nedostatci:
Ideja: upotrijebiti aktivacijsku funkciju s izlazima $[0,1]$ ali koja jest derivabilna
Logistička (sigmoidalna) funkcija:
def sigm(x): return 1 / (1 + sp.exp(-x))
xs = sp.linspace(-10, 10)
plt.plot(xs, sigm(xs));
plt.plot(xs, sigm(0.5*xs), 'r');
plt.plot(xs, sigm(xs), 'g');
plt.plot(xs, sigm(2*xs), 'b');
Definirali smo model, trebamo još definirati funkciju gubitka i optimizacijski postupak
Logistička funkcija koristi gubitak unakrsne entropije
xs = linspace(0, 1)
plt.plot(xs, -sp.log(xs));
plt.plot(xs, 1 - sp.log(1 - xs));
Ako $y=1$, funkcija kažnjava model to više što je njegov izlaz manji od jedinice. Slično, ako $y=0$, funkcija kažnjava model to više što je njegov izlaz veći od nule
Intutivno se ovakva funkcija čini u redu, ali je pitanje kako smo do nje došli
Funkciju gubitka izvest ćemo iz funkcije pogreške
Budući da logistička regresija daje vjerojatnosti oznaka za svaki primjer, možemo izračunati kolika je vjerojatnost označenog skupa primjera $\mathcal{D}$ pod našim modelom, odnosno kolika je izglednost parametra $\mathbf{w}$ modela
Želimo da ta izglednost bude što veća, pa ćemo funkciju pogreške definirati kao negativnu log-izglednost parametara $\mathbf{w}$:
Želimo maksimizirati log-izglednost, tj. minimizirati ovu pogrešku
Log-izglednost:
$y^{(i)}$ je oznaka $i$-tog primjera koja može biti 0 ili 1 $\Rightarrow$ Bernoullijeva varijabla
Budući da $y^{(i)}$ Bernoullijeva varijabla, njezina distribucija je:
gdje je $\mu$ vjerojatnost da $y^{(i)}=1$
$\Rightarrow$ pogreška unakrsne entropije (engl. cross-entropy error)
$\Rightarrow$ gubitak unakrsne entropije (engl. cross-entropy loss)
def cross_entropy_loss(h_x, y):
return -y * sp.log(h_x) - (1 - y) * sp.log(1 - h_x)
xs = linspace(0, 1)
plt.plot(xs, cross_entropy_loss(xs, 0), label='y=0')
plt.plot(xs, cross_entropy_loss(xs, 1), label='y=1')
plt.ylabel('$L(h(\mathbf{x}),y)$')
plt.xlabel('$h(\mathbf{x}) = \sigma(w^\intercal\mathbf{x}$)')
plt.legend()
plt.show()
Q: Koliki je gubitak na primjeru $\mathbf{x}$ za koji model daje $h(\mathbf{x})=P(y=1|\mathbf{x})=0.7$, ako je stvarna oznaka primjera $y=0$? Koliki je gubitak ako je stvarna oznaka $y=1$?
Gubitaka nema jedino onda kada je primjer savršeno točno klasificiran ($h(x)=1$ za $y=1$ odnosno $h(x)=0$ za $y=0$)
U svim drugim slučajevima postoji gubitak: čak i ako je primjer ispravno klasificiran (na ispravnoj strani granice) postoji malen gubitak, ovisno o pouzdanosti klasifikacije
Ipak, primjeri na ispravnoj strani granice ($h(\mathbf{x})\geq 0.5$ za $y=1$ odnosno $h(\mathbf{x})< 0.5$ za $y=0$) nanose puno manji gubitak od primjera na pogrešnoj strani granice
#TODO: konkretan primjer u ravnini
Ne postoji rješenje u zatvorenoj formi (zbog nelinearnosti funkcije $\sigma$)
Minimiziramo gradijentnim spustom:
$\mathbf{w} \gets (0,0,\dots,0)$
ponavljaj do konvergencije
$\quad \Delta\mathbf{w} \gets (0,0,\dots,0)$
$\quad$ za $i=1,\dots, N$
$\qquad h \gets \sigma(\mathbf{w}^\intercal\tilde{\mathbf{x}}^{(i)})$
$\qquad \Delta \mathbf{w} \gets \Delta\mathbf{w} + (h-y^{(i)})\, \tilde{\mathbf{x}}^{(i)}$
$\quad \mathbf{w} \gets \mathbf{w} - \eta \Delta\mathbf{w} $
$\mathbf{w} \gets (0,0,\dots,0)$
ponavljaj do konvergencije
$\quad$ (slučajno permutiraj primjere u $\mathcal{D}$)
$\quad$ za $i=1,\dots, N$
$\qquad$ $h \gets \sigma(\mathbf{w}^\intercal\tilde{\mathbf{x}}^{(i)})$
$\qquad$ $\mathbf{w} \gets \mathbf{w} - \eta (h-y^{(i)})\tilde{\mathbf{x}}^{(i)}$
#TODO kod + primjer
Regularizacija sprečava (smanjuje mogućnost) prenaučenosti
Trostruki učinak:
[Skica za (1)]
[Skica za (3)]
L2-regularizacija:
gdje $\mathbf{w}(1-\eta\lambda)$ uzrokuje prigušenje težina (engl. weight decay)
$\mathbf{w} \gets (0,0,\dots,0)$
ponavljaj do konvergencije
$\quad \color{red}{\Delta w_0 \gets 0}$
$\quad \Delta\mathbf{w} \gets (0,0,\dots,0)$
$\quad$ za $i=1,\dots, N$
$\qquad h \gets \sigma(\mathbf{w}^\intercal\tilde{\mathbf{x}}^{(i)})$
$\qquad \color{red}{\Delta w_0 \gets \Delta w_0 + h-y^{(i)}}$
$\qquad \Delta\mathbf{w} \gets \Delta\mathbf{w} + (h-y^{(i)})\mathbf{x}^{(i)}$
$\quad \color{red}{w_0 \gets w_0 - \eta \Delta w_0}$
$\quad \mathbf{w} \gets \mathbf{w}(1\color{red}{-\eta\lambda}) - \eta \Delta\mathbf{w}$
$\mathbf{w} \gets (0,0,\dots,0)$
ponavljaj do konvergencije:
$\quad$ (slučajno permutiraj primjere u $\mathcal{D}$)
$\quad$ za $i=1,\dots, N$
$\qquad h \gets \sigma(\mathbf{w}^\intercal\mathbf{x}^{(i)})$
$\qquad \color{red}{w_0 \gets w_0 - \eta (h-y^{(i)})}$
$\qquad \mathbf{w} \gets \mathbf{w}(1\color{red}{-\eta\lambda}) - \eta (h-y^{(i)})\mathbf{x}^{(i)}$
TODO
TODO
Logistička regresija je diskriminativan klasifikacijski model s probabilističkim izlazom
Koristi se logistička funkcija gubitka odnosno pogreška unakrsne entropije
Optimizacija se provodi gradijentnim spustom, a prenaučenost se može spriječiti regularizacijom
Model odgovara generativnom modelu s normalno distribuiranim izglednostima i dijeljenom kovarijacijskom matricom, ali je broj parametara logističke regresije manji
Logistička regresija vrlo je dobar algoritam koji nema nedostatke koje imaju klasifikacija regresijom i perceptron