[regression] expandend exercise according to feedback from Alex

This commit is contained in:
Jan Benda 2020-12-23 18:48:59 +01:00
parent 5a6cca59d3
commit a63dd2f2fe
7 changed files with 82 additions and 13 deletions

View File

@ -23,12 +23,3 @@ function [tau, taus, mses] = expdecaydescent(t, x, tau0, epsilon, threshold)
count = count + 1;
end
end
function mse = expdecaymse(t, x, tau)
mse = mean((x - expdecay(t, tau)).^2);
end
function gradient = expdecaygradient(t, x, tau)
h = 1e-7; % stepsize for derivative
gradient = (expdecaymse(t, x, tau+h) - expdecaymse(t, x, tau))/h;
end

View File

@ -0,0 +1,11 @@
function gradient = expdecaygradient(t, x, tau)
% Gradient of MSE for a decaying exponential.
%
% Arguments: t, vector of time points.
% x, vector of the corresponding measured data values.
% tau, value for the time constant.
%
% Returns: gradient: the derivative of the MSE with respect to tau.
h = 1e-7; % stepsize for derivative
gradient = (expdecaymse(t, x, tau+h) - expdecaymse(t, x, tau))/h;
end

View File

@ -0,0 +1,15 @@
...
gradients = zeros(length(taus), 1);
for i = 1:length(taus)
gradients(i) = expdecaygradient(time, voltage, taus(i));
end
subplot(2, 1, 2)
plot(taus, gradients);
xlabel('tau [ms]')
ylabel('gradient [mV^2/ms]')
savefigpdf(gcf, 'expdecaygradientplot.pdf', 10, 10);

View File

@ -0,0 +1,10 @@
function mse = expdecaymse(t, x, tau)
% Mean squared error for a decaying exponential.
%
% Arguments: t, vector of time points.
% x, vector of the corresponding measured data values.
% tau, value for the time constant.
%
% Returns: mse: mean squared error
mse = mean((x - expdecay(t, tau)).^2);
end

View File

@ -0,0 +1,13 @@
expdecaydata; % generate data
close all;
taus = 0.0:0.1:20.0;
mses = zeros(length(taus), 1);
for i = 1:length(taus)
mses(i) = expdecaymse(time, voltage, taus(i));
end
subplot(2, 1, 1)
plot(taus, mses);
xlabel('tau [ms]')
ylabel('mean squared error [mV^2]')

View File

@ -11,7 +11,7 @@ plot(taus, '-o');
plot([1, length(taus)], [tau, tau], 'k'); % line indicating true tau
hold off;
xlabel('Iteration');
ylabel('tau');
ylabel('tau [ms]');
subplot(2, 2, 3); % bottom left panel
plot(mses, '-o');
xlabel('Iteration steps');

View File

@ -56,6 +56,29 @@
\lstinputlisting{expdecaydata.m}
\end{solution}
\part Write a function that returns the mean squared error. The
function takes as arguments the measured data (time points and
corresponding voltage measurements) and a value for the membrane
time constant at which the mean squred error should be
evaluated. Plot the mean squared error as a function of $\tau$.
\begin{solution}
\lstinputlisting{expdecaymse.m}
\lstinputlisting{expdecaymseplot.m}
\end{solution}
\part Write a function that returns the gradient of the mean
squared error, i.e. its derivative with respect to the $\tau$
parameter. The function takes as arguments the measured data
(time points and corresponding voltage measurements) and a value
for the membrane time constant at which the gradient should be
evaluated. Plot the gradient as a function of $\tau$.
\begin{solution}
\lstinputlisting{expdecaygradient.m}
\newsolutionpage
\lstinputlisting{expdecaygradientplot.m}
\includegraphics{expdecaygradientplot}
\end{solution}
\part Implement the gradient descent algorithm for finding the
least squares for the exponential function \eqref{expfunc}. The
function takes as arguments the measured data, an initial value
@ -78,7 +101,6 @@
for each iteration step, (ii) the mean squared error for each
iteration step, and (iii) the measured data and the fitted
exponential function.
\newsolutionpage
\begin{solution}
\lstinputlisting{expdecayplot.m}
\includegraphics{expdecayplot}
@ -140,9 +162,16 @@
\part Plot the path of the gradient descent algorithm into the
error surface.
Why appears (potentially) the path of the gradient descent
algorithm not perpendicular to the contour lines of the error
Why does (potentially) the path of the gradient descent algorithm
appear to be not perpendicular to the contour lines of the error
surface?
\begin{solution}
Because on the plot the $c$ and $\tau$ axes are (in general) not
equally scaled. That is a unit step in $c$ direction covers a
physical distance on paper or the screen than a unit stpe in
$\tau$ direction. Use \code{axis equal} to force the plot to
have equally scaled $c$ and $\tau$ axes.
\end{solution}
\part Plot the data together with the fitted exponential function.