new files
This commit is contained in:
parent
b53411fdda
commit
6be1184d8e
127
programming/exercises/boolean_expressions.m
Normal file
127
programming/exercises/boolean_expressions.m
Normal file
@ -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))
|
||||
|
190
programming/exercises/control_structures.m
Normal file
190
programming/exercises/control_structures.m
Normal file
@ -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
|
||||
|
98
statistics/exercises/fitting.tex
Normal file
98
statistics/exercises/fitting.tex
Normal file
@ -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}
|
BIN
statistics/lecture/charging_curve.pdf
Normal file
BIN
statistics/lecture/charging_curve.pdf
Normal file
Binary file not shown.
BIN
statistics/lecture/lin_regress.pdf
Normal file
BIN
statistics/lecture/lin_regress.pdf
Normal file
Binary file not shown.
BIN
statistics/lecture/lin_regress_abscissa.pdf
Normal file
BIN
statistics/lecture/lin_regress_abscissa.pdf
Normal file
Binary file not shown.
BIN
statistics/lecture/lin_regress_slope.pdf
Normal file
BIN
statistics/lecture/lin_regress_slope.pdf
Normal file
Binary file not shown.
BIN
statistics/lecture/linear_least_squares.pdf
Normal file
BIN
statistics/lecture/linear_least_squares.pdf
Normal file
Binary file not shown.
454
statistics/lecture/linear_regression.tex
Normal file
454
statistics/lecture/linear_regression.tex
Normal file
@ -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<presentation>
|
||||
{
|
||||
\usetheme{Singapore}
|
||||
\setbeamercovered{opaque}
|
||||
\usecolortheme{tuebingen}
|
||||
\setbeamertemplate{navigation symbols}{}
|
||||
\usefonttheme{default}
|
||||
\useoutertheme{infolines}
|
||||
% \useoutertheme{miniframes}
|
||||
}
|
||||
|
||||
\AtBeginSection[]
|
||||
{
|
||||
\begin{frame}<beamer>
|
||||
\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}
|
BIN
statistics/lecture/one_d_problem_a.pdf
Normal file
BIN
statistics/lecture/one_d_problem_a.pdf
Normal file
Binary file not shown.
BIN
statistics/lecture/one_d_problem_b.pdf
Normal file
BIN
statistics/lecture/one_d_problem_b.pdf
Normal file
Binary file not shown.
BIN
statistics/lecture/one_d_problem_c.pdf
Normal file
BIN
statistics/lecture/one_d_problem_c.pdf
Normal file
Binary file not shown.
BIN
statistics/lecture/surface.pdf
Normal file
BIN
statistics/lecture/surface.pdf
Normal file
Binary file not shown.
Reference in New Issue
Block a user