#!/usr/bin/env python
# coding: utf-8
# Sveučilište u Zagrebu
# Fakultet elektrotehnike i računarstva
#
# # Strojno učenje
#
# http://www.fer.unizg.hr/predmet/su
#
# Ak. god. 2015./2016.
#
# # Bilježnica 5: Regresija
#
# (c) 2015 Jan Šnajder
#
# Verzija: 0.3 (2015-11-09)
# In[1]:
import scipy as sp
import scipy.stats as stats
import matplotlib.pyplot as plt
import pandas as pd
get_ipython().run_line_magic('pylab', 'inline')
# ### Sadržaj:
#
# * Uvod
#
# * Osnovni pojmovi
#
# * Model, funkcija gubitka i optimizacijski postupak
#
# * Postupak najmanjih kvadrata
#
# * Probabilistička interpretacija regresije
#
# * Poopćeni linearan model regresije
#
# * Odabir modela
#
# * Regularizirana regresija
#
# * Sažetak
# # Osnovni pojmovi
#
# * Označen skup podataka: $\mathcal{D}=\{(\mathbf{x}^{(i)},y^{(i)})\},\quad \mathbf{x}\in\mathbb{R}^n,\quad y\in\mathbb{R}$
#
#
# * Hipoteza $h$ aproksimira nepoznatu funkciju $f:\mathbb{R}^n\to\mathbb{R}$
#
#
# * Idealno, $y^{(i)}=f(\mathbf{x}^{(i)})$, ali zbog šuma: $$y^{(i)}=f(\mathbf{x}^{(i)})+\varepsilon$$
#
#
# * $\mathbf{x}$ - **ulazna varijabla** (nezavisna, prediktorska)
#
#
# * $y$ - **izlazna varijabla** (zavisna, kriterijska)
#
#
# ### Vrste regresije
#
# * Broj **ulaznih** (nezavisnih) varijabli:
# * Univarijatna (jednostavna, jednostruka) regresija: $n=1$
# * Multivarijatna (višestruka, multipla) regresija: $n>1$
#
#
# * Broj **izlaznih** (zavisnih) varijabli:
# * Jednoizlazna regresija: $f(\mathbf{x}) = y$
# * Višeizlazna regresija: $f(\mathbf{x})=\mathbf{y}$
#
# # Model, funkcija gubitka i optimizacijski postupak
#
#
# ### (1) Model
#
# * **Linearan model regresije**: $h$ je linearna funkcija parametara
# $\mathbf{w} = (w_0,\dots,w_n)$
#
#
# * Linearna regresija:
# $$h(\mathbf{x}|\mathbf{w}) = w_0 + w_1 x_1 + w_2 x_2 + \dots + w_n x_n$$
#
#
# * Polinomijalna regresija:
# * Univarijatna polinomijalna: $$h(x|\mathbf{w}) = w_0 + w_1 x + w_2 x^2 + \dots + w_d x^d\quad (n=1)$$
# * Multivarijatna polinomijalna: $$h(\mathbf{x}|\mathbf{w}) = w_0 + w_1 x_1 + w_2 x_2 + w_3 x_1 x_2 + w_4 x_1^2 + w_5 x_2^2\quad (n=2, d=2)$$
# * Modelira međuovisnost značajki (*cross-terms* $x_1 x_2, \dots$)
#
#
# * Općenite **bazne funkcije**:
# $$h(\mathbf{x}|\mathbf{w}) = w_0 + w_1\phi_1(\mathbf{x}) + \dots + w_m\phi_m(\mathbf{x})$$
# ### (2) Funkcija gubitka (funkcija pogreške)
#
# * Kvadratni gubitak (engl. *quadratic loss*)
#
# $$
# L(y^{(i)},h(\mathbf{x}^{(i)})) = \big(y^{(i)}-h(\mathbf{x}^{(i)})\big)^2
# $$
#
# * Funkcija pogreške (proporcionalna s empirijskim očekivanjem gubitka):
# $$
# E(h|\mathcal{D})=\frac{1}{2}
# \sum_{i=1}^N\big(y^{(i)}-h(\mathbf{x}^{(i)})\big)^2
# $$
# ### (3) Optimizacijski postupak
#
# * Postupak **najmanjih kvadrata** (engl. *least squares*)
#
# $$
# \mathrm{argmin}_{\mathbf{w}} E(\mathbf{w}|\mathcal{D})
# $$
#
#
# * Rješenje ovog optimizacijskog problema postoji u **zatvorenoj formi**
#
#
# # Postupak najmanjih kvadrata
#
#
# * Razmotrimo najprije linearnu regresiju:
# $$h(\mathbf{x}|\mathbf{w}) = w_0 + w_1 x_1 + w_2 x_2 + \dots + w_n x_n = \sum_{i=1}^n w_i x_i + w_0$$
#
#
# * Izračun je jednostavniji ako pređemo u matrični račun
# * Svaki vektor primjera $\mathbf{x}^{(i)}$ proširujemo *dummy* značajkom $x^{(i)}_0 = 1$, pa je model onda:
#
# $$h(\mathbf{x}|\mathbf{w}) = \mathbf{w}^\intercal \mathbf{x}$$
#
#
# * Skup primjera:
#
# $$
# \mathbf{X} =
# \begin{pmatrix}
# 1 & x^{(1)}_1 & x^{(1)}_2 \dots & x^{(1)}_n\\
# 1 & x^{(2)}_1 & x^{(2)}_2 \dots & x^{(2)}_n\\
# \vdots\\
# 1 & x^{(N)}_1 & x^{(N)}_2 \dots & x^{(N)}_n\\
# \end{pmatrix}_{N\times (n+1)}
# =
# \begin{pmatrix}
# 1 & (\mathbf{x}^{(1)})^\intercal \\
# 1 & (\mathbf{x}^{(2)})^\intercal \\
# \vdots\\
# 1 & (\mathbf{x}^{(N)})^\intercal \\
# 1 & \end{pmatrix}_{N\times (n+1)}
# $$
# * Matricu primjera $\mathbf{X}$ zovemo **dizajn-matrica**
#
#
# * Vektor izlaznih vrijednosti:
# $$
# \mathbf{y} =
# \begin{pmatrix}
# y^{(1)}\\
# y^{(2)}\\
# \vdots\\
# y^{(N)}\\
# \end{pmatrix}_{N\times 1}
# $$
#
# ### Egzaktno rješenje
#
# * Idealno, tražimo egzaktno rješenje, tj. rješenje za koje vrijedi
# $$
# (\mathbf{x}^{(i)}, y^{(i)})\in\mathcal{D}.\ h(\mathbf{x}^{(i)}) = y^{(i)}
# $$
# odnosno
# $$
# (\mathbf{x}^{(i)}, y^{(i)})\in\mathcal{D}.\ \mathbf{w}^\intercal \mathbf{x} = y^{(i)}
# $$
#
#
# * Možemo napisati kao matričnu jednadžbu ($N$ jednadžbi s $(n+1)$ nepoznanica):
#
# $$
# \mathbf{X}\mathbf{w} = \mathbf{y}
# $$
#
# $$
# \begin{pmatrix}
# 1 & x^{(1)}_1 & x^{(1)}_2 \dots & x^{(1)}_n\\
# 1 & x^{(2)}_1 & x^{(2)}_2 \dots & x^{(2)}_n\\
# \vdots\\
# 1 & x^{(N)}_1 & x^{(N)}_2 \dots & x^{(N)}_n\\
# \end{pmatrix}
# \cdot
# \begin{pmatrix}
# w_0\\
# w_1\\
# \vdots\\
# w_n\\
# \end{pmatrix}
# =
# \begin{pmatrix}
# y^{(1)}\\
# y^{(2)}\\
# \vdots\\
# y^{(N)}\\
# \end{pmatrix}
# $$
#
# * Egzaktno rješenje ovog sustava jednadžbi je
#
# $$
# \mathbf{w} = \mathbf{X}^{-1}\mathbf{y}
# $$
#
# Međutim, rješenja nema ili ono nije jedinstveno ako:
#
# * (1) $\mathbf{X}$ nije kvadratna, pa nema inverz. U pravilu:
# * $N>(n+1)$
# $\Rightarrow$ sustav je **preodređen** (engl. *overdetermined*) i nema rješenja
# * $N<(n+1)$
# $\Rightarrow$ sustav je **pododređen** (engl. *underdetermined*) i ima višestruka rješenja
#
# * (2) $\boldsymbol{X}$ jest kvadratna (tj. $N=(n+1)$), ali ipak nema inverz (ovisno o rangu matrice)
$\Rightarrow$ sustav je **nekonzistentan**
#
#
# ### Rješenje najmanjih kvadrata
#
#
# * Približno rješenje sustava $\mathbf{X}\mathbf{w}=\mathbf{y}$
#
#
# * Funkcija pogreške:
# $$
# E(\mathbf{w}|\mathcal{D})=\frac{1}{2}
# \sum_{i=1}^N\big(\mathbf{w}^\intercal\mathbf{x}^{(i)} - y^{(i)}\big)^2
# $$
#
#
# * Matrični oblik:
# \begin{align*}
# E(\mathbf{w}|\mathcal{D})
# =&
# \frac{1}{2} (\mathbf{X}\mathbf{w} - \mathbf{y})^\intercal (\mathbf{X}\mathbf{w} - \mathbf{y})\\
# =&
# \frac{1}{2}
# (\mathbf{w}^\intercal\mathbf{X}^\intercal\mathbf{X}\mathbf{w} - \mathbf{w}^\intercal\mathbf{X}^\intercal\mathbf{y} - \mathbf{y}^\intercal\mathbf{X}\mathbf{w} + \mathbf{y}^\intercal\mathbf{y})\\
# =&
# \frac{1}{2}
# (\mathbf{w}^\intercal\mathbf{X}^\intercal\mathbf{X}\mathbf{w} - 2\mathbf{y}^\intercal\mathbf{X}\mathbf{w} + \mathbf{y}^\intercal\mathbf{y})
# \end{align*}
#
# > Jednakosti linearne algebre:
# > * $(A^\intercal)^\intercal = A$
# > * $(AB)^\intercal = B^\intercal A^\intercal$
#
# * Minimizacija pogreške:
# $$
# \begin{align*}
# \nabla_{\mathbf{w}}E &=
# \frac{1}{2}\Big(\mathbf{w}^\intercal\big(\mathbf{X}^\intercal\mathbf{X}+(\mathbf{X}^\intercal\mathbf{X})^\intercal\big) -
# 2\mathbf{y}^\intercal\mathbf{X}\Big) =
# \mathbf{X}^\intercal\mathbf{X}\mathbf{w} - \mathbf{X}^\intercal\mathbf{y} = \mathbf{0}
# \end{align*}
# $$
#
#
# > Jednakosti linearne algebre:
# > * $\frac{\mathrm{d}}{\mathrm{d}x}x^\intercal A x=x^\intercal(A+A^\intercal)$
# > * $\frac{\mathrm{d}}{\mathrm{d}x}A x=A$
#
#
# * Dobivamo sustav tzv. **normalnih jednadžbi**:
# $$
# \mathbf{X}^\intercal\mathbf{X}\mathbf{w} = \mathbf{X}^\intercal\mathbf{y}
# $$
#
#
# * Rješenje:
# $$
# \mathbf{w} = (\mathbf{X}^\intercal\mathbf{X})^{-1}\mathbf{X}^\intercal\mathbf{y} = \color{red}{\mathbf{X}^{+}}\mathbf{y}
# $$
#
#
# * Matrica $\mathbf{X}^{+}=(\mathbf{X}^\intercal\mathbf{X})^{-1}\mathbf{X}^\intercal$ je **pseudoinverz** (Moore-Penroseov inverz) matrice $\mathbf{X}$
#
#
# * **Q:** Kojih je dimenzija matrica $(\mathbf{X}^\intercal\mathbf{X})^{-1}$?
# * **Q:** Što utječe na složenost izračuna inverza matrice: broj primjera $N$ ili broj dimenzija $n$?
# # Probabilistička interpretacija regresije
# * Ograničimo se BSO na univarijatnu ($n=1$) linearnu regresiju:
#
# $$
# h(x|w_0, w_1) = w_0 + w_1 x
# $$
#
#
# * Zbog šuma u $\mathcal{D}$:
# $$
# y^{(i)} = f(x^{(i)}) + \color{red}{\varepsilon}
# $$
#
# * Prepostavka:
# $$
# \color{red}{\varepsilon}\ \sim\ \mathcal{N}(0, \sigma^2)
# $$
#
# * Posjedično:
# $$
# \color{red}{y|x}\ \sim\ \mathcal{N}\big(f(x), \sigma^2\big)
# $$
# odnosno
# $$
# \color{red}{p(y|x)} = \mathcal{N}\big(f(x), \sigma^2\big)
# $$
#
# * Vrijedi
# $$\mathbb{E}[y|x] = \mu = f(x)$$
#
#
# * Naš cilj je: $h(x|\mathbf{w}) = f(x)$
#
#
# * [Skica]
#
#
# * $p(y^{(i)}|x^{(i)})$ je vjerojatnost da je $f(x^{(i)})$ generirala vrijednost $y^{(i)}$
# * (Formulacija nije baš točna, jer je $x$ kontinuirana varijabla a $p$ je gustoća vjerojatnosti.)
#
# ### Log-izglednost
#
# $$
# \begin{align*}
# \ln\mathcal{L}(\mathbf{w}|\mathcal{D})
# &=
# \ln p(\mathcal{D}|\mathbf{w}) =
# \ln\prod_{i=1}^N p(x^{(i)}, y^{(i)}) =
# \ln\prod_{i=1}^N p(y^{(i)}|x^{(i)}) p(x^{(i)}) \\
# &=
# \ln\prod_{i=1}^N p(y^{(i)}|x^{(i)}) + \underbrace{\color{gray}{\ln\prod_{i=1}^N p(x^{(i)})}}_{\text{Ne ovisi o $\mathbf{w}$}} \\
# & \Rightarrow \ln\prod_{i=1}^N p(y^{(i)}|x^{(i)}) =
# \ln\prod_{i=1}^N\mathcal{N}\big(h(x^{(i)}|\mathbf{w}),\sigma^2\big)\\ &=
# \ln\prod_{i=1}^N\frac{1}{\sqrt{2\pi}\sigma}\exp\Big\{-\frac{\big(y^{(i)}-h(x^{(i)}|\mathbf{w})\big)^2}{2\sigma^2}\Big\}\\
# &=
# \underbrace{\color{gray}{-N\ln(\sqrt{2\pi}\sigma)}}_{\text{konst.}} -
# \frac{1}{2\color{gray}{\sigma^2}}\sum_{i=1}^N\big(y^{(i)}-h(x^{(i)}|\mathbf{w})\big)^2\\
# & \Rightarrow
# -\frac{1}{2}\sum_{i=1}^N\big(y^{(i)}-h(x^{(i)}|\mathbf{w})\big)^2
# \end{align*}
# $$
#
#
# * Uz pretpostavku Gaussovog šuma, **maksimizacija izglednosti** odgovara **minimizaciji funkcije pogreške** definirane kao **zbroj kvadratnih odstupanja**:
#
# $$
# \begin{align*}
# \mathrm{argmax}_{\mathbf{w}} \ln\mathcal{L}(\mathbf{w}|\mathcal{D}) &= \mathrm{argmin}_{\mathbf{w}} E(\mathbf{w}|\mathcal{D})\\
# E(h|\mathcal{D}) &=\frac{1}{2} \sum_{i=1}^N\big(y^{(i)}-h(x^{(i)}|\mathbf{w})\big)^2\\
# L\big(y,h(x|\mathbf{w})\big)\ &\propto\ \big(y - h(x|\mathbf{w})\big)^2
# \end{align*}
# $$
#
#
# * $\Rightarrow$ Probabilističko opravdanje za kvadratnu funkciju gubitka
#
#
# * Rješenje MLE jednako je rješenju koje daje postupak najmanjih kvadrata!
#
#
# # Poopćeni linearan model regresije
# * Zanima nas poopćenje na $n>1$ koje obuhvaća sve multivarijatne linearne modele regresije: univarijatna regresija, linearna regresija, polinomijalna regresija, ...
# * $h(\mathbf{x}|\mathbf{w}) = w_0 + w_1 x_1 + w_2 x_2 + \dots + w_n x_n$
# * $h(x|\mathbf{w}) = w_0 + w_1 x + w_2 x^2 + \dots + w_d x^d$
# * $h(\mathbf{x}|\mathbf{w}) = w_0 + w_1 x_1 + w_2 x_2 + w_3 x_1 x_2 + w_4 x_1^2 + w_5 x_2^2$
# * ...
#
#
# * Uvodimo fiksan skup **baznih funkcija** (nelinearne funkcije ulaznih varijabli):
# $$
# \{\phi_0, \phi_1, \phi_2, \dots, \phi_m\}
# $$
# gdje $\phi_j:\mathbb{R}^n\to\mathbb{R}$
#
#
# * Dogovorno: $\phi_0(\mathbf{x}) = 1$
#
#
# * Svaki vektor primjera u $n$-dimenzijskom originalnom ulaznom prostoru (engl. *input space*) $\mathcal{X}$:
# $$
# \mathbf{x} = (x_1, x_2, \dots, x_n)
# $$
# preslikavamo u nov, $m$-dimenzijski prostor, tzv. **prostor značajki** (engl. *feature space*):
# $$
# \boldsymbol{\phi}(\mathbf{x}) = \big(\phi_0(\mathbf{x}), \phi_1(\mathbf{x}), \dots, \phi_m(\mathbf{x})\big)
# $$
#
#
# * **Funkija preslikavanja** (vektor baznih funkcija)
# $$
# \begin{align*}
# \boldsymbol{\phi}&:\mathbb{R}^n\to\mathbb{R}^m:\\
# \boldsymbol{\phi}(\mathbf{x}) &= \big(\phi_0(\mathbf{x}),\dots,\phi_m(\mathbf{x})\big)\\
# \end{align*}
# $$
#
#
# * Poopćen linearan model:
# $$
# h(\mathbf{x}|\mathbf{w}) = \sum_{j=0}^m w_j\phi_j(\mathbf{x}) = \mathbf{w}^\intercal\boldsymbol{\phi}(\mathbf{x})
# $$
#
#
# ### Uobičajene funkcije preslikavanja
#
#
# * Linearna regresija:
# $$
# \boldsymbol{\phi}(\mathbf{x}) = (1,x_1,x_2,\dots,x_n)
# $$
#
#
# * Univarijatna polinomijalna regresija:
# $$
# \boldsymbol{\phi}(x) = (1,x,x^2,\dots,x^m)
# $$
#
#
# * Polinomijalna regresija drugog stupnja:
# $$
# \boldsymbol{\phi}(\mathbf{x}) = (1,x_1,x_2,x_1 x_2, x_1^2, x_2^2)
# $$
#
#
# * Gaussove bazne funkcije (RBF):
# $$
# \phi_j(x) = \exp\Big\{-\frac{(x-\mu_j)^2}{2\sigma^2}\Big\}
# $$
#
#
# * [Skica: RBF]
#
# ### Prostor značajki
#
#
# * **Funkcija preslikavanja značajki** $\mathbf{\phi} : \mathbb{R}^n \to \mathbb{R}^m $ preslikava primjere iz $n$-dimenzijskog ulaznog prostora u $m$-dimenzijski prostor značajki
#
#
# * Tipično je $m>n$
#
#
# * Tada je funkcija koja je linearna u prostoru značajki **nelinearna u ulaznom prostoru**
#
#
# * Dakle, možemo koristiti linearan model za nelinearne probleme
#
#
# * Imamo unificiran postupak, neovisno koju funkciju $\boldsymbol{\phi}$ odaberemo
# ### Primjer: Preslikavanje iz ulaznog prostora u prostor značajki
#
# * $\mathcal{X} = \mathbb{R}$
# * $n=1$, $m=3$
# * $\boldsymbol{\phi} : \mathbb{R} \to \mathbb{R}^3$
# * $\boldsymbol{\phi}(x) = (1,x,x^2)$
# * [Skica]
# In[261]:
def f(x) : return 3*(x - 2)**2 + 1
x1 = 1
x2 = 2
x3 = 3
# In[262]:
xs = linspace(0, 4)
y = f(xs)
plt.ylim(0,5)
plt.plot(xs, y)
plt.plot(x1, f(x1), 'ro')
plt.plot(x2, f(x2), 'go')
plt.plot(x3, f(x3), 'bo')
plt.show()
# In[263]:
def phi(x): return sp.array([1, x, x**2])
# In[264]:
phi(x1)
# In[265]:
phi(x2)
# In[266]:
phi(x3)
# In[267]:
xs1 = linspace(0, 5)
xs2 = linspace(0, 10)
X1, X2 = np.meshgrid(xs1, xs2)
# In[268]:
phi_X = 3*X2 - 12*X1 + 13
# In[286]:
plt.contour(X, Y, phi_X, levels=[1,4])
plt.scatter(phi(x1)[1], phi(x1)[2], c='r')
plt.scatter(phi(x2)[1], phi(x2)[2], c='g')
plt.scatter(phi(x3)[1], phi(x3)[2], c='b')
plt.legend()
plt.show()
# ### Optimizacijski postupak
#
# * Ništa se ne mijenja u odnosu na ono što smo već izveli, samo umjesto $\mathbf{X}$ imamo dizajn-matricu $\boldsymbol{\Phi}$
#
#
# * Dizajn-matrica:
# $$
# \boldsymbol{\Phi} =
# \begin{pmatrix}
# 1 & \phi_1(\mathbf{x}^{(1)}) & \dots & \phi_m(\mathbf{x}^{(1)})\\
# 1 & \phi_1(\mathbf{x}^{(2)}) & \dots & \phi_m(\mathbf{x}^{(2)})\\
# \vdots\\
# 1 & \phi_1(\mathbf{x}^{(N)}) & \dots & \phi_m(\mathbf{x}^{(N)})\\
# \end{pmatrix}_{N\times m}
# =
# \begin{pmatrix}
# \mathbf{\phi}(\mathbf{x}^{(1)})^\intercal \\
# \mathbf{\phi}(\mathbf{x}^{(2)})^\intercal \\
# \vdots\\
# \mathbf{\phi}(\mathbf{x}^{(N)})^\intercal \\
# \end{pmatrix}_{N\times m}
# $$
#
# * Prije smo imali:
# $$
# \mathbf{w} = (\mathbf{X}^\intercal\mathbf{X})^{-1}\mathbf{X}^\intercal\mathbf{y} = \color{red}{\mathbf{X}^{+}}\mathbf{y}
# $$
# a sada imamo:
# $$
# \mathbf{w} = (\boldsymbol{\Phi}^\intercal\boldsymbol{\Phi})^{-1}\boldsymbol{\Phi}^\intercal\mathbf{y} = \color{red}{\boldsymbol{\Phi}^{+}}\mathbf{y}
# $$
# gdje
# $$
# \boldsymbol{\Phi}^{+}=(\boldsymbol{\Phi}^\intercal\boldsymbol{\Phi})^{-1}\boldsymbol{\Phi}^\intercal
# $$
# # Odabir modela
# * Poopćeni linearan model regresije ima jedan **hiperparametar**: funkciju preslikavanje $\boldsymbol{\phi}$
#
#
# * Alternativno, možemo reći da se radi o dva hiperparametra:
# * izgled baznih funkcija $\phi_j$
# * broj baznih funkcija $m$ (dimenzija prostora značajki)
#
#
# * Hiperparametre treba namjestiti tako da odgovaraju podatcima, odnosno treba
# dobro **odabrati model**
#
#
# * U suprotnom model može biti **podnaučen** ili **prenaučen**
#
#
# * Ako model ima mnogo parametra, lako ga je prenaučiti
#
#
# * Sprečavanje prenaučenosti:
# 1. Koristiti više primjera za učenje
# 2. Odabrati model unakrsnom provjerom
# 3. **Regularizacija**
# 4. Bayesovska regresija (bayesovski odabir modela) $\Rightarrow$ nećemo raditi
#
#
# # Regularizirana regresija
#
#
# ### Ideja
#
# * Opažanje: kod linearnih modela, što je model složeniji, to ima veće vrijednosti parametara $\mathbf{w}$
#
#
# * Prenaučeni linearni modeli imaju:
# * ukupno previše parametara (težina) i/ili
# * prevelike vrijednosti pojedinačnih parametara
#
#
# * Ideja: **ograničiti rast vrijednosti parametara** kažnjavanjem hipoteza s visokim vrijednostima parametara
#
#
# * Time ostvarujemo **kompromis** između točnosti i jednostavnosti modela i to već **pri samom učenju** modela
#
#
# * Efektivno se **graničava složenost** modela i sprečava se prenaučenost
#
#
# * Cilj: što više parametara (težina) pritegnuti na nulu $\Rightarrow$ **rijetki modeli** (engl. *sparse models*)
#
#
# * Rijetki modeli su:
# * teži za prenaučiti
# * računalno jednostavniji
# * interpretabilniji
#
# ### Regularizacija
#
# * U funkciju pogreške (koju minimiziramo) ugrađujemo mjeru složenosti modela:
#
# $$
# E' = \textrm{empirijska pogreška} + \color{red}{\lambda\times\textrm{složenost modela}}
# $$
#
# $$
# E'(\mathbf{w}|\mathcal{D}) = E(\mathbf{w}|\mathcal{D}) + \underbrace{\color{red}{\lambda E_R(\mathbf{w})}}_{\text{reg. izraz}}
# $$
#
# * $\lambda$ je **regularizacijski faktor**
# * $\lambda=0\ \Rightarrow$ neregularizirana funkcija pogreške
# * Veća vrijednost regularizacijskog faktora $\lambda$ uzrokuje smanjuje efektivne složenost modela
#
#
# * [Skica: Regularizirana regresija]
#
#
# * Općenit regularizacijski izraz: **p-norma vektora težina**
# $$
# E_R(\mathbf{w}) = \|\mathbf{w}\|_p = \Big(\sum_{j=\color{red}{1}}^m |w_j|^p\Big)^{\frac{1}{p}}
# $$
#
#
# * L2-norma ($p=2$):
# $$\|\mathbf{w}\|_2 = \sqrt{\sum_{j=\color{red}{1}}^m w_j^2} = \sqrt{\mathbf{w}^\intercal\mathbf{w}}$$
#
#
# * L1-norma ($p=1$):
# $$\|\mathbf{w}\|_1 = \sum_{j=\color{red}{1}}^m |w_j|$$
#
#
# * L0-norma ($p=0$):
# $$\|\mathbf{w}\|_0 = \sum_{j=\color{red}{1}}^m \mathbf{1}\{w_j\neq 0\}$$
#
#
# * **NB:** Težina $w_0$ se ne regularizira
# * **Q:** Zašto?
#
#
#
#
#
#
#
# ### Regularizirani linearni model regresije
#
# * **L2-regularizacija** ili Tikhononova regularizacija $\Rightarrow$ **Ridge regression**:
# $$
# E(\mathbf{w}|\mathcal{D})=\frac{1}{2}
# \sum_{i=1}^N\big(\mathbf{w}^\intercal\boldsymbol{\phi}(\mathbf{x}^{(i)}) - y^{(i)}\big)^2
# + \color{red}{\frac{\lambda}{2}\|\mathbf{w}\|^2_2}
# $$
# * ima rješenje u zatvorenoj formi
#
#
# * **L1-regularizacija** $\Rightarrow$ **LASSO regularization** (engl. *least absolute shrinkage and selection operator*)
# $$
# E(\mathbf{w}|\mathcal{D})=\frac{1}{2}
# \sum_{i=1}^N\big(\mathbf{w}^\intercal\boldsymbol{\phi}(\mathbf{x}^{(i)}) - y^{(i)}\big)^2
# + \color{red}{\frac{\lambda}{2}\|\mathbf{w}\|_1}
# $$
# * nema rješenje u zatvorenoj formi!
#
#
# * **L0-regularizacija**
# $$
# E(\mathbf{w}|\mathcal{D})=\frac{1}{2}
# \sum_{i=1}^N\big(\mathbf{w}^\intercal\mathbf{\phi}(\mathbf{x}^{(i)}) - y^{(i)}\big)^2
# + \color{red}{\frac{\lambda}{2}\sum_{j=1}^m\mathbf{1}\{w_j\neq0\}}
# $$
# * NP-potpun problem!
#
# ### L2-regularizacija
#
# * Linearna regresija sa L2-regularizacijom ima rješenje u zatvorenoj formi:
#
# $$
# \begin{align*}
# E'(\mathbf{w}|\mathcal{D}) &= \frac{1}{2}
# (\boldsymbol{\Phi}\mathbf{w} - \mathbf{y})^\intercal
# (\boldsymbol{\Phi}\mathbf{w} - \mathbf{y}) + \color{red}{\frac{\lambda}{2}\mathbf{w}^\intercal\mathbf{w}}\\
# &=
# \frac{1}{2}
# (\mathbf{w}^\intercal\boldsymbol{\Phi}^\intercal\boldsymbol{\Phi}\mathbf{w} - 2\mathbf{y}^\intercal\boldsymbol{\Phi}\mathbf{w} + \mathbf{y}^\intercal\mathbf{y}
# + \color{red}{\lambda\mathbf{w}^\intercal\mathbf{w}})\\
# \nabla_{\mathbf{w}}E' &=
# \boldsymbol{\Phi}^\intercal\boldsymbol{\Phi}\mathbf{w} - \boldsymbol{\Phi}^\intercal\mathbf{y} + \color{red}{\lambda\mathbf{w}} \\
# &=
# (\boldsymbol{\Phi}^\intercal\boldsymbol{\Phi} + \color{red}{\lambda\mathbf{I}})\mathbf{w} - \boldsymbol{\Phi}^\intercal\mathbf{y} = 0 \\
# \mathbf{w} &= (\boldsymbol{\Phi}^\intercal\boldsymbol{\Phi} + \color{red}{\lambda\mathbf{I}})^{-1}\boldsymbol{\Phi}^\intercal\mathbf{y}\\
# \end{align*}
# $$
# ### Napomene
#
# * Iznos parametra $w_j$ odgovara važnosti značajke, a predznak upućuje na njezin utjecaj (pozitivan ili negativan) na izlaznu vrijednost
#
#
# * Regularizacija smanjuje složenost modela na način da prigušuje vrijednosti pojedinih značajki, odnosno efektivno ih izbacuje (kada $w_j\to0$)
# * Ako je model nelinearan, to znači smanjivanje nelinearnosti
#
#
# * Težinu $w_0$ treba izuzeti iz regularizacijskog izraza (jer ona definira pomak) ili treba centrirati podatke tako da $\overline{y}=0$, jer onda $w_0\to0$
#
#
# * L2-regularizacija kažnjava težine proporcionalno njihovom iznosu (velike težine više, a manje težine manje) Teško će parametri biti pritegnuti baš na nulu. Zato **L2-regularizacija ne rezultira rijetkim modelima**
#
#
# * L1-regularizirana regresija rezultira rijetkim modelima, ali nema rješenja u zatvorenoj formi (međutim mogu se koristiti iterativni optimizacijski postupci
#
#
# * Regularizacija je korisna kod modela s puno parametara, jer je takve modele lako prenaučiti
#
#
# * Regularizacija smanjuje mogućnost prenaučenosti, ali ostaje problem odabira hiperparametra $\lambda$
# * Taj se odabir najčešće radi **unakrsnom provjerom**
#
#
# * **Q:** Koju optimalnu vrijednost za $\lambda$ bismo dobili kada bismo optimizaciju radili na skupu za učenje?
#
# # Sažetak
#
#
# * **Linearan model regresije** linearan je u parametrima
#
#
# * Parametri linearnog modela uz kvadratnu funkciju gubitka imaju rješenje u zatvorenoj formi u obliku **pseudoinverza dizajn-matrice**
#
#
# * Nelinearnost regresijske funkcije ostvaruje se uporabom nelinearnih **baznih funkcija** (preslikavanjem ulaznog prostora u prostor značajki
#
#
# * Uz pretpostavku normalno distribuiranog šuma, **MLE je istovjetan postupku najmanjih kvadrata**, što daje probabilističko opravdanje za uporabu kvadratne funkcije gubitka
#
#
# * **Regularizacija smanjuje prenaučenost** ugradnjom dodatnog izraza u funkciju pogreške kojim se kažnjava složenost modela
#