diff --git a/programming/exercises/boolean_expressions.m b/programming/exercises/boolean_expressions.m new file mode 100644 index 0000000..9a16404 --- /dev/null +++ b/programming/exercises/boolean_expressions.m @@ -0,0 +1,127 @@ +% Uebungen 3: Boolesche Ausdruecke + +%% 1) Boolesche Ausdruecke auf Vektoren +x = [1 5 2 8 9 0 1]; +y = [5 2 2 6 0 0 2]; + +% a +disp('a:') +disp(x > y) +% liefert einern logischen Verktor der 1 an den Stellen ist, an denen der +% Wert in x groesser als der entsprechende Wert in y + +% b +disp('b:') +disp(y < x) +% dto., da die Frage nur umgekehrt gestellt wurde + +% c +disp('c:') +disp(x == y) +% 1 nur an den Stellen, an denen beide Vektoren geiche Werte enthalten (3 +% und 6) + +% d +disp('d:') +disp(x ~= y) +% wahr an allen Stellen ausser 3 und 6, da auf ungleichheit der Werte getestet +% wird. + +% e +disp('e:') +disp(x & ~y) +% glesen: das Ergebnis sei wahr an den Stellen, an denen x ungleich 0 ist +% (wahr) UND y == 0 (falsch) ist. + +% f +disp('f:') +disp(x | y) +% gelesen: das Ergebnis sei wahr an den Stellen, an denen x ODER y ungleich +% 0 ist (alle ausser Nr. 6) + +%% 2) bitand und bitor + +% a +disp('a:') +disp(bitand(10, 8)) +% wenn man sich die Zahlen binaer dargestellt vorstellt, dann werden diese +% binaeren Vektoren mit einem logischen UND bit fuer bit verglichen. Das +% Ergebnis hat eine 1 nur an der 4. Position, der 8. + +% b +disp('b:') +disp(bitor(10,8)) +% Wiederum binaer dargestellt und mit logischem ODER verglichen. Das +% Ergebnis ist wahr an den Stellen 2 und 4, was der 10 im Dezimalsystem +% entspricht + +%% 3) Boolesche Ausdruecke implementieren + +% a: Das Ergebnis sei wahr, wenn x groesser als y und die Summe aus x und y +% nicht kleiner als 100 ist. + +x > y & (x + y) > 100; + + +% b: Das Ergebnis sei wahr, wenn x und y ungleich 0 oder x und y gleich sind. + +(x & y) | (x == y); + +%% 4) Logisches Indizieren + +x = (1:10); +y = [3 1 5 6 8 2 9 4 7 0]; + +% a +disp('a:') +disp(x < 5) +% logischer Vektor, der 1 an den Stellen ist, an denen die Werte in x +% kleiner als 5 sind. + +% b +disp('b:') +disp(x( x < 5)) +% Die Werte aus x an den Stellen, an denen die Werte in x kleiner als 5 +% sind. + +% c +disp('c:') +disp(x( (y <= 2) )) +% Die Werte aus x and den Stellen, an denen die Werte in y (!) kleiner oder +% gleich 2 sind. + +% d +disp('d:') +disp(x( (x > 2) | (y < 8) )) +% Die Werte aus x an den Stellen, an denen die Werte in x groesse 2 UND die +% Werte in y kleiner 8 sind. + +% e +disp('e:') +disp(x( (x == 0) & (y == 0) )) +% Die Werte aus x an den Stellen an denen die Werte in x UND y gleich 0 sind + + +%% 5) Teste den Zufallsgenerator + +x = randi(100, 100, 100); % 1:100 + +% a +x(x < 33) = 1; +x(x >= 33 & x < 66) = 2; +x(x >= 66) = 3; +% man benutzt das logische Indizieren um all die Were zu ersetzen, die +% einer bestimmten Bedingung entsprechen. z.B: setze all die Werte in x an +% den Stellen, an denen die Werte in x < 33 gleich 1... + +% b + +disp('Anzahl Werte kleiner 33:') +disp(sum(x(:) == 1)) + +disp('Anzahl Werte groesser gleich 33 und kleiner 66:') +disp(sum(x(:) == 2)) + +disp('Anzahl Werte groesser gleich 66:') +disp(sum(x(:) == 3)) + diff --git a/programming/exercises/control_structures.m b/programming/exercises/control_structures.m new file mode 100644 index 0000000..4608281 --- /dev/null +++ b/programming/exercises/control_structures.m @@ -0,0 +1,190 @@ +%% Uebung 4 Kontrollstrukturen + +clear +close all + +%% 1) for-Schleife + +% a +for i = 0:10 + disp(i) +end + +% b +for i = 10:-1:0 + disp(i) +end + +% c +for i = 0:0.1:1 + disp(i) +end + + +%% 2) Zugriffe auf Vektoren mit der Laufvariable + +% a + +x = 1:100; + +% b +for i = 1:length(x) + disp(x(i)) +end +% Die Laufvariable erhaelt mit jedem Iterationsschritt einen neuen Wert. +% Dieser "laeuft" von 1 bis zur Anzahl Element in x. Die Laufvar. wird dann +% als Index benutzt mit dem auf x zugegriffen wird. + +% c +for i = x + disp(i) +end +% Alternativ kann man mit der Schleife auch direkt durch den Vektor x +% laufen. Mit jeder Iteration enthaelt i nun einen Wert aus x. Es muss +% nicht mehr mittles Index auf x zugegriffen werden. + +%% 3 ) Arithmetisches Mittel, Standardabweichung + +x = rand(1,50) .* 10; % rand liefert im Bereich 0 bis 1 + +% a +mittelwert = []; +summe = 0; +n = length(x); + +for i = 1:n + summe = summe + x(i); +end +mittelwert = summe / n; +disp(mittelwert) + +% b + +% 1. Mittelwert berechnen +mittelwert = []; +summe = 0; +n = length(x); + +for i = 1:n + summe = summe + x(i); +end +mittelwert = summe / n; + +% 2. Std berechnen +standardabw = []; +summe_quadratische_abw = 0; + +for i = 1:n + summe_quadratische_abw = summe_quadratische_abw + (x(i) - mittelwert).^2; +end +standardabw = sqrt(summe_quadratische_abw / n); +disp(standardabw) + +% c +disp(mean(x)) + +disp(std(x,1)) % Wir verwenden eine Formel fuer die std, die in Matlab nicht default ist + + +%% 4 While Schleife + +% a +count = 0; +while count < 100 + disp(count) + count = count + 1; +end + +% b +% count = 0; +% while true +% disp(count) +% count = count + 1; +% end + + +%% 5 +count = 1; +x = 1:10; +while true + disp(x(count)) + count = count + 1; +end + +%% 6 + +% a +while true + x = randn(1,1); + if x > 1.33 + break; + end +end + +% b +trials = zeros(1000,1); +for i = 1:length(trials) + count = 1; + while true + x = randn(1,1); + if x > 1.33 + trials(i) = count; + break; + end + count = count + 1; + end +end +disp(mean(trials)) + +% c +figure() +plot(trials) +xlabel('Durchgang') +ylabel('Anzahl Versuche') + +% d + +% Mit groesser werdender Schwelle steigt auch die durchschnittliche Anzahl +% Versuche. + +%% 7 Loeschen von Elementen + +% a +x = rand(10,1) .* 10; +disp('vorher:') +disp(x) +for i = length(x):-1:1 + if x(i) < 5 + x(i) = []; + end +end +disp('nachher:') +disp(x) +% Der Trick ist hier nicht von vorne durch den Vektor zu laufen, sondern +% rueckwaerts. Ansonsten laeuft man Gefahr hinter den gekuerzten Vektor zu +% greifen, was zu einem Index exceeds matrix dimensions Fehler fuehren +% wuerde. + +% b +x = rand(10,1) .* 10; +disp('vorher:') +disp(x) +for i = length(x):-1:1 + if x(i) < 5 & x(i) > 2 + x(i) = []; + end +end +disp('nachher:') +disp(x) + +% c +x = rand(10,1) .* 10; +disp('vorher:') +disp(x) +x(x < 5 & x >2) = []; +disp('nachher:') +disp(x) + + +%% 8 Teste den Zufallsgenerator + diff --git a/statistics/exercises/fitting.tex b/statistics/exercises/fitting.tex new file mode 100644 index 0000000..a9188be --- /dev/null +++ b/statistics/exercises/fitting.tex @@ -0,0 +1,98 @@ +\documentclass[12pt,a4paper,pdftex]{exam} + +\usepackage[german]{babel} +\usepackage{natbib} +\usepackage{graphicx} +\usepackage[small]{caption} +\usepackage{sidecap} +\usepackage{pslatex} +\usepackage{amsmath} +\usepackage{amssymb} +\setlength{\marginparwidth}{2cm} +\usepackage[breaklinks=true,bookmarks=true,bookmarksopen=true,pdfpagemode=UseNone,pdfstartview=FitH,colorlinks=true,citecolor=blue]{hyperref} + +%%%%% text size %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\usepackage[left=20mm,right=20mm,top=25mm,bottom=25mm]{geometry} +\pagestyle{headandfoot} \header{{\bfseries\large \"Ubung + 4}}{{\bfseries\large }}{{\bfseries\large 23. Oktober, 2015}} +\firstpagefooter{Dr. Jan Grewe}{Phone: 29 74588}{Email: + jan.grewe@uni-tuebingen.de} \runningfooter{}{\thepage}{} + +\setlength{\baselineskip}{15pt} +\setlength{\parindent}{0.0cm} +\setlength{\parskip}{0.3cm} +\renewcommand{\baselinestretch}{1.15} + +\newcommand{\code}[1]{\texttt{#1}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{document} + +\vspace*{-6.5ex} +\begin{center} + \textbf{\Large Einf\"uhrung in die wissenschaftliche Datenverarbeitung}\\[1ex] + {\large Jan Grewe, Jan Benda}\\[-3ex] + Abteilung Neuroethologie \hfill --- \hfill Institut f\"ur Neurobiologie \hfill --- \hfill \includegraphics[width=0.28\textwidth]{UT_WBMW_Black_RGB} \\ +\end{center} + +Die folgenden Aufgaben dienen der Wiederholung, \"Ubung und +Selbstkontrolle und sollten eigenst\"andig bearbeitet und gel\"ost +werden. Die L\"osung soll in Form eines einzelnen Skriptes (m-files) +im ILIAS hochgeladen werden. Jede Aufgabe sollte in einer eigenen +``Zelle'' gel\"ost sein. Die Zellen \textbf{m\"ussen} unabh\"angig +voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster: +``variablen\_datentypen\_\{nachname\}.m'' benannt werden +(z.B. variablen\_datentypen\_mueller.m). + +\begin{questions} + \question Implementiert folgende mathematische Funktionen als + jeweils eigene Matlab Funktionen. Diese nehmen, die + Funktionsparameter (in einem Vektor) und die x-Werte als Argumente + entgegen. + \begin{parts} + \part Die Exponentialfunktion: + \[y = \alpha \cdot e^{\frac{x}{\tau}}\] + Plottet in einem weiteren Skript eine Schar von Kurven, bei denen + das $\tau$ variiert wird. Welche Rolle spielt der Parameter? + \part Die Boltzmannfunktion: + \[\frac{\alpha}{1+e^{-k(x-x_0)}}+y_0\] + Welche Rolle spielt der Parameter $k$? Plottet eine Kurvenschar + mit ver\"andertem $k$. + \end{parts} + + \question Wir haben den Gradientenabstieg f\"ur den linearen Fall + gemacht. Jetzt werden wir versuchen die Ladungskurve der Membran + einer Nervenzelle zu fitten. + \begin{parts} + \part Ladet den Datensatz \code{membrane\_voltage.mat} und plottet + die Daten. + \part Fittet mithilfe des Gradientenabstiegs folgende Funktion an + die Daten: + \[f_{A,\tau}(t) = A \cdot \left(1 - e^{-\frac{t}{\tau}}\right ) \] + An welcher Stelle im code muss etwas ge\"andert werden? + \part Plottet den Fit in die Daten. + \end{parts} + + \question F\"ur die Parameteranpassung mit einem Polynom bietet + Matlab die Funktion \code{polyfit}. L\"ost unser lineares Problem + mit dieser Funktion. Plottet anschliessend die Daten samt Fit in + einen Plot. + + \question Stannungsgesteuerte Ionenkan\"ale in Nervenzellen \"offnen + abh\"angig von der Membranspannung. Der Datensatz + \code{iv\_curve.mat} enth\"alt Daten von einem Voltage-Clamp + Experiment. Der \"uber die Membran fliessende Strom wurde in einem + Bereich von Membranspannungen gemessen. + \begin{parts} + \part Ladet die Daten und plottet sie. + \part Benutzt den Gradientenabstieg um die Boltzmannfunktion + (s.o.) an die Daten zu fitten. Merkt euch w\"ahrend des Abstiegs + die Fehlerwerte und plottet diese als Funktion der Schritte. + \part Benutzt den Plot der Rohdaten um m\"oglichst gute + Startparameter abzusch\"atzen. + \part Versucht schlechtere Startparameter. Was passiert? + \end{parts} +\end{questions} + + +\end{document} \ No newline at end of file diff --git a/statistics/lecture/charging_curve.pdf b/statistics/lecture/charging_curve.pdf new file mode 100644 index 0000000..68cabfc Binary files /dev/null and b/statistics/lecture/charging_curve.pdf differ diff --git a/statistics/lecture/lin_regress.pdf b/statistics/lecture/lin_regress.pdf new file mode 100644 index 0000000..2c5ccb9 Binary files /dev/null and b/statistics/lecture/lin_regress.pdf differ diff --git a/statistics/lecture/lin_regress_abscissa.pdf b/statistics/lecture/lin_regress_abscissa.pdf new file mode 100644 index 0000000..02a5af1 Binary files /dev/null and b/statistics/lecture/lin_regress_abscissa.pdf differ diff --git a/statistics/lecture/lin_regress_slope.pdf b/statistics/lecture/lin_regress_slope.pdf new file mode 100644 index 0000000..004a892 Binary files /dev/null and b/statistics/lecture/lin_regress_slope.pdf differ diff --git a/statistics/lecture/linear_least_squares.pdf b/statistics/lecture/linear_least_squares.pdf new file mode 100644 index 0000000..11d1e64 Binary files /dev/null and b/statistics/lecture/linear_least_squares.pdf differ diff --git a/statistics/lecture/linear_regression.tex b/statistics/lecture/linear_regression.tex new file mode 100644 index 0000000..6eb6658 --- /dev/null +++ b/statistics/lecture/linear_regression.tex @@ -0,0 +1,454 @@ +\documentclass{beamer} +\usepackage{xcolor} +\usepackage{listings} +\usepackage{pgf} +%\usepackage{pgf,pgfarrows,pgfnodes,pgfautomata,pgfheaps,pgfshade} +%\usepackage{multimedia} + +\usepackage[english]{babel} +\usepackage{movie15} +\usepackage[latin1]{inputenc} +\usepackage{times} +\usepackage{amsmath} +\usepackage{bm} +\usepackage[T1]{fontenc} +\usepackage[scaled=.90]{helvet} +\usepackage{scalefnt} +\usepackage{tikz} +\usepackage{ textcomp } +\usepackage{soul} +\usepackage{hyperref} +\definecolor{lightblue}{rgb}{.7,.7,1.} +\definecolor{mygreen}{rgb}{0,1.,0} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\mode +{ + \usetheme{Singapore} + \setbeamercovered{opaque} + \usecolortheme{tuebingen} + \setbeamertemplate{navigation symbols}{} + \usefonttheme{default} + \useoutertheme{infolines} + % \useoutertheme{miniframes} +} + +\AtBeginSection[] +{ + \begin{frame} + \begin{center} + \Huge \insertsectionhead + \end{center} + % \frametitle{\insertsectionhead} + % \tableofcontents[currentsection,hideothersubsections] + \end{frame} +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 + +\setbeamertemplate{blocks}[rounded][shadow=true] + +\title[]{Scientific Computing -- Statistik} +\author[]{Jan Grewe, Fabian Sinz\\Abteilung f\"ur Neuroethologie\\ + Universit\"at T\"ubingen} + +\institute[Wissenschaftliche Datenverarbeitung]{} + \date{12.10.2015 - 06.11.2015} + %\logo{\pgfuseimage{../../resources/UT_BM_Rot_RGB.pdf}} + +\subject{Einf\"uhrung in die wissenschaftliche Datenverarbeitung} +\vspace{1em} +\titlegraphic{ + \includegraphics[width=0.5\linewidth]{../../resources/UT_WBMW_Rot_RGB} +} +%%%%%%%%%% configuration for code +\lstset{ + basicstyle=\ttfamily, + numbers=left, + showstringspaces=false, + language=Matlab, + commentstyle=\itshape\color{darkgray}, + keywordstyle=\color{blue}, + stringstyle=\color{green}, + backgroundcolor=\color{blue!10}, + breaklines=true, + breakautoindent=true, + columns=flexible, + frame=single, + captionpos=b, + xleftmargin=1em, + xrightmargin=1em, + aboveskip=10pt + } +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\mycite}[1]{ +\begin{flushright} +\tiny \color{black!80} #1 +\end{flushright} +} + +\newcommand{\code}[1]{\texttt{#1}} + +\input{../../latex/environments.tex} +\makeatother + +\begin{document} + +\begin{frame}[plain] + \frametitle{} + \vspace{-1cm} + \titlepage % erzeugt Titelseite +\end{frame} + +\begin{frame}[plain] + \huge{Curve Fitting/Optimierung mit dem Gradientenabstiegsverfahren} +\end{frame} + +\begin{frame} + \frametitle{Fitting und Optimierung} + \framesubtitle{\"Ubersicht} + \begin{enumerate} + \item Das Problem: Wir haben beobachtete Daten und ein Modell, das die Daten erkl\"aren soll. + \item Wie finden wir die Parameter (des Modells), die die Daten am Besten erkl\"aren? + \item L\"osung: Anpassen der Parameter an die Daten (Fitting). + \item Wie macht man das? + \end{enumerate} +\end{frame} + +\begin{frame} + \frametitle{Fitting und Optimierung} + \framesubtitle{Ein 1-D Beispiel} + \begin{columns} + \begin{column}{6.25cm} + \begin{figure} + \includegraphics[width=1.\columnwidth]{one_d_problem_a.pdf} + \end{figure} + \end{column} + \begin{column}{6.5cm} + \begin{itemize} + \item z.B. eine Reihe Me{\ss}werte bei einer Bedingung. + \item Ich suche den y-Wert, der die Daten am besten + repr\"asentiert. + \item F\"ur jeden m\"oglichen y-Wert wird die mittlere + quadratische Abweichung zu allen Daten berechnet:\\ + \[ error = \frac{1}{N}\sum_{i=1}^{N}(y_i - y_{test})^2 \] + \end{itemize} + \end{column} + \end{columns}\pause + Wie finde ich den besten Wert heraus? +\end{frame} + +\begin{frame} + \frametitle{Fitting und Optimierung} + \framesubtitle{Ein 1-D Beispiel} + \only<1> { + \begin{columns} + \begin{column}{4.5cm} + \begin{figure} + \includegraphics[width=1.\columnwidth]{one_d_problem_b.pdf} + \end{figure} + \end{column} + \begin{column}{8cm} + \begin{itemize} + \item Man folgt dem Gradienten! + \item Der Gradient kann numerisch berechnet werden indem man ein + (sehr kleines) ``Steigungsdreieck'' an den Positionen anlegt.\\ \vspace{0.25cm} + $\frac{\Delta error}{\Delta y} = \frac{error(y+h) - error(y)}{h}$ + \end{itemize} + \end{column} + \end{columns} + } + \only<2>{ + \begin{columns} + \begin{column}{4.5cm} + \begin{figure} + \includegraphics[width=1.\columnwidth]{one_d_problem_c.pdf} + \end{figure} + \end{column} + \begin{column}{8cm} + \begin{itemize} + \item Man folgt dem Gradienten! + \item Der Gradient kann numerisch berechnet werden indem man ein + (sehr kleines) ``Steigungsdreieck'' an den Positionen anlegt.\\ \vspace{0.25cm} + $\frac{\Delta error}{\Delta y} = \frac{error(y+h) - error(y)}{h}$ + \item Da, wo der Gradient seine Nullstelle hat, liegt der beste y-Wert. + \end{itemize} + \end{column} + \end{columns} + } +\end{frame} + +\begin{frame} + \frametitle{Fitting und Optimierung} + \framesubtitle{Lineare Regression} + \only<1-2> { + \begin{figure} + \includegraphics[width=0.45\columnwidth]{lin_regress.pdf} + \end{figure} + } + \only<2>{ + Nehmen wir mal einen linearen Zusammenhang zwischen \textit{Input} + und \textit{Output} an. ($y = m\cdot x + n$) + } + \only<3> { + Ver\"anderung der Steigung: + \begin{figure} + \includegraphics[width=0.45\columnwidth]{lin_regress_slope.pdf} + \end{figure} + } + \only<4> { + Ver\"anderung des y-Achsenabschnitts: + \begin{figure} + \includegraphics[width=0.45\columnwidth]{lin_regress_abscissa.pdf} + \end{figure} + } +\end{frame} + +\begin{frame} + \frametitle{Fitting und Optimierung} + \framesubtitle{Lineare Regresssion} + + \huge{Welche Kombination ist die richtige?} +\end{frame} + +\begin{frame} + \frametitle{Fitting und Optimierung} + \framesubtitle{Lineare Regression - Methode der kleinsten quadratischen Abweichung} + \begin{columns} + \begin{column}{4.5cm} + \begin{figure} + \includegraphics[width=\columnwidth]{linear_least_squares.pdf} + \end{figure} + \footnotesize{\url{http://en.wikipedia.org/wiki/Linear_least_squares_(mathematics)}} + \end{column} + \begin{column}{7cm} + \begin{enumerate} + \item Die am h\"aufigstern Angewandte Methode ist die der + kleinsten quadratischen Abweichungen. + \item Es wird versucht die Summe der quadratischen Abweichung zu + minimieren. + \end{enumerate} + \[g(m,n) = \frac{1}{N}\sum^{N}_{1=1} \left( y_i - f_{m, n}(x_i)\right )^2\] + \end{column} + \end{columns} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Fitting und Optimierung} + \framesubtitle{Lineare Regression - Methode der kleinsten quadratischen Abweichun} + \begin{itemize} + \item Was heisst das: Minimieren der Summe der kleinsten + quadratischen Abweichungen? + \item Kann man einen Algortihmus zur L\"osung des Problems + erstellen? + \item Kann man das visualisieren? + \end{itemize}\pause + \begin{columns} + \begin{column}{5.5cm} + \tiny + \begin{lstlisting} + x_range = linspace(-1, 1, 20); + y_range = linspace(-5, 5, 20); + + [X, Y] = meshgrid(x_range, y_range); + Z = X.^2 + Y.^2; + surf(X, Y, Z); + colormap('autumn') + xlabel('x') + ylabel('y') + zlabel('z') + \end{lstlisting} + \end{column} + \begin{column}{5.5cm} + \begin{figure} + \includegraphics[width=0.9\columnwidth]{surface.pdf} + \end{figure} + \end{column} + \end{columns} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Fitting und Optimierung} + \framesubtitle{Lineare Regression - Methode der kleinsten quadratischen Abweichung} + \textbf{Aufgabe} + \begin{enumerate} + \item Ladet den Datensatz \textit{lin\_regression.mat} in den + Workspace. Wie sehen die Daten aus? + \item Schreibt eine Funktion \code{lsq\_error}, die den Fehler + brechnet: + \begin{itemize} + \item \"Ubernimmt einen 2-elementigen Vektor, der die Parameter + \code{m} und \code{n} enth\"alt, die x-Werte und y-Werte. + \item Die Funktion gibt den Fehler zur\"uck. + \end{itemize} + \item Schreibt ein Skript dass den Fehler in Abh\"angigkeit von + \code{m} und \code{n} als surface plot darstellt (\code{surf} + Funktion). + \item Wie k\"onnen wir diesen Plot benutzen um die beste Kombination + zu finden? + \item Wo lieft die beste Kombination? + \end{enumerate} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Fitting und Optimierung} + \framesubtitle{Lineare Regression - Methode der kleinsten quadratischen Abweichung} + \begin{itemize} + \item Wie findet man die Extrempunkte in einer Kurve?\pause + \item Ableitung der Funktion auf Null setzen und nach x aufl\"osen. + \item Definition der Ableitung:\\ \vspace{0.25cm} + \begin{center} + $ f'(x) = \lim\limits_{h \rightarrow 0} \frac{f(x + h) - f(x)}{h} $ + \vspace{0.25cm}\pause + \end{center} + \item Bei zwei Parametern $g(m,n)$ k\"onnen wie die partielle + Ableitung bez\"uglich eines Parameters benutzen um die + Ver\"anderung des Fehlers bei Ver\"anderung eines Parameters + auszuwerten. + \item Partielle Ableitung nach \code{m}?\\\pause + \vspace{0.25cm} + \begin{center} + $\frac{\partial g(m,n)}{\partial m} = \lim\limits_{h \rightarrow 0} \frac{g(m + h, n) - g(m,n)}{h}$ + \vspace{0.25cm} + \end{center} + \end{itemize} +\end{frame} + + +\begin{frame} + \frametitle{Fitting und Optimierung} + \framesubtitle{Lineare Regression - Gradientenabstieg} + \large{Der Gradient:} + \begin{center} + $\bigtriangledown g(m,n) = \left( \frac{\partial g(m,n)}{\partial m}, \frac{\partial g(m,n)}{\partial n}\right)$ + \end{center} + Ist der Vektor mit den partiellen Ableitungen nach \code{m} und + \code{n}. + + \pause Numerisch kann die Ableitung durch einen sehr kleinen Schritt + angen\"ahert werden. + \begin{center} + $\frac{\partial g(m,n)}{\partial m} = \lim\limits_{h \rightarrow + 0} \frac{g(m + h, n) - g(m,n)}{h} \approx \frac{g(m + h, n) - + g(m,n)}{h}$ + \end{center} + f\"ur sehr kleine Schritte \code{h}. +\end{frame} + + +\begin{frame} + \frametitle{Fitting und Optimierung} + \framesubtitle{Lineare Regression - Gradientenabstieg} + Plotten des Gradientenfeldes: + \begin{itemize} + \item Ladet die Daten in \code{lin\_regession.mat}. + \item Schreibt eine Funktion \code{lsq\_gradient.m} in dem gleichen + Muster wie \code{lsq\_error.m}. Die Funktion berechnet + den Gradienten an einer Position (Kombination von Parametern), + wenn ein kleiner Schritt gemacht wird (\code{h=1e-6;}). + \item Variiert \code{m} im Bereich von -2 bis +5 und \code{n} im + Bereich -10 bis 10. + \item Plottet die Fehlerfl\"ache als \code{surface} und + \code{contour} plot in die gleiche Abbildung. + \item F\"ugt die Gradienten als \code{quiver} plot hinzu. + \item Was sagen die Pfeile? Wie passen Pfeile und Fl\"ache zusammen? + \end{itemize} +\end{frame} + + +\begin{frame} + \frametitle{Fitting und Optimierung} + \framesubtitle{Lineare Regression - Gradientenabstieg} + \begin{itemize} + \item Der Gradient zeigt in die Richtung des gr\"o{\ss}ten \textbf{Anstiegs}. \pause + \item Wie kann der Gradient nun dazu genutzt werden zum Minimum zu kommen?\pause + \item \textbf{Man nehme: $-\bigtriangledown g(m,n)$!}\pause + \vspace{0.25cm} + \item Wir haben jetzt alle Zutaten um den Gradientenabstieg zu formulieren. + \end{itemize} +\end{frame} + + +\begin{frame} + \frametitle{Fitting und Optimierung} + \framesubtitle{Gradientenabstieg - Algorithums} + \begin{enumerate} + \item Starte mit einer beliebigen Parameterkombination $p_0 = (m_0, + n_0)$. + \item Wiederhole solange wie die der Gradient \"uber einer + bestimmten Schwelle ist: + \begin{itemize} + \item Berechne den Gradienten an der akutellen Position $p_t$. + \item Gehe einen kleinen Schritt in die entgegensetzte Richtung des + Gradienten:\\ + \begin{center} + $p_{t+1} = p_t - \epsilon \cdot \bigtriangledown g(m_t, n_t)$ + \end{center} + wobei $\epsilon$ eine kleine Zahl (0.01) ist. + \end{itemize} + \end{enumerate} +\end{frame} + + +\begin{frame} + \frametitle{Fitting und Optimierung} + \framesubtitle{Gradientenabstieg - \"Ubung} + \begin{enumerate} + \item Implementiert den Grandientenabstieg f\"ur das Fitten der + linearen Geradengleichung an die Daten. + \item Plottet f\"ur jeden Schritt den surface plot und die aktuelle + Position als roten Punkt (nutzt \code{plot3}). + \item Plottet f\"ur jeden Schritt den Fit in einen separaten plot. + \item Nutzt \code{pause(0.1)} nach jedem Schritt um die Entwicklung + des Fits zu beobachten. + \end{enumerate} +\end{frame} + + +\begin{frame} + \frametitle{Fitting und Optimierung} + \framesubtitle{Gradientenabstieg - \"Ubung II} + \begin{columns} + \begin{column}{6cm} + \begin{figure} + \includegraphics[width=1\columnwidth]{charging_curve.pdf} + \end{figure} + \end{column} + \begin{column}{7cm} + \begin{itemize} + \item Ladet die Daten aus der \code{membraneVoltage.mat}. + \item Plottet die Rohdaten. + \item Fittet folgende Funktion an die Daten:\\ + \begin{center} + $f_{A,\tau}(t) = A \cdot \left(1 - e^{-\frac{t}{\tau}}\right )$ + \end{center} + \item An welcher Stelle muss der Code von oben ver\"andert + werden? + \item Plottet die Daten zusammen mit dem Fit. + \end{itemize} + \end{column} + \end{columns} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Fitting und Optimierung} + \framesubtitle{Fitting mit Matlab} + \begin{itemize} + \item Es gibt mehrere Funktionen in Matlab, die eine Optimierung + automatisch durchf\"uhren. + \item z.B. \code{fminunc, lsqcurvefit, fminsearch, lsqnonlin, ...} + \item Einige der Funktionen stecken allerdings in der + \textit{Optimization Toolbox}, die nicht zum Standard Matlab + geh\"ort. + \end{itemize} + \begin{lstlisting} + function param = estimated_regression(x, y, start_parameter) + objective_function = @(p)(lsq_error(p, x, y)); + param = fminunc(objective_function, start_parameter) + \end{lstlisting} +\end{frame} + +\end{document} \ No newline at end of file diff --git a/statistics/lecture/one_d_problem_a.pdf b/statistics/lecture/one_d_problem_a.pdf new file mode 100644 index 0000000..90b256b Binary files /dev/null and b/statistics/lecture/one_d_problem_a.pdf differ diff --git a/statistics/lecture/one_d_problem_b.pdf b/statistics/lecture/one_d_problem_b.pdf new file mode 100644 index 0000000..800d869 Binary files /dev/null and b/statistics/lecture/one_d_problem_b.pdf differ diff --git a/statistics/lecture/one_d_problem_c.pdf b/statistics/lecture/one_d_problem_c.pdf new file mode 100644 index 0000000..31974db Binary files /dev/null and b/statistics/lecture/one_d_problem_c.pdf differ diff --git a/statistics/lecture/surface.pdf b/statistics/lecture/surface.pdf new file mode 100644 index 0000000..2702a1d Binary files /dev/null and b/statistics/lecture/surface.pdf differ