<jupyter_start><jupyter_text>Maximum a posteriori (MAP)- Hasta ahora nos hemos enfocado en la verosimilitud $p(\mathcal{D}|\theta)$- En realidad lo que más nos interesa es el *posterior* $p(\theta|\mathcal{D})$Bayes nos dice que$$p(\theta|\mathcal{D}) = \frac{p(\mathcal{D}|\theta)p(\theta)}{p(\mathcal{D})}$$El criterio MAP busca encontrar $\theta$ que maximiza el posterior. Es decir la moda del posteriorUsando el logaritmo para escribir$$\begin{align}\hat \theta &= \text{arg}\max_\theta \log p(\theta|\mathcal{D}) \nonumber \\&= \text{arg}\max_\theta \log p(\mathcal{D}|\theta) + \log p(\theta) \nonumber\end{align}$$donde omitimos la evidencia $p(\mathcal{D})$ ya que no depende de $\theta$- El criterio MAP consiste en maximizar la **verosimilitud** más el **prior**- Usamos el **prior** para agregar información sobre $\theta$  Ejemplo: Regresión  con MAPQuiero modelar una regresión de $N$ parámetros$$\begin{align}y_i = & \Phi(x_i) \theta + \varepsilon_i \nonumber \\&\varepsilon_i \sim \mathcal{N}(0, \sigma_\epsilon^2) \nonumber \\&y_i|\theta \sim \mathcal{N}(\Phi(x_i) \theta, \sigma_\epsilon^2) \nonumber\end{align}$$es decir **verosimilitud** Gaussiana tal como antesAdicionalmente asumiremos que $p(\theta) = \mathcal{N}(0, \sigma_\theta^2)$, es decir **prior** GaussianoEl estimador MAP es $$\begin{align}\hat \theta &= \text{arg} \max_\theta -\frac{1}{2} \log(2\pi\sigma_\varepsilon^2) M - \frac{1}{2\sigma_\varepsilon^2} \sum_{i=1}^M (y_i - \Phi(x_i) \theta)^2 -\frac{1}{2} \log(2\pi \sigma_\theta^2) N - \frac{1}{2\sigma_\theta^2} \sum_{j=1}^N \theta_j^2 \nonumber \\&= \text{arg} \min_\theta  \sum_{i=1}^M (y_i - \Phi(x_i) \theta)^2 + \frac{\sigma_\varepsilon^2}{\sigma_\theta^2} \sum_{j=1}^N \theta_j^2 \nonumber \end{align}$$ Reflexión- Si hay mucho ruido ($\sigma_\varepsilon^2 \to \infty$) entonces ignoro la verosimilitud y le creo al prior- Si uso un prior que no me da información ($\sigma_\theta^2 \to \infty$) entonces lo ignoro y me enfoco en la verosimilitud Relación con lo visto sobre regularización- Si decimos $\lambda = \frac{\sigma_\varepsilon^2}{\sigma_\theta^2}$ entonces la formulación es equivalente a Mínimos cuadrados regularizado, Ridge Regressión, Tikhonov!- Si hubieramos asumido una distribución Laplaciana para $p(\theta)$ hubieramos obtenido el [LASSO](https://en.wikipedia.org/wiki/Lasso_(statistics))  Inferencia Bayesiana- Asumimos que $\theta$ es una variable aleatoria y que tiene cierta distribución- Buscamos estimar el posterior completo $p(\theta|\mathcal{D})$- El problema es que $p(\mathcal{D})$ es generalmente incalculable- Para proseguir tenemos tres opciones    1. Usar distribuciones que sean conjugadas    1. Usar una aproximación (inferencia variacional)    1. Aprender un sistema que se comporte como el posterior (Markov Chain Monte Carlo)<jupyter_code>import pymc3 as pm
print('Running on PyMC3 v{}'.format(pm.__version__))

temperatura, consumo = df["temperatura"].values, df["consumo"].values
with pm.Model() as helados:
    sigma = pm.HalfNormal('sigma', sd=10, shape=1)
    theta0 = pm.Normal('intercept', mu=0, sd=10, shape=1)
    theta1 = pm.Normal('slope', mu=0, sd=10, shape=1)
    mu = temperatura*theta1 + theta0
    x_observed = pm.Normal('x_obs', mu=mu, sd=sigma, observed=consumo)
    trace = pm.sample(draws=500, tune=200, init='advi', n_init=30000, 
                      cores=4, chains=2, live_plot=False)
display(pm.summary(trace))
pm.traceplot(trace, figsize=(9, 6), combined=True);<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.15819531696173614, 'fraction_numerical': 0.019417475728155338, 'mean_word_length': 4.87751677852349, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '101742', 'license': 'Unlicense', 'n_tokens_mistral': 1254, 'n_tokens_neox': 1209, 'n_words': 342, 'path': 'clases/unidad2/3_statistics/stats4.ipynb', 'repo_name': 'magister-informatica-uach/INFO147', 'size': '3502'}