\chapter{Density Estiamtion}%
\label{cha:Density Estiamtion}
Das Ziel von Density Estiamtion Algorithmen ist es,
die Verteilung von Datenpunkten verschiedener Klassen zu modelieren.
Diese Modellierung kann genutzt werden, um
\begin{itemize}
    \item die Daten zu klassifizieren
    \item Ausreißer zu erkennen
    \item neue Daten (z.B. zum Training von anderen Algorithmen) generieren,
        die den bereits vorhandenen ähneln
\end{itemize}
Es gibt mehrere Methoden,
die genutzt werden können,
um die Wahrscheinlichkeitsverteilung einer Klasse zu Modellieren.

\section{Parametric Models}%
\label{sec:Parametric Models}
Eine Form der Modellierung ist bereits aus vorhergegangenen Algorithmen bekannt.
Die Wahrscheinlichkeitsverteilung kann durch ein parametrisiertes Modell (z.B. \dref{sub:Gaussian Distribution})
approximiert werden.
Diese Methode eignet sich allerdings nicht für Datenverteilungen,
die weit von der Grundannahme (z.B. normalverteilte Datenpunkte) des parametrischen Modells entfernt sind.

\section{Non-parametric Models}%
\label{sec:Non-parametric Models}
Für Datenverteilungen mit unbekannter Grundlage ist es oft sinnvoll ein nicht-parametrisiertes Modell zur Repräsentation der Verteilung zu wählen.

\subsection{Histograms}%
\label{sub:Histograms}
\begin{wrapfigure}{r}{.4\textwidth}
    \vspace*{-10mm}
    \centering
    \includegraphics[width=0.8\linewidth]{histogram.png}
    \caption{Histogramm}
    \label{fig:histogram}
\end{wrapfigure}
Bei Histogrammen werden die Daten in gleichgroßen Bins gesammelt.
Anschließend bietet die Anzahl der Datenpunkte in den jeweiligen Bins eine generalisierte Repräsentation der Dichteverteilung.
Histogramme bekommen dann Schwierigkeiten,
wenn sie hochdimensionale Daten repräsentieren sollen,
da hier der \dref{sec:Curse of Dimensionality} einsetzt.
Zudem stellt die Wahl der Größe der Bins ein Model-Selection Problem dar.

Eine formale Definition von Histogrammen ist in \cref{sec:Formale Definition: Histrograms} zu finden.

\subsection{Kernel Density Estimation}%
\label{sub:Kernel Density Estimation}
Damit ein Kernel für die Dichteabschätzung verwendet werden kann,
muss er folgende Eigenschaften erfüllen
\begin{itemize}
    \item nicht-negativ:\tabto{3cm}$\nomeq{kernel_function}(\bm x,\bm y)\le 0$
    \item distance-dependant:\tabto{3cm}$\nomeq{kernel_function}(\bm x,\bm y) = g(\underbrace{\bm x-\bm y}_{\text{difference }\bm u})$
\end{itemize}
Die Dichteabschätzung lässt sich anhand der folgenden Formel durchführen
\begin{equation} \label{eq:kernel_density_estimation}
    p(\bm x_*) \approx \frac{K(\bm x_*)}{N V} = \frac{1}{N V}\sum_{i=1}^N g(\bm x_* - \bm x_i)
\end{equation}
\begin{itemize}
    \item Volumen $V = \int g(\bm u) d\bm u$
    \item Summed Kernel activation $K(\bm x_*) = \sum_{i=1}^N g(\bm x_* - \bm x_i)$
\end{itemize}

\subsubsection{Parzen Window}%
\label{ssub:Parzen Window}
\begin{wrapfigure}{r}{.4\textwidth}
    \centering
    \includegraphics[width=0.8\linewidth]{parzen_window.png}
    \caption{Parzen Window}
    \label{fig:parzen_window}
\end{wrapfigure}
Das Parzen Window ist der einfachste Kernel,
der für eine Dichteabschätzung denkbar ist.
Hierbei wird ein Hyper-Würfel um den untersuchten Datenpunkt gelegt und anschließend die Dichte innerhalb des Würfels errechnet.
Die Kernelfunktion ist 1 für alle Punkte innerhalb des Hyper-Würfels und 0 außerhalb.
Diese Art der Dichteabschätzung ist zwar seh einfach zu errechnen,
produziert aber keinen besonders gleichmäßigen Verlauf.
\begin{itemize}
    \item Kernel function: 
        \begin{equation} \label{eq:parzen_window_kernel_function}
            g(\bm u) = \begin{cases} 1, &|u_j|\le \frac{h}{2}, j=1\dots d \\ 0, & \text{sonst} \end{cases}
        \end{equation}
    \item Volume: 
        \begin{equation} \label{eq:parzen_window_volume}
            V = \int g(\bm u) d\bm u = h^d
        \end{equation}
    \item Estimated Density:
        \begin{equation} \label{eq:parzen_window_density_estimation}
            p(\bm x_*) \approx \frac{1}{N h^d}\sum_{i=1}^N g(\bm x_* - \bm x_i) 
        \end{equation}
\end{itemize}

\subsubsection{Gaussian Kernel}%
\label{ssub:Gaussian Kernel}
\includegraphics[scale=.6]{kernel_density_estimation_gaussian_kernel.png}\\\\
\includegraphics[scale=.6]{kernel_density_estimation_gaussian_kde_example.png}

\subsection{K-nearest Neighbor Density Estimation}%
\label{sub:K-nearest Neighbor Density Estimation}
\includegraphics[scale=.6]{k-nearest_neighbor_density_estimation.png}

\subsection{Model-Selection}%
\label{sub:Model-Selection}
Auch alle nicht-parametrisierten Modelle haben irgendeiner Form ein Model-Selection Problem
\begin{itemize}
    \item \nameref{sub:Histograms}: Bin Size
    \item \nameref{sub:Kernel Density Estimation}: Kernel Bandwidth $h$
    \item \nameref{sub:K-nearest Neighbor Density Estimation}: Anzahl der Nachbarn $K$
\end{itemize}
Meistens wird versucht das Modell mithilfe von \dref{sub:Cross Validation} zu lösen.

\section{Mixture Models}%
\label{sec:Mixture Models}
Sowohl parametrische, als auch nicht-parametrische Modelle haben ihre Schwachstellen:
\begin{figure}[H]
    \centering
    \includegraphics[scale = .6]{parametric_nonparametric_density_estimation_comparison.png}
    \caption{Vergleich von parametrischen und nicht-parametrischen Modellen}
    \label{fig:parametric_nonparametric_density_estimation_comparison}
\end{figure}
Aus diesem Grund wurde Mixture Models erfunden,
welche es ermöglichen ein komplexes Modell auf Basis von einfachen Modellen zu erstellen.
Die Verteilung des Mixture Models berechnet sich hierbei als Summe der Teilverteilungen
\begin{equation} \label{eq:mixture_model_distribution}
    p(\bm x) = \sum_{k=1}^K p(k)p(\bm x|k)
\end{equation}
\begin{itemize}
    \item Mixture coefficient $p(k)$
    \item k-th mixture componen $p(\bm x|k)$
    \item Anzahl der Komponenten $K$
\end{itemize}

\subsection{\texorpdfstring{\glsxtrfullpl{GMM}}{\glsfmtfullpl{GMM}}}%
\label{sub:GMMs}
\includegraphics[scale = .6]{GMMs.png}\\
Die \glslink{marginal}{marginal} Log-Likelihood (\cref{sec:Example: Gaussian Distribution}) für $N$ \gls{iid} Datenpunkte ist gegeben durch
\begin{equation} \label{eq:maximum_likelihood_for_GMM}
    \mathcal L = \log L(\bm\theta) = \sum_{i=1}^N \log \underbrace{p_{\bm\theta}(\bm x_i)}_{\text{marginal}} 
        = \sum_{i=1}^N \log \underbrace{\left( \sum_{k=1}^K \pi_k \nomeq{gaussian_distribution}(\bm x_i|\bm\mu_k,\nomeq{covariance}_k) \right)}_{\text{non-exponential family}}
\end{equation}
Um einen \dref{cha:Gradient Descent} auf diesen Daten durchzuführen,
muss geprüft werden,
ob sich diese Funktion differenzieren lässt.
\begin{align} \label{eq:GMM_gradient_descent}
    \frac{\partial\mathcal L}{\partial \bm\mu_j} 
        &= \sum_{i=1}^N \frac{\pi_j\nomeq{gaussian_distribution}(\bm x_i|\bm\mu_j,\nomeq{covariance}_j)}
            {\sum_{k=1}^K \pi_k\nomeq{gaussian_distribution}(\bm x_i|\bm\mu_k,\nomeq{covariance}_k)}\nomeq{covariance}_j^{-1}(\bm x_i - \bm\mu_j)\\
        &= \dots \text{(Herleitung: \cref{sec:Herleitung: Differenzierung des GMMs})}\\
        &= \sum_{i=1}^N \nomeq{covariance}_j^{-1} (\bm x_i - \bm\mu_j)p(j|\bm x_i)
\end{align}
Dies zeigt,
dass der Einsatz des \nameref{cha:Gradient Descent} Verfahrens (\cref{cha:Gradient Descent}) für \glspl{GMM} zwar möglich ist,
aber der Gradient von allen anderen Komponenten abhängig ist.
Zudem hat er keine \gls{closed_form_solution},
weshalb kein anderes (in der Vorlesung behandeltes) Verfahren als der \nameref{cha:Gradient Descent} in Frage kommt.
Leider ist hierbei die Konvergenz meist sehr langsam.
Die goto-Lösung für dieses Problem ist das \nameref{cha:Expectation Maximization} Verfahren (\cref{sec:Expectation Maximization for GMMs}).

