Einfache SVMs abgeschlossen

This commit is contained in:
paul-loedige 2022-02-13 20:35:36 +01:00
parent 92ff396b36
commit 81998194b8
10 changed files with 168 additions and 2 deletions

View File

@ -78,6 +78,7 @@
\newacronym{CART}{CART}{Classification an Regression Trees}
\newacronym{DNN}{DNN}{Dynamic Neural Network}
\newacronym{RBF}{RBF}{Radial Basis Function Kernel}
\newacronym{SVM}{SVM}{Support Vector Machine}
%--------------------
%nomenclature
@ -126,6 +127,8 @@
\newnom{kernel_matrix}{Kernel Matrix}{\bm{K}}{}
\newnom{kernel_function}{Kernel Function}{k}{}
\newnom{kernel_vector}{Kernel Vector}{\bm{k}}{}
\newnom{margin}{Margin}{\rho}{}
\newnom{slack-variable}{Slack-Variable}{\xi_i}{}
\shorthandoff{"}
\makeglossaries

View File

@ -36,6 +36,7 @@
\input{chapters/Mathematische_Grundlagen/Lineare_Algebra.tex}
\input{chapters/Mathematische_Grundlagen/Probability_Theory.tex}
\input{chapters/Mathematische_Grundlagen/Kernel_Basics.tex}
\input{chapters/Mathematische_Grundlagen/Sub-Gradients.tex}
\part{Classical Supervised Learning}
\label{part:Classical Supervised Learning}

View File

@ -1,3 +1,158 @@
\chapter{Support Vector Machines}%
\label{cha:Support Vector Machines}
\chapter{\glsfmtfull{SVM}}%
\label{cha:SVM}
\glspl{SVM} sind eine Methode zur binären Klassifikation (\cref{sec:Binary Classification}).
Anders als bei anderen Algorithmen werden die Klassen hierbei nicht mit 0 und 1,
sondern mit $+1$ und $-1$ gelabelt ($y_i\in\{-1,1\}$).
\begin{equation} \label{eq:binary_classification_svm}
f(\bm x_i) = \begin{cases}
>0, &\text{ if } y_i=1\\
<0, &\text{ if } y_i=-1
\end{cases}
\end{equation}
Meist gibt es unendlich viele möglicher Diskriminanten,
die den gegebenen Datensatz erfolgreich klassifizieren.
Das Ziel ist es mithilfe von Support Vektoren die Diskriminante zu wählen,
sodass auch neue Datenpunkte zuverlässig klassifiziert werden.
\begin{figure}[H]
\centering
\begin{minipage}{.48\textwidth}
\includegraphics[width=\linewidth]{possible_discriminants.pdf}
\caption{Auszug möglicher Diskriminanten}
\label{fig:possible_discriminants}
\end{minipage}
\hfill
\begin{minipage}{.48\textwidth}
\includegraphics[width=\linewidth]{SVM.pdf}
\caption{Diskriminante mit Support Vektoren}
\label{SVM}
\end{minipage}
\end{figure}
\section{Maximum Margin}%
\label{sec:Maximum Margin}
\begin{wrapfigure}{r}{.5\textwidth}
\vspace*{-20mm}
\centering
\includegraphics[width=.8\linewidth]{svm_point_line_distance.pdf}
\caption{Abstand zwischen einem Punkt und einer Geraden}
\label{fig:svm_point_line_distance}
\vspace*{-5mm}
\end{wrapfigure}
Das Ziel bei der Erstellung von Support Vektoren nach dem Maximum Margin Prinzips ist es,
dass der Abstand (\nomf{margin}) zwischen Diskriminante und Datenpunkten maximiert wird.
Der Abstand eines beliebigen Punktes $\bm x_i$ zur untersuchten Gerade $\bm w^T \bm x + b = 0$ lässt sich hierbei durch $r=\frac{\bm w^T \bm x_i + b}{\|\bm w\|}$ bestimmen.
Da $\bm w^T\bm x + b = 0$ und $c(\bm w^T\bm x + b)=0$ für ein konstantes $c$ immer die gleiche Hyper-Ebene aufspannen,
ist es möglich,
$\bm w$ so zu wählen,
dass $\nomeq{margin}=\frac{2}{\|\bm w\|}$ ist.
\begin{wrapfigure}{r}{.5\textwidth}
\centering
\includegraphics[width=\linewidth]{svm_positive_negative_support.png}
\caption{Support Vektoren einer \glsxtrshort{SVM}}
\label{fig:svm_positive_negative_support}
\vspace*{-10mm}
\end{wrapfigure}
Zudem lassen sich im gleichen Zug die positiven und negativen Support Vektoren definieren:
\begin{itemize}
\item positiver Support Vektor: $\bm w^T \bm x_+ + b = +1$
\item negativer Support Vektor: $\bm w^T \bm x_- + b = +1$
\end{itemize}
\subsection{\glsxtrshort{SVM} Optimization}%
\label{sub:SVM Optimization}
Das Problem ist für das Maximum Margin Verfahren gegeben durch:
\begin{equation} \label{eq:maximum_margin_optimization_problem}
\argmax_{\bm{w}} \frac{2}{\|\bm w\|}
\end{equation}
Hierbei muss folgende Bedingung erfüllt sein:
\begin{equation} \label{eq:maximum_margin_condition}
\bm w^T\bm x_i + b \begin{cases}
\ge+1, &\text{ if }y_i=+1\\
\le-1, &\text{ if }y_i=-1
\end{cases} \forall i\in N
\end{equation}
Diese Formel lässt sich auch zu einem quadratischen Optimierungsproblem umstellen:
\begin{equation} \label{eq:maximum_margin_optimization_quadratic}
\argmin_{\bm w} \|\bm w\|^2,\qquad y_i(\bm w^T\bm x_i + b)\ge 1 \forall i \in N
\end{equation}
Hieraus ergibt sich, dass die folgenden Support Vektoren gesucht sind:
\begin{align} \label{eq:support_vector_optimization}
\min_{\bm x_+\in\bm X_+}(\bm w^T \bm x_+ + b) &= +1 \\
\max_{\bm x_-\in\bm X_-}(\bm w^T \bm x_- + b) &= -1
\end{align}
\section{Soft Max-Margin}%
\label{sec:Soft Max-Margin}
\begin{wrapfigure}{r}{.5\textwidth}
\vspace*{-15mm}
\centering
\includegraphics[width=0.8\linewidth]{svm_soft_margin.png}
\caption{Max-Margin vs. Soft Max-Margin}
\label{fig:svm_soft_margin}
\end{wrapfigure}
Da das Max-Margin Verfahren sehr empfindlich auf Ausreißer (oder falsch klassifizierte) Datenpunkte reagiert,
ist es sinnvoll die Stützvektoren auf Basis von mehr als jeweils einem Punkt pro Klasse zu erstellen.
Man spricht hierbei von einem Soft Margin.
Um diesen Effekt zu erhalten wird für jeden Datenpunkt $\bm x_i$ eine \nomf{slack-variable} errechnet.
Hierbei gilt:
\begin{equation} \label{eq:slack variable}
\nomeq{slack-variable}\ge 0\qquad y_i(\bm w^T\bm x_i + b)\ge 1-\nomeq{slack-variable}
\end{equation}
Die Interpretation der \noms{slack-variable} erfolgt dabei wie folgt:
\begin{itemize}
\item $0\le\nomeq{slack-variable}\le1$ Der Datenpunkt liegt zwischen Stützvektor und Diskriminante,
aber noch auf der richtigen Seite (\textbf{margin violation})
\item $\nomeq{slack-variable}>1$ Der Datenpunkt liegt auf der falschen Seite der Diskriminanten (\textbf{misclassified})
\end{itemize}
\begin{figure}[H]
\centering
\includegraphics[width=0.5\textwidth]{svm_slack-variables.pdf}
\caption{\noms{slack-variable}{n}}
\label{fig:slack_variables}
\end{figure}
\subsection{Optimization}%
\label{sub:Optimization}
Das Optimierungsproblem für die Soft Max-Margin Methode ist gegeben durch:
\begin{equation} \label{eq:soft_max-margin_optimization}
\argmin_{\bm w, \bm\xi} \|\bm w\|^2 + C\sum_i^N\nomeq{slack-variable}\qquad y_i(\bm w^T\bm x_i + b)\ge 1-\nomeq{slack-variable}, \nomeq{slack-variable}\ge 0
\end{equation}
Hierbei stellt $C$ einen inversen Regularisierungsfaktor dar.
\subsection{Hinge Loss}%
\label{sub:Hinge Loss}
Die Optimierung kann in ein uneingeschränktes (unconstrained) Problem umgeschrieben werden ({\color{red} Herleitung Vorlesung 06 Seite 21}):
\begin{equation} \label{eq:soft_max-margin_unconstrained}
\argmin_{\bm w} \underbrace{\|\bm w\|^2}_{\text{regularization}} + \underbrace{C\sum_{i=1}^N \max(0, 1-y_i f(\bm x_i))}_{\text{loss function}}
\end{equation}
Diese Loss Funtion wird als Hinge Loss bezeichnet.
Sie ist zwar konvex,
kann aber nicht abgeleitet werden.
Daher muss das Verfahren des Sub-Gradient Descent verwendet werden.
Hierbei wird statt der Ableitung der Funktion ein beliebiger Sub-Gradient (\cref{cha:Sub-Gradients}) verwendet.
\begin{algorithm}
\caption{Sub-Gradient Descent}\label{sub-gradient_descent_algorithm}
\begin{algorithmic}[1]
\State $\bm{x}_0$ $\gets$ init, $t=0$
\While{termination condition does not hold}
\State $\bm{x}_{t+1}=\bm{x}_t-\nomeq{learning_rate}\bm g$, $t=t+1$ ($\bm g$ ist ein beliebiger Sub-Gradient von $f$ an der Stelle $\bm x_t$)
\EndWhile
\end{algorithmic}
\end{algorithm}
Im Falle des Hinge Loss bedeutet das:
\begin{equation} \label{eq:hinge_loss_sub-gradient_descent}
\bm w_{t+1} = \begin{cases}
\bm w_t - \nomeq{learning_rate}(2\bm w_t - C y_i \bm x_i), &\text{ if } y_i f(\bm x_i)<1 \\
\bm w_t - \nomeq{learning_rate}2\bm w_t, & \text{ else }
\end{cases}
\end{equation}
\section{Anwendungsbeispiele}%
\label{sec:Anwendungsbeispiele}
{\color{red} siehe Vorlesung 06 Folien 34 ff.}

View File

@ -0,0 +1,7 @@
\chapter{Sub-Gradients}%
\label{cha:Sub-Gradients}
Ein Sub-Gradient wird zur Approximation einer nicht differenzierbaren konvexen Funktion verwendet.
Für jede konvexe Funktion $f$ an einer Stelle $\bm x$ kann ein Gradient $\bm g$ gefunden werden,
für den $f(\bm z)\ge f(\bm x) + \bm g^T(\bm z - \bm x)$ gilt
(in anderen Worten: Man kann eine lineare Funktion bilden, die immer unterhalb der konvexen Funktion liegt).
Für Differenzierbare Funktionen ist der Gradient das gleiche wie die Ableitung ($\bm g = \nabla f(\bm x)$).

BIN
images/SVM.pdf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

BIN
images/svm_soft_margin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB