From 657192ab58149c4566a661b6b2d1d727f86a1f2b Mon Sep 17 00:00:00 2001 From: Jan Benda Date: Sun, 6 Jan 2019 23:23:42 +0100 Subject: [PATCH] [linalg] added exercise sheet --- linearalgebra/code/spikesortingwave.m | 22 ++ linearalgebra/exercises/Makefile | 34 ++++ linearalgebra/exercises/UT_WBMW_Black_RGB.pdf | Bin 0 -> 31288 bytes linearalgebra/exercises/exercises01.tex | 192 ++++++++++++++++++ linearalgebra/exercises/instructions.tex | 6 + 5 files changed, 254 insertions(+) create mode 100644 linearalgebra/exercises/Makefile create mode 100644 linearalgebra/exercises/UT_WBMW_Black_RGB.pdf create mode 100644 linearalgebra/exercises/exercises01.tex create mode 100644 linearalgebra/exercises/instructions.tex diff --git a/linearalgebra/code/spikesortingwave.m b/linearalgebra/code/spikesortingwave.m index d833ad2..ce2ebec 100644 --- a/linearalgebra/code/spikesortingwave.m +++ b/linearalgebra/code/spikesortingwave.m @@ -117,4 +117,26 @@ hold on; scatter( time(tinx(kinx1)), voltage(tinx(kinx1)), 10.0, 'r', 'filled' ); scatter( time(tinx(kinx2)), voltage(tinx(kinx2)), 10.0, 'g', 'filled' ); hold off; + +% ISIs: +figure(4); +clf; +subplot(1, 3, 1) +allisis = diff(spiketimes); +hist(allisis, 20); +title('all spikes') +xlabel('ISI [ms]') +subplot(1, 3, 2) +spikes1 = time(tinx(kinx1)); +isis1 = diff(spikes1); +hist(isis1, 20); +title('neuron 1') +xlabel('ISI [ms]') +subplot(1, 3, 3) +spikes2 = time(tinx(kinx2)); +isis2 = diff(spikes2); +hist(isis2, 20); +title('neuron 2') +xlabel('ISI [ms]') pause + diff --git a/linearalgebra/exercises/Makefile b/linearalgebra/exercises/Makefile new file mode 100644 index 0000000..27691d9 --- /dev/null +++ b/linearalgebra/exercises/Makefile @@ -0,0 +1,34 @@ +TEXFILES=$(wildcard exercises??.tex) +EXERCISES=$(TEXFILES:.tex=.pdf) +SOLUTIONS=$(EXERCISES:exercises%=solutions%) + +.PHONY: pdf exercises solutions watch watchexercises watchsolutions clean + +pdf : $(SOLUTIONS) $(EXERCISES) + +exercises : $(EXERCISES) + +solutions : $(SOLUTIONS) + +$(SOLUTIONS) : solutions%.pdf : exercises%.tex instructions.tex + { echo "\\documentclass[answers,12pt,a4paper,pdftex]{exam}"; sed -e '1d' $<; } > $(patsubst %.pdf,%.tex,$@) + pdflatex -interaction=scrollmode $(patsubst %.pdf,%.tex,$@) | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $(patsubst %.pdf,%.tex,$@) || true + rm $(patsubst %.pdf,%,$@).[!p]* + +$(EXERCISES) : %.pdf : %.tex instructions.tex + pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true + +watch : + while true; do ! make -q pdf && make pdf; sleep 0.5; done + +watchexercises : + while true; do ! make -q exercises && make exercises; sleep 0.5; done + +watchsolutions : + while true; do ! make -q solutions && make solutions; sleep 0.5; done + +clean : + rm -f *~ *.aux *.log *.out + +cleanup : clean + rm -f $(SOLUTIONS) $(EXERCISES) diff --git a/linearalgebra/exercises/UT_WBMW_Black_RGB.pdf b/linearalgebra/exercises/UT_WBMW_Black_RGB.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9aed92162b1d4345d994cfd0b8d70be762fbec97 GIT binary patch literal 31288 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 E0Y45+F8}}l literal 0 HcmV?d00001 diff --git a/linearalgebra/exercises/exercises01.tex b/linearalgebra/exercises/exercises01.tex new file mode 100644 index 0000000..80433df --- /dev/null +++ b/linearalgebra/exercises/exercises01.tex @@ -0,0 +1,192 @@ +\documentclass[12pt,a4paper,pdftex]{exam} + +\usepackage[english]{babel} +\usepackage{pslatex} +\usepackage[mediumspace,mediumqspace,Gray]{SIunits} % \ohm, \micro +\usepackage{xcolor} +\usepackage{graphicx} +\usepackage[breaklinks=true,bookmarks=true,bookmarksopen=true,pdfpagemode=UseNone,pdfstartview=FitH,colorlinks=true,citecolor=blue]{hyperref} + +%%%%% layout %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\usepackage[left=20mm,right=20mm,top=25mm,bottom=25mm]{geometry} +\pagestyle{headandfoot} +\ifprintanswers +\newcommand{\stitle}{: Solutions} +\else +\newcommand{\stitle}{} +\fi +\header{{\bfseries\large Exercise\stitle}}{{\bfseries\large PCA}}{{\bfseries\large January 7th, 2019}} +\firstpagefooter{Prof. Dr. Jan Benda}{Phone: 29 74573}{Email: +jan.benda@uni-tuebingen.de} +\runningfooter{}{\thepage}{} + +\setlength{\baselineskip}{15pt} +\setlength{\parindent}{0.0cm} +\setlength{\parskip}{0.3cm} +\renewcommand{\baselinestretch}{1.15} + +%%%%% listings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\usepackage{listings} +\lstset{ + language=Matlab, + basicstyle=\ttfamily\footnotesize, + numbers=left, + numberstyle=\tiny, + title=\lstname, + showstringspaces=false, + commentstyle=\itshape\color{darkgray}, + breaklines=true, + breakautoindent=true, + columns=flexible, + frame=single, + xleftmargin=1em, + xrightmargin=1em, + aboveskip=10pt +} + +%%%%% math stuff: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage{bm} +\usepackage{dsfont} +\newcommand{\naZ}{\mathds{N}} +\newcommand{\gaZ}{\mathds{Z}} +\newcommand{\raZ}{\mathds{Q}} +\newcommand{\reZ}{\mathds{R}} +\newcommand{\reZp}{\mathds{R^+}} +\newcommand{\reZpN}{\mathds{R^+_0}} +\newcommand{\koZ}{\mathds{C}} + +%%%%% page breaks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\continue}{\ifprintanswers% +\else +\vfill\hspace*{\fill}$\rightarrow$\newpage% +\fi} +\newcommand{\continuepage}{\ifprintanswers% +\newpage +\else +\vfill\hspace*{\fill}$\rightarrow$\newpage% +\fi} +\newcommand{\newsolutionpage}{\ifprintanswers% +\newpage% +\else +\fi} + +%%%%% new commands %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\qt}[1]{\textbf{#1}\\} +\newcommand{\pref}[1]{(\ref{#1})} +\newcommand{\extra}{--- Zusatzaufgabe ---\ \mbox{}} +\newcommand{\code}[1]{\texttt{#1}} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{document} + +\input{instructions} + +\begin{questions} + + \question \qt{Covariance and correlation coefficient\vspace{-3ex}} + \begin{parts} + \part Generate two vectors $x$ and $z$ with $n=1000$ Gausian distributed random numbers. + \part Compute $y$ as a linear combination of $x$ and $z$ according to + \[ y = r \cdot x + \sqrt{1-r^2}\cdot z \] + where $r$ is a parameter $-1 \le r \le 1$. + What does $r$ do? + \part Plot a scatter plot of $y$ versus $x$ for about 10 different values of $r$. + What do you observe? + \part Also compute the covariance matrix and the correlation + coefficient matrix between $x$ and $y$ (functions \texttt{cov} and + \texttt{corrcoef}). How do these matrices look like for different + values of $r$? How do the values of the matrices change if you generate + $x$ and $z$ with larger variances? + \part Do the same analysis (scatter plot, covariance, and correlation coefficient) + for \[ y = x^2 + 0.5 \cdot z \] + Are $x$ and $y$ really independent? + \end{parts} + + \question \qt{Principal component analysis in 2D\vspace{-3ex}} + \begin{parts} + \part Generate pairs $(x,y)$ of Gaussian distributed random numbers such + that all $x$ values have zero mean, half of the $y$ values have mean $+d$ + and the other half mean $-d$, with $d \ge0$. + \part Plot scatter plots of the pairs $(x,y)$ for $d=0$, 1, 2, 3, 4 and 5. + Also plot a histogram of the $x$ values. + \part Apply PCA on the data and plot a histogram of the data projected onto + the PCA axis with the largest eigenvalue. + What do you observe? + \end{parts} + + \question \qt{Principal component analysis in 3D\vspace{-3ex}} + \begin{parts} + \part Generate triplets $(x,y,z)$ of Gaussian distributed random numbers such + that all $x$ values have zero mean, half of the $y$ and $z$ values have mean $+d$ + and the other half mean $-d$, with $d \ge0$. + \part Plot 3D scatter plots of the pairs $(x,y)$ for $d=0$, 1, 2, 3, 4 and 5. + Also plot a histogram of the $x$ values. + \part Apply PCA on the data and plot a histogram of the data projected onto + the PCA axis with the largest eigenvalue. + What do you observe? + \end{parts} + + \continue + \question \qt{Spike sorting} + Extracellular recordings often pick up action potentials originating + from more than a single neuron. In case the waveforms of the action + potentials differ between the neurons one could assign each action + potential to the neuron it originated from. This process is called + ``spike sorting''. Here we explore this methods on a simulated + recording that contains action potentials from two different + neurons. + \begin{parts} + \part Load the data from the file \texttt{extdata.mat}. This file + contains the voltage trace of the recording (\texttt{voltage}), + the corresponding time vector in seconds (\texttt{time}), and a + vector containing the times of the peaks of detected action + potentials (\texttt{spiketimes}). Further, and in contrast to real + data, the waveforms of the actionpotentials of the two neurons + (\texttt{waveform1} and \texttt{waveform2}) and the corresponding + time vector (\texttt{waveformt}) are also contained in the file. + + \part Plot the voltage trace and mark the peaks of the detected + action potentials. Zoom into the plot and look whether you can + differentiate between two different waveforms of action + potentials. How do they differ? + + \part Cut out the waveform of each action potential (5\,ms before + and after the peak). Plot all these snippets in a single + plot. Can you differentiate the two actionpotential waveforms? + + \part Apply PCA on the waveform snippets, that is compute the + eigenvalues and eigenvectors of their covariance matrix, and plot + the sorted eigenvalues (the ``eigenvalue spectrum''). How many + eigenvalues are clearly larger than zero? + + \part Plot the two eigenvectors (``features'') with the two + largest eigenvalues. + + \part Project the waveform snippets onto these two eigenvectors + and display them with a scatter plot. What do you observe? Can you + separate two ``clouds'' of data points (``clusters'')? + + \part Think about a very simply way how to separate the two + clusters. Generate a vector whose elements label the action + potentials, e.g. that contains '1' for all snippets belonging to + the one cluster and '2' for the waveforms of the other + cluster. Use this vector to mark the two clusters in the previous + plot with two different colors. + + \part Plot the waveform snippets of each cluster together with the + true waveform obtained from the data file. Do they match? + + \part Mark the action potentials in the recording according to + their cluster identity. + + \part Compute interspike-interval histograms of all the (unsorted) + action potentials, and of each of the two neurons. What do they + tell you? + \end{parts} + +\end{questions} + +\end{document} \ No newline at end of file diff --git a/linearalgebra/exercises/instructions.tex b/linearalgebra/exercises/instructions.tex new file mode 100644 index 0000000..3041d3e --- /dev/null +++ b/linearalgebra/exercises/instructions.tex @@ -0,0 +1,6 @@ +\vspace*{-7.8ex} +\begin{center} +\textbf{\Large Introduction to Scientific Computing}\\[2.3ex] +{\large Jan Grewe, Jan Benda}\\[-3ex] +Neuroethology Lab \hfill --- \hfill Institute for Neurobiology \hfill --- \hfill \includegraphics[width=0.28\textwidth]{UT_WBMW_Black_RGB} \\ +\end{center}