From f5b9eb32a26d34cf37cd92f11df41a01da17a3df Mon Sep 17 00:00:00 2001 From: mhjensen Date: Thu, 6 Sep 2018 11:28:45 +0200 Subject: [PATCH] update on regression analysis --- .../Regression/html/._Regression-bs000.html | 155 +- .../Regression/html/._Regression-bs001.html | 153 +- .../Regression/html/._Regression-bs002.html | 179 +- .../Regression/html/._Regression-bs003.html | 172 +- .../Regression/html/._Regression-bs004.html | 192 +- .../Regression/html/._Regression-bs005.html | 195 +- .../Regression/html/._Regression-bs006.html | 180 +- .../Regression/html/._Regression-bs007.html | 181 +- .../Regression/html/._Regression-bs008.html | 177 +- .../Regression/html/._Regression-bs009.html | 182 +- .../Regression/html/._Regression-bs010.html | 178 +- .../Regression/html/._Regression-bs011.html | 167 +- .../Regression/html/._Regression-bs012.html | 176 +- .../Regression/html/._Regression-bs013.html | 172 +- .../Regression/html/._Regression-bs014.html | 167 +- .../Regression/html/._Regression-bs015.html | 170 +- .../Regression/html/._Regression-bs016.html | 172 +- .../Regression/html/._Regression-bs017.html | 187 +- .../Regression/html/._Regression-bs018.html | 224 +- .../Regression/html/._Regression-bs019.html | 178 +- .../Regression/html/._Regression-bs020.html | 206 +- .../Regression/html/._Regression-bs021.html | 221 +- .../Regression/html/._Regression-bs022.html | 176 +- .../Regression/html/._Regression-bs023.html | 176 +- .../Regression/html/._Regression-bs024.html | 184 +- .../Regression/html/._Regression-bs025.html | 202 +- .../Regression/html/._Regression-bs026.html | 204 +- .../Regression/html/._Regression-bs027.html | 199 +- .../Regression/html/._Regression-bs028.html | 178 +- .../Regression/html/._Regression-bs029.html | 187 +- .../Regression/html/._Regression-bs030.html | 212 +- .../Regression/html/._Regression-bs031.html | 226 +- .../Regression/html/._Regression-bs032.html | 185 +- .../Regression/html/._Regression-bs033.html | 204 +- .../Regression/html/._Regression-bs034.html | 258 +- .../Regression/html/._Regression-bs035.html | 180 +- .../Regression/html/._Regression-bs036.html | 236 +- .../Regression/html/._Regression-bs037.html | 207 +- .../Regression/html/._Regression-bs038.html | 307 +++ .../Regression/html/._Regression-bs039.html | 392 +++ .../Regression/html/._Regression-bs040.html | 304 +++ .../Regression/html/._Regression-bs041.html | 291 +++ .../Regression/html/._Regression-bs042.html | 365 +++ .../Regression/html/._Regression-bs043.html | 327 +++ .../Regression/html/._Regression-bs044.html | 278 +++ .../Regression/html/._Regression-bs045.html | 275 +++ doc/pub/Regression/html/Regression-bs.html | 155 +- .../Regression/html/Regression-reveal.html | 656 ++++- .../Regression/html/Regression-solarized.html | 725 ++++-- doc/pub/Regression/html/Regression.html | 725 ++++-- doc/pub/Regression/ipynb/Regression.ipynb | 916 ++++--- .../ipynb/ipynb-Regression-src.tar.gz | Bin 211 -> 211 bytes .../pdf/Regression-beamer-handouts2x3.pdf | Bin 345650 -> 389595 bytes doc/pub/Regression/pdf/Regression-beamer.pdf | Bin 324702 -> 351781 bytes doc/pub/Regression/pdf/Regression-minted.pdf | Bin 341147 -> 391306 bytes doc/src/Regression/Regression.do.txt | 2135 ++--------------- 56 files changed, 9374 insertions(+), 5675 deletions(-) create mode 100644 doc/pub/Regression/html/._Regression-bs038.html create mode 100644 doc/pub/Regression/html/._Regression-bs039.html create mode 100644 doc/pub/Regression/html/._Regression-bs040.html create mode 100644 doc/pub/Regression/html/._Regression-bs041.html create mode 100644 doc/pub/Regression/html/._Regression-bs042.html create mode 100644 doc/pub/Regression/html/._Regression-bs043.html create mode 100644 doc/pub/Regression/html/._Regression-bs044.html create mode 100644 doc/pub/Regression/html/._Regression-bs045.html diff --git a/doc/pub/Regression/html/._Regression-bs000.html b/doc/pub/Regression/html/._Regression-bs000.html index 9560a3323..c92c12f8a 100644 --- a/doc/pub/Regression/html/._Regression-bs000.html +++ b/doc/pub/Regression/html/._Regression-bs000.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -222,7 +251,7 @@ MathJax.Hub.Config({
[2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

-

Aug 24, 2018

+

Sep 6, 2018


@@ -246,7 +275,7 @@ MathJax.Hub.Config({

  • 9
  • 10
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs001.html b/doc/pub/Regression/html/._Regression-bs001.html index 33c014dc2..f1cdcf478 100644 --- a/doc/pub/Regression/html/._Regression-bs001.html +++ b/doc/pub/Regression/html/._Regression-bs001.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -243,7 +272,7 @@ A regression model aims at finding a likelihood function \( p(y\vert \hat{x}) \)
  • 10
  • 11
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs002.html b/doc/pub/Regression/html/._Regression-bs002.html index 25f3b7f34..523f9d68c 100644 --- a/doc/pub/Regression/html/._Regression-bs002.html +++ b/doc/pub/Regression/html/._Regression-bs002.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,19 +232,29 @@ MathJax.Hub.Config({ -

    General linear models

    +

    Regression analysis, overarching aims II

    -Before we proceed let us study a case from linear algebra where we aim at fitting a set of data \( \hat{y}=[y_0,y_1,\dots,y_{n-1}] \). We could think of these data as a result of an experiment or a complicated numerical experiment. These data are functions of a series of variables \( \hat{x}=[x_0,x_1,\dots,x_{n-1}] \), that is \( y_i = y(x_i) \) with \( i=0,1,2,\dots,n-1 \). The variables \( x_i \) could represent physical quantities like time, temperature, position etc. We assume that \( y(x) \) is a smooth function.

    -Since obtaining these data points may not be trivial, we want to use these data to fit a function which can allow us to make predictions for values of \( y \) which are not in the present set. The perhaps simplest approach is to assume we can parametrize our function in terms of a polynomial of degree \( n-1 \) with \( n \) points, that is -$$ -y=y(x) \rightarrow y(x_i)=\tilde{y}_i+\epsilon_i=\sum_{j=0}^{n-1} \beta_i x_i^j+\epsilon_i, -$$ - -where \( \epsilon_i \) is the error in our approximation. +Consider an experiment in which \( p \) characteristics of \( n \) samples are +measured. The data from this experiment are denoted \( \mathbf{X} \), with +\( \mathbf{X} \) as above. The matrix \( \mathbf{X} \) is called the design +matrix. Additional information of the samples is available in the +form of \( \mathbf{Y} \) (also as above). The variable \( \mathbf{Y} \) is +generally referred to as the response variable. The aim of +regression analysis is to explain \( \mathbf{Y} \) in terms of +\( \mathbf{X} \) through a functional relationship like \( Y_i = +f(\mathbf{X}_{i,\ast}) \). When no prior knowledge on the form of +\( f(\cdot) \) is available, it is common to assume a linear relationship +between \( \mathbf{X} \) and \( \mathbf{Y} \). This assumption gives rise to +the linear regression model where \( \beta = (\beta_1, \ldots, +\beta_p)^{\top} \) is the regression parameter. The parameter +\( \beta_j \), \( j=1, \ldots, p \), represents the effect size of covariate +\( j \) on the response. That is, for each unit change in covariate \( j \) +(while keeping the other covariates fixed) the observed change in the +response is equal to \( \beta_j \).

    @@ -240,7 +279,7 @@ where \( \epsilon_i \) is the error in our approximation.
  • 11
  • 12
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs003.html b/doc/pub/Regression/html/._Regression-bs003.html index 89470dd65..d18ec8f83 100644 --- a/doc/pub/Regression/html/._Regression-bs003.html +++ b/doc/pub/Regression/html/._Regression-bs003.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,20 +232,21 @@ MathJax.Hub.Config({ -

    Rewriting the fitting procedure as a linear algebra problem

    +

    General linear models

    -For every set of values \( y_i,x_i \) we have thus the corresponding set of equations +Before we proceed let us study a case from linear algebra where we aim at fitting a set of data \( \hat{y}=[y_0,y_1,\dots,y_{n-1}] \). We could think of these data as a result of an experiment or a complicated numerical experiment. These data are functions of a series of variables \( \hat{x}=[x_0,x_1,\dots,x_{n-1}] \), that is \( y_i = y(x_i) \) with \( i=0,1,2,\dots,n-1 \). The variables \( x_i \) could represent physical quantities like time, temperature, position etc. We assume that \( y(x) \) is a smooth function. + +

    +Since obtaining these data points may not be trivial, we want to use these data to fit a function which can allow us to make predictions for values of \( y \) which are not in the present set. The perhaps simplest approach is to assume we can parametrize our function in terms of a polynomial of degree \( n-1 \) with \( n \) points, that is $$ -\begin{align*} -y_0&=\beta_0+\beta_1x_0^1+\beta_2x_0^2+\dots+\beta_{n-1}x_0^{n-1}+\epsilon_0\\ -y_1&=\beta_0+\beta_1x_1^1+\beta_2x_1^2+\dots+\beta_{n-1}x_1^{n-1}+\epsilon_1\\ -y_2&=\beta_0+\beta_1x_2^1+\beta_2x_2^2+\dots+\beta_{n-1}x_2^{n-1}+\epsilon_2\\ -\dots & \dots \\ -y_{n-1}&=\beta_0+\beta_1x_{n-1}^1+\beta_2x_{n-1}^2+\dots+\beta_1x_{n-1}^{n-1}+\epsilon_{n-1}.\\ -\end{align*} +y=y(x) \rightarrow y(x_i)=\tilde{y}_i+\epsilon_i=\sum_{j=0}^{n-1} \beta_i x_i^j+\epsilon_i, $$ + +where \( \epsilon_i \) is the error in our approximation. + +

    @@ -240,7 +270,7 @@ $$
  • 12
  • 13
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs004.html b/doc/pub/Regression/html/._Regression-bs004.html index 2140156d2..643f337c1 100644 --- a/doc/pub/Regression/html/._Regression-bs004.html +++ b/doc/pub/Regression/html/._Regression-bs004.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,40 +232,19 @@ MathJax.Hub.Config({ -

    Rewriting the fitting procedure as a linear algebra problem, follows

    +

    Rewriting the fitting procedure as a linear algebra problem

    -Defining the vectors +For every set of values \( y_i,x_i \) we have thus the corresponding set of equations $$ -\hat{y} = [y_0,y_1, y_2,\dots, y_{n-1}]^T, -$$ - -and -$$ -\hat{\beta} = [\beta_0,\beta_1, \beta_2,\dots, \beta_{n-1}]^T, -$$ - -and -$$ -\hat{\epsilon} = [\epsilon_0,\epsilon_1, \epsilon_2,\dots, \epsilon_{n-1}]^T, -$$ - -and the matrix -$$ -\hat{X}= -\begin{bmatrix} -1& x_{0}^1 &x_{0}^2& \dots & \dots &x_{0}^{n-1}\\ -1& x_{1}^1 &x_{1}^2& \dots & \dots &x_{1}^{n-1}\\ -1& x_{2}^1 &x_{2}^2& \dots & \dots &x_{2}^{n-1}\\ -\dots& \dots &\dots& \dots & \dots &\dots\\ -1& x_{n-1}^1 &x_{n-1}^2& \dots & \dots &x_{n-1}^{n-1}\\ -\end{bmatrix} -$$ - -we can rewrite our equations as -$$ -\hat{y} = \hat{X}\hat{\beta}+\hat{\epsilon}. +\begin{align*} +y_0&=\beta_0+\beta_1x_0^1+\beta_2x_0^2+\dots+\beta_{n-1}x_0^{n-1}+\epsilon_0\\ +y_1&=\beta_0+\beta_1x_1^1+\beta_2x_1^2+\dots+\beta_{n-1}x_1^{n-1}+\epsilon_1\\ +y_2&=\beta_0+\beta_1x_2^1+\beta_2x_2^2+\dots+\beta_{n-1}x_2^{n-1}+\epsilon_2\\ +\dots & \dots \\ +y_{n-1}&=\beta_0+\beta_1x_{n-1}^1+\beta_2x_{n-1}^2+\dots+\beta_1x_{n-1}^{n-1}+\epsilon_{n-1}.\\ +\end{align*} $$

    @@ -262,7 +270,7 @@ $$
  • 13
  • 14
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs005.html b/doc/pub/Regression/html/._Regression-bs005.html index af0a02dcd..79e79e7b3 100644 --- a/doc/pub/Regression/html/._Regression-bs005.html +++ b/doc/pub/Regression/html/._Regression-bs005.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,22 +232,40 @@ MathJax.Hub.Config({ -

    Generalizing the fitting procedure as a linear algebra problem

    +

    Rewriting the fitting procedure as a linear algebra problem, follows

    -We are obviously not limited to the above polynomial. We could replace the various powers of \( x \) with elements of Fourier series, that is, instead of \( x_i^j \) we could have \( \cos{(j x_i)} \) or \( \sin{(j x_i)} \), or time series or other orthogonal functions. -For every set of values \( y_i,x_i \) we can then generalize the equations to +Defining the vectors $$ -\begin{align*} -y_0&=\beta_0x_{00}+\beta_1x_{01}+\beta_2x_{02}+\dots+\beta_{n-1}x_{0n-1}+\epsilon_0\\ -y_1&=\beta_0x_{10}+\beta_1x_{11}+\beta_2x_{12}+\dots+\beta_{n-1}x_{1n-1}+\epsilon_1\\ -y_2&=\beta_0x_{20}+\beta_1x_{21}+\beta_2x_{22}+\dots+\beta_{n-1}x_{2n-1}+\epsilon_2\\ -\dots & \dots \\ -y_{i}&=\beta_0x_{i0}+\beta_1x_{i1}+\beta_2x_{i2}+\dots+\beta_{n-1}x_{in-1}+\epsilon_i\\ -\dots & \dots \\ -y_{n-1}&=\beta_0x_{n-1,0}+\beta_1x_{n-1,2}+\beta_2x_{n-1,2}+\dots+\beta_1x_{n-1,n-1}+\epsilon_{n-1}.\\ -\end{align*} +\hat{y} = [y_0,y_1, y_2,\dots, y_{n-1}]^T, +$$ + +and +$$ +\hat{\beta} = [\beta_0,\beta_1, \beta_2,\dots, \beta_{n-1}]^T, +$$ + +and +$$ +\hat{\epsilon} = [\epsilon_0,\epsilon_1, \epsilon_2,\dots, \epsilon_{n-1}]^T, +$$ + +and the matrix +$$ +\hat{X}= +\begin{bmatrix} +1& x_{0}^1 &x_{0}^2& \dots & \dots &x_{0}^{n-1}\\ +1& x_{1}^1 &x_{1}^2& \dots & \dots &x_{1}^{n-1}\\ +1& x_{2}^1 &x_{2}^2& \dots & \dots &x_{2}^{n-1}\\ +\dots& \dots &\dots& \dots & \dots &\dots\\ +1& x_{n-1}^1 &x_{n-1}^2& \dots & \dots &x_{n-1}^{n-1}\\ +\end{bmatrix} +$$ + +we can rewrite our equations as +$$ +\hat{y} = \hat{X}\hat{\beta}+\hat{\epsilon}. $$

    @@ -245,7 +292,7 @@ $$
  • 14
  • 15
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs006.html b/doc/pub/Regression/html/._Regression-bs006.html index 8e92c7d0c..0666eaf89 100644 --- a/doc/pub/Regression/html/._Regression-bs006.html +++ b/doc/pub/Regression/html/._Regression-bs006.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -207,24 +236,19 @@ MathJax.Hub.Config({

    -We redefine in turn the matrix \( \hat{X} \) as +We are obviously not limited to the above polynomial. We could replace the various powers of \( x \) with elements of Fourier series, that is, instead of \( x_i^j \) we could have \( \cos{(j x_i)} \) or \( \sin{(j x_i)} \), or time series or other orthogonal functions. +For every set of values \( y_i,x_i \) we can then generalize the equations to $$ -\hat{X}= -\begin{bmatrix} -x_{00}& x_{01} &x_{02}& \dots & \dots &x_{0,n-1}\\ -x_{10}& x_{11} &x_{12}& \dots & \dots &x_{1,n-1}\\ -x_{20}& x_{21} &x_{22}& \dots & \dots &x_{2,n-1}\\ -\dots& \dots &\dots& \dots & \dots &\dots\\ -x_{n-1,0}& x_{n-1,1} &x_{n-1,2}& \dots & \dots &x_{n-1,n-1}\\ -\end{bmatrix} +\begin{align*} +y_0&=\beta_0x_{00}+\beta_1x_{01}+\beta_2x_{02}+\dots+\beta_{n-1}x_{0n-1}+\epsilon_0\\ +y_1&=\beta_0x_{10}+\beta_1x_{11}+\beta_2x_{12}+\dots+\beta_{n-1}x_{1n-1}+\epsilon_1\\ +y_2&=\beta_0x_{20}+\beta_1x_{21}+\beta_2x_{22}+\dots+\beta_{n-1}x_{2n-1}+\epsilon_2\\ +\dots & \dots \\ +y_{i}&=\beta_0x_{i0}+\beta_1x_{i1}+\beta_2x_{i2}+\dots+\beta_{n-1}x_{in-1}+\epsilon_i\\ +\dots & \dots \\ +y_{n-1}&=\beta_0x_{n-1,0}+\beta_1x_{n-1,2}+\beta_2x_{n-1,2}+\dots+\beta_1x_{n-1,n-1}+\epsilon_{n-1}.\\ +\end{align*} $$ - -and without loss of generality we rewrite again our equations as -$$ -\hat{y} = \hat{X}\hat{\beta}+\hat{\epsilon}. -$$ - -The left-hand side of this equation forms know. Our error vector \( \hat{\epsilon} \) and the parameter vector \( \hat{\beta} \) are our unknow quantities. How can we obtain the optimal set of \( \beta_i \) values?

    @@ -251,7 +275,7 @@ The left-hand side of this equation forms know. Our error vector \( \hat{\epsilo
  • 15
  • 16
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs007.html b/doc/pub/Regression/html/._Regression-bs007.html index 039c86a9e..1cbc6bb56 100644 --- a/doc/pub/Regression/html/._Regression-bs007.html +++ b/doc/pub/Regression/html/._Regression-bs007.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,22 +232,28 @@ MathJax.Hub.Config({ -

    Optimizing our parameters

    +

    Generalizing the fitting procedure as a linear algebra problem

    -We have defined the matrix \( \hat{X} \) +We redefine in turn the matrix \( \hat{X} \) as $$ -\begin{align*} -y_0&=\beta_0x_{00}+\beta_1x_{01}+\beta_2x_{02}+\dots+\beta_{n-1}x_{0n-1}+\epsilon_0\\ -y_1&=\beta_0x_{10}+\beta_1x_{11}+\beta_2x_{12}+\dots+\beta_{n-1}x_{1n-1}+\epsilon_1\\ -y_2&=\beta_0x_{20}+\beta_1x_{21}+\beta_2x_{22}+\dots+\beta_{n-1}x_{2n-1}+\epsilon_1\\ -\dots & \dots \\ -y_{i}&=\beta_0x_{i0}+\beta_1x_{i1}+\beta_2x_{i2}+\dots+\beta_{n-1}x_{in-1}+\epsilon_1\\ -\dots & \dots \\ -y_{n-1}&=\beta_0x_{n-1,0}+\beta_1x_{n-1,2}+\beta_2x_{n-1,2}+\dots+\beta_1x_{n-1,n-1}+\epsilon_{n-1}.\\ -\end{align*} +\hat{X}= +\begin{bmatrix} +x_{00}& x_{01} &x_{02}& \dots & \dots &x_{0,n-1}\\ +x_{10}& x_{11} &x_{12}& \dots & \dots &x_{1,n-1}\\ +x_{20}& x_{21} &x_{22}& \dots & \dots &x_{2,n-1}\\ +\dots& \dots &\dots& \dots & \dots &\dots\\ +x_{n-1,0}& x_{n-1,1} &x_{n-1,2}& \dots & \dots &x_{n-1,n-1}\\ +\end{bmatrix} $$ + +and without loss of generality we rewrite again our equations as +$$ +\hat{y} = \hat{X}\hat{\beta}+\hat{\epsilon}. +$$ + +The left-hand side of this equation forms know. Our error vector \( \hat{\epsilon} \) and the parameter vector \( \hat{\beta} \) are our unknow quantities. How can we obtain the optimal set of \( \beta_i \) values?

    @@ -246,7 +281,7 @@ $$
  • 16
  • 17
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs008.html b/doc/pub/Regression/html/._Regression-bs008.html index c165bad53..ebb470521 100644 --- a/doc/pub/Regression/html/._Regression-bs008.html +++ b/doc/pub/Regression/html/._Regression-bs008.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,23 +232,21 @@ MathJax.Hub.Config({ -

    Optimizing our parameters, more details

    +

    Optimizing our parameters

    -We well use this matrix to define the approximation \( \hat{\tilde{y}} \) via the unknown quantity \( \hat{\beta} \) as +We have defined the matrix \( \hat{X} \) $$ -\hat{\tilde{y}}= \hat{X}\hat{\beta}, -$$ - -and in order to find the optimal parameters \( \beta_i \) instead of solving the above linear algebra problem, we define a function which gives a measure of the spread between the values \( y_i \) (which represent hopefully the exact values) and the parametrized values \( \tilde{y}_i \), namely -$$ -Q(\hat{\beta})=\sum_{i=0}^{n-1}\left(y_i-\tilde{y}_i\right)^2=\left(\hat{y}-\hat{\tilde{y}}\right)^T\left(\hat{y}-\hat{\tilde{y}}\right), -$$ - -or using the matrix \( \hat{X} \) as -$$ -Q(\hat{\beta})=\left(\hat{y}-\hat{X}\hat{\beta}\right)^T\left(\hat{y}-\hat{X}\hat{\beta}\right). +\begin{align*} +y_0&=\beta_0x_{00}+\beta_1x_{01}+\beta_2x_{02}+\dots+\beta_{n-1}x_{0n-1}+\epsilon_0\\ +y_1&=\beta_0x_{10}+\beta_1x_{11}+\beta_2x_{12}+\dots+\beta_{n-1}x_{1n-1}+\epsilon_1\\ +y_2&=\beta_0x_{20}+\beta_1x_{21}+\beta_2x_{22}+\dots+\beta_{n-1}x_{2n-1}+\epsilon_1\\ +\dots & \dots \\ +y_{i}&=\beta_0x_{i0}+\beta_1x_{i1}+\beta_2x_{i2}+\dots+\beta_{n-1}x_{in-1}+\epsilon_1\\ +\dots & \dots \\ +y_{n-1}&=\beta_0x_{n-1,0}+\beta_1x_{n-1,2}+\beta_2x_{n-1,2}+\dots+\beta_1x_{n-1,n-1}+\epsilon_{n-1}.\\ +\end{align*} $$

    @@ -249,7 +276,7 @@ $$
  • 17
  • 18
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs009.html b/doc/pub/Regression/html/._Regression-bs009.html index 8cc5f39fa..2c4747519 100644 --- a/doc/pub/Regression/html/._Regression-bs009.html +++ b/doc/pub/Regression/html/._Regression-bs009.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,39 +232,24 @@ MathJax.Hub.Config({ -

    Interpretations and optimizing our parameters

    +

    Optimizing our parameters, more details

    -The function +We well use this matrix to define the approximation \( \hat{\tilde{y}} \) via the unknown quantity \( \hat{\beta} \) as $$ -Q(\hat{\beta})=\left(\hat{y}-\hat{X}\hat{\beta}\right)^T\left(\hat{y}-\hat{X}\hat{\beta}\right), +\hat{\tilde{y}}= \hat{X}\hat{\beta}, $$ -can be linked to the variance of the quantity \( y_i \) if we interpret the latter as the mean value of for example a numerical experiment. When linking below with the maximum likelihood approach below, we will indeed interpret \( y_i \) as a mean value +and in order to find the optimal parameters \( \beta_i \) instead of solving the above linear algebra problem, we define a function which gives a measure of the spread between the values \( y_i \) (which represent hopefully the exact values) and the parametrized values \( \tilde{y}_i \), namely $$ -y_{i}=\langle y_i \rangle = \beta_0x_{i,0}+\beta_1x_{i,1}+\beta_2x_{i,2}+\dots+\beta_{n-1}x_{i,n-1}+\epsilon_i, +Q(\hat{\beta})=\sum_{i=0}^{n-1}\left(y_i-\tilde{y}_i\right)^2=\left(\hat{y}-\hat{\tilde{y}}\right)^T\left(\hat{y}-\hat{\tilde{y}}\right), $$ -where \( \langle y_i \rangle \) is the mean value. Keep in mind also that till now we have treated \( y_i \) as the exact value. Normally, the response (dependent or outcome) variable \( y_i \) the outcome of a numerical experiment or another type of experiment and is thus only an approximation to the true value. It is then always accompanied by an error estimate, often limited to a statistical error estimate given by the standard deviation discussed earlier. In the discussion here we will treat \( y_i \) as our exact value for the response variable. - -

    -In order to find the parameters \( \beta_i \) we will then minimize the spread of \( Q(\hat{\beta}) \) by requiring +or using the matrix \( \hat{X} \) as $$ -\frac{\partial Q(\hat{\beta})}{\partial \beta_j} = \frac{\partial }{\partial \beta_j}\left[ \sum_{i=0}^{n-1}\left(y_i-\beta_0x_{i,0}-\beta_1x_{i,1}-\beta_2x_{i,2}-\dots-\beta_{n-1}x_{i,n-1}\right)^2\right]=0, +Q(\hat{\beta})=\left(\hat{y}-\hat{X}\hat{\beta}\right)^T\left(\hat{y}-\hat{X}\hat{\beta}\right). $$ - -which results in -$$ -\frac{\partial Q(\hat{\beta})}{\partial \beta_j} = -2\left[ \sum_{i=0}^{n-1}x_{ij}\left(y_i-\beta_0x_{i,0}-\beta_1x_{i,1}-\beta_2x_{i,2}-\dots-\beta_{n-1}x_{i,n-1}\right)\right]=0, -$$ - -or in a matrix-vector form as -$$ -\frac{\partial Q(\hat{\beta})}{\partial \hat{\beta}} = 0 = \hat{X}^T\left( \hat{y}-\hat{X}\hat{\beta}\right). -$$ - -

    @@ -265,7 +279,7 @@ $$
  • 18
  • 19
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs010.html b/doc/pub/Regression/html/._Regression-bs010.html index a9e44dede..90e7a3478 100644 --- a/doc/pub/Regression/html/._Regression-bs010.html +++ b/doc/pub/Regression/html/._Regression-bs010.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -207,19 +236,32 @@ MathJax.Hub.Config({

    -We can rewrite +The function $$ -\frac{\partial Q(\hat{\beta})}{\partial \hat{\beta}} = 0 = \hat{X}^T\left( \hat{y}-\hat{X}\hat{\beta}\right), +Q(\hat{\beta})=\left(\hat{y}-\hat{X}\hat{\beta}\right)^T\left(\hat{y}-\hat{X}\hat{\beta}\right), $$ -as +can be linked to the variance of the quantity \( y_i \) if we interpret the latter as the mean value of for example a numerical experiment. When linking below with the maximum likelihood approach below, we will indeed interpret \( y_i \) as a mean value $$ -\hat{X}^T\hat{y} = \hat{X}^T\hat{X}\hat{\beta}, +y_{i}=\langle y_i \rangle = \beta_0x_{i,0}+\beta_1x_{i,1}+\beta_2x_{i,2}+\dots+\beta_{n-1}x_{i,n-1}+\epsilon_i, $$ -and if the matrix \( \hat{X}^T\hat{X} \) is invertible we have the solution +where \( \langle y_i \rangle \) is the mean value. Keep in mind also that till now we have treated \( y_i \) as the exact value. Normally, the response (dependent or outcome) variable \( y_i \) the outcome of a numerical experiment or another type of experiment and is thus only an approximation to the true value. It is then always accompanied by an error estimate, often limited to a statistical error estimate given by the standard deviation discussed earlier. In the discussion here we will treat \( y_i \) as our exact value for the response variable. + +

    +In order to find the parameters \( \beta_i \) we will then minimize the spread of \( Q(\hat{\beta}) \) by requiring $$ -\hat{\beta} =\left(\hat{X}^T\hat{X}\right)^{-1}\hat{X}^T\hat{y}. +\frac{\partial Q(\hat{\beta})}{\partial \beta_j} = \frac{\partial }{\partial \beta_j}\left[ \sum_{i=0}^{n-1}\left(y_i-\beta_0x_{i,0}-\beta_1x_{i,1}-\beta_2x_{i,2}-\dots-\beta_{n-1}x_{i,n-1}\right)^2\right]=0, +$$ + +which results in +$$ +\frac{\partial Q(\hat{\beta})}{\partial \beta_j} = -2\left[ \sum_{i=0}^{n-1}x_{ij}\left(y_i-\beta_0x_{i,0}-\beta_1x_{i,1}-\beta_2x_{i,2}-\dots-\beta_{n-1}x_{i,n-1}\right)\right]=0, +$$ + +or in a matrix-vector form as +$$ +\frac{\partial Q(\hat{\beta})}{\partial \hat{\beta}} = 0 = \hat{X}^T\left( \hat{y}-\hat{X}\hat{\beta}\right). $$

    @@ -253,7 +295,7 @@ $$

  • 19
  • 20
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs011.html b/doc/pub/Regression/html/._Regression-bs011.html index d48d2e413..94864f6a6 100644 --- a/doc/pub/Regression/html/._Regression-bs011.html +++ b/doc/pub/Regression/html/._Regression-bs011.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -207,23 +236,21 @@ MathJax.Hub.Config({

    -The residuals \( \hat{\epsilon} \) are in turn given by +We can rewrite $$ -\hat{\epsilon} = \hat{y}-\hat{\tilde{y}} = \hat{y}-\hat{X}\hat{\beta}, +\frac{\partial Q(\hat{\beta})}{\partial \hat{\beta}} = 0 = \hat{X}^T\left( \hat{y}-\hat{X}\hat{\beta}\right), $$ -and with +as $$ -\hat{X}^T\left( \hat{y}-\hat{X}\hat{\beta}\right)= 0, +\hat{X}^T\hat{y} = \hat{X}^T\hat{X}\hat{\beta}, $$ -we have +and if the matrix \( \hat{X}^T\hat{X} \) is invertible we have the solution $$ -\hat{X}^T\hat{\epsilon}=\hat{X}^T\left( \hat{y}-\hat{X}\hat{\beta}\right)= 0, +\hat{\beta} =\left(\hat{X}^T\hat{X}\right)^{-1}\hat{X}^T\hat{y}. $$ -meaning that the solution for \( \hat{\beta} \) is the one which minimizes the residuals. Later we will link this with the maximum likelihood approach. -

    @@ -255,7 +282,7 @@ meaning that the solution for \( \hat{\beta} \) is the one which minimizes the r
  • 20
  • 21
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs012.html b/doc/pub/Regression/html/._Regression-bs012.html index 70f805206..dd8c3fbf9 100644 --- a/doc/pub/Regression/html/._Regression-bs012.html +++ b/doc/pub/Regression/html/._Regression-bs012.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,21 +232,26 @@ MathJax.Hub.Config({ -

    The \( \chi^2 \) function

    +

    Interpretations and optimizing our parameters

    - -

    -Normally, the response (dependent or outcome) variable \( y_i \) the outcome of a numerical experiment or another type of experiment and is thus only an approximation to the true value. It is then always accompanied by an error estimate, often limited to a statistical error estimate given by the standard deviation discussed earlier. In the discussion here we will treat \( y_i \) as our exact value for the response variable. - -

    -Introducing the standard deviation \( \sigma_i \) for each measurement \( y_i \), we define now the \( \chi^2 \) function as +The residuals \( \hat{\epsilon} \) are in turn given by $$ -\chi^2(\hat{\beta})=\sum_{i=0}^{n-1}\frac{\left(y_i-\tilde{y}_i\right)^2}{\sigma_i^2}=\left(\hat{y}-\hat{\tilde{y}}\right)^T\frac{1}{\hat{\Sigma^2}}\left(\hat{y}-\hat{\tilde{y}}\right), +\hat{\epsilon} = \hat{y}-\hat{\tilde{y}} = \hat{y}-\hat{X}\hat{\beta}, $$ -where the matrix \( \hat{\Sigma} \) is a diagonal matrix with \( \sigma_i \) as matrix elements. +and with +$$ +\hat{X}^T\left( \hat{y}-\hat{X}\hat{\beta}\right)= 0, +$$ + +we have +$$ +\hat{X}^T\hat{\epsilon}=\hat{X}^T\left( \hat{y}-\hat{X}\hat{\beta}\right)= 0, +$$ + +meaning that the solution for \( \hat{\beta} \) is the one which minimizes the residuals. Later we will link this with the maximum likelihood approach.

    @@ -250,7 +284,7 @@ where the matrix \( \hat{\Sigma} \) is a diagonal matrix with \( \sigma_i \) as
  • 21
  • 22
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs013.html b/doc/pub/Regression/html/._Regression-bs013.html index 89a242dec..86165977c 100644 --- a/doc/pub/Regression/html/._Regression-bs013.html +++ b/doc/pub/Regression/html/._Regression-bs013.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -209,22 +238,17 @@ MathJax.Hub.Config({

    -In order to find the parameters \( \beta_i \) we will then minimize the spread of \( \chi^2(\hat{\beta}) \) by requiring +Normally, the response (dependent or outcome) variable \( y_i \) the outcome of a numerical experiment or another type of experiment and is thus only an approximation to the true value. It is then always accompanied by an error estimate, often limited to a statistical error estimate given by the standard deviation discussed earlier. In the discussion here we will treat \( y_i \) as our exact value for the response variable. + +

    +Introducing the standard deviation \( \sigma_i \) for each measurement \( y_i \), we define now the \( \chi^2 \) function as $$ -\frac{\partial \chi^2(\hat{\beta})}{\partial \beta_j} = \frac{\partial }{\partial \beta_j}\left[ \sum_{i=0}^{n-1}\left(\frac{y_i-\beta_0x_{i,0}-\beta_1x_{i,1}-\beta_2x_{i,2}-\dots-\beta_{n-1}x_{i,n-1}}{\sigma_i}\right)^2\right]=0, +\chi^2(\hat{\beta})=\sum_{i=0}^{n-1}\frac{\left(y_i-\tilde{y}_i\right)^2}{\sigma_i^2}=\left(\hat{y}-\hat{\tilde{y}}\right)^T\frac{1}{\hat{\Sigma^2}}\left(\hat{y}-\hat{\tilde{y}}\right), $$ -which results in -$$ -\frac{\partial \chi^2(\hat{\beta})}{\partial \beta_j} = -2\left[ \sum_{i=0}^{n-1}\frac{x_{ij}}{\sigma_i}\left(\frac{y_i-\beta_0x_{i,0}-\beta_1x_{i,1}-\beta_2x_{i,2}-\dots-\beta_{n-1}x_{i,n-1}}{\sigma_i}\right)\right]=0, -$$ +where the matrix \( \hat{\Sigma} \) is a diagonal matrix with \( \sigma_i \) as matrix elements. -or in a matrix-vector form as -$$ -\frac{\partial \chi^2(\hat{\beta})}{\partial \hat{\beta}} = 0 = \hat{A}^T\left( \hat{b}-\hat{A}\hat{\beta}\right). -$$ - -where we have defined the matrix \( \hat{A} =\hat{X}/\hat{\Sigma} \) with matrix elements \( a_{ij} = x_{ij}/\sigma_i \) and the vector \( \hat{b} \) with elements \( b_i = y_i/\sigma_i \). +

    @@ -255,7 +279,7 @@ where we have defined the matrix \( \hat{A} =\hat{X}/\hat{\Sigma} \) with matrix
  • 22
  • 23
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs014.html b/doc/pub/Regression/html/._Regression-bs014.html index 896a5038a..bbde82e75 100644 --- a/doc/pub/Regression/html/._Regression-bs014.html +++ b/doc/pub/Regression/html/._Regression-bs014.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -209,20 +238,22 @@ MathJax.Hub.Config({

    -We can rewrite +In order to find the parameters \( \beta_i \) we will then minimize the spread of \( \chi^2(\hat{\beta}) \) by requiring $$ -\frac{\partial \chi^2(\hat{\beta})}{\partial \hat{\beta}} = 0 = \hat{A}^T\left( \hat{b}-\hat{A}\hat{\beta}\right), +\frac{\partial \chi^2(\hat{\beta})}{\partial \beta_j} = \frac{\partial }{\partial \beta_j}\left[ \sum_{i=0}^{n-1}\left(\frac{y_i-\beta_0x_{i,0}-\beta_1x_{i,1}-\beta_2x_{i,2}-\dots-\beta_{n-1}x_{i,n-1}}{\sigma_i}\right)^2\right]=0, $$ -as +which results in $$ -\hat{A}^T\hat{b} = \hat{A}^T\hat{A}\hat{\beta}, +\frac{\partial \chi^2(\hat{\beta})}{\partial \beta_j} = -2\left[ \sum_{i=0}^{n-1}\frac{x_{ij}}{\sigma_i}\left(\frac{y_i-\beta_0x_{i,0}-\beta_1x_{i,1}-\beta_2x_{i,2}-\dots-\beta_{n-1}x_{i,n-1}}{\sigma_i}\right)\right]=0, $$ -and if the matrix \( \hat{A}^T\hat{A} \) is invertible we have the solution +or in a matrix-vector form as $$ -\hat{\beta} =\left(\hat{A}^T\hat{A}\right)^{-1}\hat{A}^T\hat{b}. +\frac{\partial \chi^2(\hat{\beta})}{\partial \hat{\beta}} = 0 = \hat{A}^T\left( \hat{b}-\hat{A}\hat{\beta}\right). $$ + +where we have defined the matrix \( \hat{A} =\hat{X}/\hat{\Sigma} \) with matrix elements \( a_{ij} = x_{ij}/\sigma_i \) and the vector \( \hat{b} \) with elements \( b_i = y_i/\sigma_i \).

    @@ -253,7 +284,7 @@ $$
  • 23
  • 24
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs015.html b/doc/pub/Regression/html/._Regression-bs015.html index dd2dbedfa..9bb6354df 100644 --- a/doc/pub/Regression/html/._Regression-bs015.html +++ b/doc/pub/Regression/html/._Regression-bs015.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -209,24 +238,19 @@ MathJax.Hub.Config({

    -If we then introduce the matrix +We can rewrite $$ -\hat{H} = \left(\hat{A}^T\hat{A}\right)^{-1}, +\frac{\partial \chi^2(\hat{\beta})}{\partial \hat{\beta}} = 0 = \hat{A}^T\left( \hat{b}-\hat{A}\hat{\beta}\right), $$ -we have then the following expression for the parameters \( \beta_j \) (the matrix elements of \( \hat{H} \) are \( h_{ij} \)) +as $$ -\beta_j = \sum_{k=0}^{p-1}h_{jk}\sum_{i=0}^{n-1}\frac{y_i}{\sigma_i}\frac{x_{ik}}{\sigma_i} = \sum_{k=0}^{p-1}h_{jk}\sum_{i=0}^{n-1}b_ia_{ik} +\hat{A}^T\hat{b} = \hat{A}^T\hat{A}\hat{\beta}, $$ -We state without proof the expression for the uncertainty in the parameters \( \beta_j \) as (we leave this as an exercise) +and if the matrix \( \hat{A}^T\hat{A} \) is invertible we have the solution $$ -\sigma^2(\beta_j) = \sum_{i=0}^{n-1}\sigma_i^2\left( \frac{\partial \beta_j}{\partial y_i}\right)^2, -$$ - -resulting in -$$ -\sigma^2(\beta_j) = \left(\sum_{k=0}^{p-1}h_{jk}\sum_{i=0}^{n-1}a_{ik}\right)\left(\sum_{l=0}^{p-1}h_{jl}\sum_{m=0}^{n-1}a_{ml}\right) = h_{jj}! +\hat{\beta} =\left(\hat{A}^T\hat{A}\right)^{-1}\hat{A}^T\hat{b}. $$ @@ -258,7 +282,7 @@ $$

  • 24
  • 25
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs016.html b/doc/pub/Regression/html/._Regression-bs016.html index 6a8765bee..b3aeb045a 100644 --- a/doc/pub/Regression/html/._Regression-bs016.html +++ b/doc/pub/Regression/html/._Regression-bs016.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -207,19 +236,26 @@ MathJax.Hub.Config({

    -The first step here is to approximate the function \( y \) with a first-order polynomial, that is we write + +

    +If we then introduce the matrix $$ -y=y(x) \rightarrow y(x_i) \approx \beta_0+\beta_1 x_i. +\hat{H} = \left(\hat{A}^T\hat{A}\right)^{-1}, $$ -By computing the derivatives of \( \chi^2 \) with respect to \( \beta_0 \) and \( \beta_1 \) show that these are given by +we have then the following expression for the parameters \( \beta_j \) (the matrix elements of \( \hat{H} \) are \( h_{ij} \)) $$ -\frac{\partial \chi^2(\hat{\beta})}{\partial \beta_0} = -2\left[ \sum_{i=0}^{n-1}\left(\frac{y_i-\beta_0-\beta_1x_{i}}{\sigma_i^2}\right)\right]=0, +\beta_j = \sum_{k=0}^{p-1}h_{jk}\sum_{i=0}^{n-1}\frac{y_i}{\sigma_i}\frac{x_{ik}}{\sigma_i} = \sum_{k=0}^{p-1}h_{jk}\sum_{i=0}^{n-1}b_ia_{ik} $$ -and +We state without proof the expression for the uncertainty in the parameters \( \beta_j \) as (we leave this as an exercise) $$ -\frac{\partial \chi^2(\hat{\beta})}{\partial \beta_0} = -2\left[ \sum_{i=0}^{n-1}x_i\left(\frac{y_i-\beta_0-\beta_1x_{i}}{\sigma_i^2}\right)\right]=0. +\sigma^2(\beta_j) = \sum_{i=0}^{n-1}\sigma_i^2\left( \frac{\partial \beta_j}{\partial y_i}\right)^2, +$$ + +resulting in +$$ +\sigma^2(\beta_j) = \left(\sum_{k=0}^{p-1}h_{jk}\sum_{i=0}^{n-1}a_{ik}\right)\left(\sum_{l=0}^{p-1}h_{jl}\sum_{m=0}^{n-1}a_{ml}\right) = h_{jj}! $$

    @@ -251,7 +287,7 @@ $$
  • 25
  • 26
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs017.html b/doc/pub/Regression/html/._Regression-bs017.html index 4375e1866..a258a9d2c 100644 --- a/doc/pub/Regression/html/._Regression-bs017.html +++ b/doc/pub/Regression/html/._Regression-bs017.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -207,42 +236,20 @@ MathJax.Hub.Config({

    - -

    -For a linear fit we don't need to invert a matrix!! -Defining +The first step here is to approximate the function \( y \) with a first-order polynomial, that is we write $$ -\gamma = \sum_{i=0}^{n-1}\frac{1}{\sigma_i^2}, +y=y(x) \rightarrow y(x_i) \approx \beta_0+\beta_1 x_i. $$ - +By computing the derivatives of \( \chi^2 \) with respect to \( \beta_0 \) and \( \beta_1 \) show that these are given by $$ -\gamma_x = \sum_{i=0}^{n-1}\frac{x_{i}}{\sigma_i^2}, +\frac{\partial \chi^2(\hat{\beta})}{\partial \beta_0} = -2\left[ \sum_{i=0}^{n-1}\left(\frac{y_i-\beta_0-\beta_1x_{i}}{\sigma_i^2}\right)\right]=0, $$ +and $$ -\gamma_y = \sum_{i=0}^{n-1}\left(\frac{y_i}{\sigma_i^2}\right), +\frac{\partial \chi^2(\hat{\beta})}{\partial \beta_0} = -2\left[ \sum_{i=0}^{n-1}x_i\left(\frac{y_i-\beta_0-\beta_1x_{i}}{\sigma_i^2}\right)\right]=0. $$ - -$$ -\gamma_{xx} = \sum_{i=0}^{n-1}\frac{x_ix_{i}}{\sigma_i^2}, -$$ - -$$ -\gamma_{xy} = \sum_{i=0}^{n-1}\frac{y_ix_{i}}{\sigma_i^2}, -$$ - -we obtain -$$ -\beta_0 = \frac{\gamma_{xx}\gamma_y-\gamma_x\gamma_y}{\gamma\gamma_{xx}-\gamma_x^2}, -$$ - -$$ -\beta_1 = \frac{\gamma_{xy}\gamma-\gamma_x\gamma_y}{\gamma\gamma_{xx}-\gamma_x^2}. -$$ - -

    -This approach (different linear and non-linear regression) suffers often from both being underdetermined and overdetermined in the unknown coefficients \( \beta_i \). A better approach is to use the Singular Value Decomposition (SVD) method discussed below. Or using Lasso and Ridge regression. See below.

    @@ -273,7 +280,7 @@ This approach (different linear and non-linear regression) suffers often from bo
  • 26
  • 27
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs018.html b/doc/pub/Regression/html/._Regression-bs018.html index 0ba0aa5ad..cc9cfc97e 100644 --- a/doc/pub/Regression/html/._Regression-bs018.html +++ b/doc/pub/Regression/html/._Regression-bs018.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,42 +232,49 @@ MathJax.Hub.Config({ -

    Simple regression model

    -We are now ready to write our first program which aims at solving the above linear regression equations. We start with data we have produced ourselves, in this case normally distributed random numbers along the \( x \)-axis. These numbers define then the value of a function \( y(x)=4+3x+N(0,1) \). Thereafter we order the \( x \) values and employ our linear regression algorithm to set up the best fit. Here we find it useful to use the numpy function \( c\_ \) arrays where arrays are stacked along their last axis after being upgraded to at least two dimensions with ones post-pended to the shape. The following examples help in understanding what happens +

    The \( \chi^2 \) function

    +
    +
    +

    +

    +For a linear fit we don't need to invert a matrix!! +Defining +$$ +\gamma = \sum_{i=0}^{n-1}\frac{1}{\sigma_i^2}, +$$ + + +$$ +\gamma_x = \sum_{i=0}^{n-1}\frac{x_{i}}{\sigma_i^2}, +$$ + +$$ +\gamma_y = \sum_{i=0}^{n-1}\left(\frac{y_i}{\sigma_i^2}\right), +$$ + +$$ +\gamma_{xx} = \sum_{i=0}^{n-1}\frac{x_ix_{i}}{\sigma_i^2}, +$$ + +$$ +\gamma_{xy} = \sum_{i=0}^{n-1}\frac{y_ix_{i}}{\sigma_i^2}, +$$ + +we obtain +$$ +\beta_0 = \frac{\gamma_{xx}\gamma_y-\gamma_x\gamma_y}{\gamma\gamma_{xx}-\gamma_x^2}, +$$ + +$$ +\beta_1 = \frac{\gamma_{xy}\gamma-\gamma_x\gamma_y}{\gamma\gamma_{xx}-\gamma_x^2}. +$$ - -

    import numpy as np
    -print(np.c_[np.array([1,2,3]), np.array([4,5,6])])
    -print(np.c_[np.array([[1,2,3]]), 0, 0, np.array([[4,5,6]])])
    -

    +This approach (different linear and non-linear regression) suffers often from both being underdetermined and overdetermined in the unknown coefficients \( \beta_i \). A better approach is to use the Singular Value Decomposition (SVD) method discussed below. Or using Lasso and Ridge regression. See below. +

    +
    - -
    # Importing various packages
    -from random import random, seed
    -import numpy as np
    -import matplotlib.pyplot as plt
    -
    -x = 2*np.random.rand(100,1)
    -y = 4+3*x+np.random.randn(100,1)
    -
    -xb = np.c_[np.ones((100,1)), x]
    -beta = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)
    -xnew = np.array([[0],[2]])
    -xbnew = np.c_[np.ones((2,1)), xnew]
    -ypredict = xbnew.dot(beta)
    -
    -plt.plot(xnew, ypredict, "r-")
    -plt.plot(x, y ,'ro')
    -plt.axis([0,2.0,0, 15.0])
    -plt.xlabel(r'$x$')
    -plt.ylabel(r'$y$')
    -plt.title(r'Linear Regression')
    -plt.show()
    -
    -

    -We see that, as expected, a linear fit gives a seemingly (from the graph) good representation of the data.

    @@ -266,7 +302,7 @@ We see that, as expected, a linear fit gives a seemingly (from the graph) good r

  • 27
  • 28
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs019.html b/doc/pub/Regression/html/._Regression-bs019.html index 98985f9d7..26f66fce1 100644 --- a/doc/pub/Regression/html/._Regression-bs019.html +++ b/doc/pub/Regression/html/._Regression-bs019.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,10 +232,15 @@ MathJax.Hub.Config({ -

    Simple regression model, now using scikit-learn

    - +

    Simple regression model

    +We are now ready to write our first program which aims at solving the above linear regression equations. We start with data we have produced ourselves, in this case normally distributed random numbers along the \( x \)-axis. These numbers define then the value of a function \( y(x)=4+3x+N(0,1) \). Thereafter we order the \( x \) values and employ our linear regression algorithm to set up the best fit. Here we find it useful to use the numpy function \( c\_ \) arrays where arrays are stacked along their last axis after being upgraded to at least two dimensions with ones post-pended to the shape. The following examples help in understanding what happens

    -We can repeat the above algorithm using scikit-learn as follows + + +

    import numpy as np
    +print(np.c_[np.array([1,2,3]), np.array([4,5,6])])
    +print(np.c_[np.array([[1,2,3]]), 0, 0, np.array([[4,5,6]])])
    +

    @@ -214,23 +248,27 @@ We can repeat the above algorithm using scikit-learn as follows from random import random, seed import numpy as np import matplotlib.pyplot as plt -from sklearn.linear_model import LinearRegression x = 2*np.random.rand(100,1) y = 4+3*x+np.random.randn(100,1) -linreg = LinearRegression() -linreg.fit(x,y) + +xb = np.c_[np.ones((100,1)), x] +beta = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y) xnew = np.array([[0],[2]]) -ypredict = linreg.predict(xnew) +xbnew = np.c_[np.ones((2,1)), xnew] +ypredict = xbnew.dot(beta) plt.plot(xnew, ypredict, "r-") plt.plot(x, y ,'ro') plt.axis([0,2.0,0, 15.0]) plt.xlabel(r'$x$') plt.ylabel(r'$y$') -plt.title(r'Random numbers ') +plt.title(r'Linear Regression') plt.show() +

    +We see that, as expected, a linear fit gives a seemingly (from the graph) good representation of the data. +

    @@ -257,7 +295,7 @@ plt.show()

  • 28
  • 29
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs020.html b/doc/pub/Regression/html/._Regression-bs020.html index 420ad0471..4cbf19b9e 100644 --- a/doc/pub/Regression/html/._Regression-bs020.html +++ b/doc/pub/Regression/html/._Regression-bs020.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,69 +232,32 @@ MathJax.Hub.Config({ -

    Simple linear regression model using scikit-learn

    +

    Simple regression model, now using scikit-learn

    -We start with perhaps our simplest possible example, using scikit-learn to perform linear regression analysis on a data set produced by us. -What follows is a simple Python code where we have defined function \( y \) in terms of the variable \( x \). Both are defined as vectors of dimension \( 1\times 100 \). The entries to the vector \( \hat{x} \) are given by random numbers generated with a uniform distribution with entries \( x_i \in [0,1] \) (more about probability distribution functions later). These values are then used to define a function \( y(x) \) (tabulated again as a vector) with a linear dependence on \( x \) plus a random noise added via the normal distribution. - -

    -The Numpy functions are imported used the import numpy as np -statement and the random number generator for the uniform distribution -is called using the function np.random.rand(), where we specificy -that we want \( 100 \) random variables. Using Numpy we define -automatically an array with the specified number of elements, \( 100 \) in -our case. With the Numpy function randn() we can compute random -numbers with the normal distribution (mean value \( \mu \) equal to zero and -variance \( \sigma^2 \) set to one) and produce the values of \( y \) assuming a linear -dependence as function of \( x \) - -$$ -y = 2x+N(0,1), -$$ - -

    -where \( N(0,1) \) represents random numbers generated by the normal -distribution. From scikit-learn we import then the -LinearRegression functionality and make a prediction \( \tilde{y} = -\alpha + \beta x \) using the function fit(x,y). We call the set of -data \( (\hat{x},\hat{y}) \) for our training data. The Python package -scikit-learn has also a functionality which extracts the above -fitting parameters \( \alpha \) and \( \beta \) (see below). Later we will -distinguish between training data and test data. - -

    -For plotting we use the Python package -matplotlib which produces publication -quality figures. Feel free to explore the extensive -gallery of examples. In -this example we plot our original values of \( x \) and \( y \) as well as the -prediction ypredict (\( \tilde{y} \)), which attempts at fitting our -data with a straight line. - -

    -The Python code follows here. +We can repeat the above algorithm using scikit-learn as follows

    # Importing various packages
    +from random import random, seed
     import numpy as np
     import matplotlib.pyplot as plt
     from sklearn.linear_model import LinearRegression
     
    -x = np.random.rand(100,1)
    -y = 2*x+np.random.randn(100,1)
    +x = 2*np.random.rand(100,1)
    +y = 4+3*x+np.random.randn(100,1)
     linreg = LinearRegression()
     linreg.fit(x,y)
    -xnew = np.array([[0],[1]])
    +xnew = np.array([[0],[2]])
     ypredict = linreg.predict(xnew)
     
     plt.plot(xnew, ypredict, "r-")
     plt.plot(x, y ,'ro')
    -plt.axis([0,1.0,0, 5.0])
    +plt.axis([0,2.0,0, 15.0])
     plt.xlabel(r'$x$')
     plt.ylabel(r'$y$')
    -plt.title(r'Simple Linear Regression')
    +plt.title(r'Random numbers ')
     plt.show()
     

    @@ -294,7 +286,7 @@ plt.show()

  • 29
  • 30
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs021.html b/doc/pub/Regression/html/._Regression-bs021.html index c1f975f55..a768c9fd4 100644 --- a/doc/pub/Regression/html/._Regression-bs021.html +++ b/doc/pub/Regression/html/._Regression-bs021.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,25 +232,71 @@ MathJax.Hub.Config({ -

    Simple linear regression model

    +

    Simple linear regression model using scikit-learn

    -This example serves several aims. It allows us to demonstrate several -aspects of data analysis and later machine learning algorithms. The -immediate visualization shows that our linear fit is not -impressive. It goes through the data points, but there are many -outliers which are not reproduced by our linear regression. We could -now play around with this small program and change for example the -factor in front of \( x \) and the normal distribution. Try to change the -function \( y \) to +We start with perhaps our simplest possible example, using scikit-learn to perform linear regression analysis on a data set produced by us. +What follows is a simple Python code where we have defined function \( y \) in terms of the variable \( x \). Both are defined as vectors of dimension \( 1\times 100 \). The entries to the vector \( \hat{x} \) are given by random numbers generated with a uniform distribution with entries \( x_i \in [0,1] \) (more about probability distribution functions later). These values are then used to define a function \( y(x) \) (tabulated again as a vector) with a linear dependence on \( x \) plus a random noise added via the normal distribution. + +

    +The Numpy functions are imported used the import numpy as np +statement and the random number generator for the uniform distribution +is called using the function np.random.rand(), where we specificy +that we want \( 100 \) random variables. Using Numpy we define +automatically an array with the specified number of elements, \( 100 \) in +our case. With the Numpy function randn() we can compute random +numbers with the normal distribution (mean value \( \mu \) equal to zero and +variance \( \sigma^2 \) set to one) and produce the values of \( y \) assuming a linear +dependence as function of \( x \) $$ -y = 10x+0.01 \times N(0,1), +y = 2x+N(0,1), $$

    -where \( x \) is defined as before. +where \( N(0,1) \) represents random numbers generated by the normal +distribution. From scikit-learn we import then the +LinearRegression functionality and make a prediction \( \tilde{y} = +\alpha + \beta x \) using the function fit(x,y). We call the set of +data \( (\hat{x},\hat{y}) \) for our training data. The Python package +scikit-learn has also a functionality which extracts the above +fitting parameters \( \alpha \) and \( \beta \) (see below). Later we will +distinguish between training data and test data. +

    +For plotting we use the Python package +matplotlib which produces publication +quality figures. Feel free to explore the extensive +gallery of examples. In +this example we plot our original values of \( x \) and \( y \) as well as the +prediction ypredict (\( \tilde{y} \)), which attempts at fitting our +data with a straight line. + +

    +The Python code follows here. +

    + + +

    # Importing various packages
    +import numpy as np
    +import matplotlib.pyplot as plt
    +from sklearn.linear_model import LinearRegression
    +
    +x = np.random.rand(100,1)
    +y = 2*x+np.random.randn(100,1)
    +linreg = LinearRegression()
    +linreg.fit(x,y)
    +xnew = np.array([[0],[1]])
    +ypredict = linreg.predict(xnew)
    +
    +plt.plot(xnew, ypredict, "r-")
    +plt.plot(x, y ,'ro')
    +plt.axis([0,1.0,0, 5.0])
    +plt.xlabel(r'$x$')
    +plt.ylabel(r'$y$')
    +plt.title(r'Simple Linear Regression')
    +plt.show()
    +

    @@ -248,7 +323,7 @@ where \( x \) is defined as before.

  • 30
  • 31
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs022.html b/doc/pub/Regression/html/._Regression-bs022.html index 2487b3f53..dc088d321 100644 --- a/doc/pub/Regression/html/._Regression-bs022.html +++ b/doc/pub/Regression/html/._Regression-bs022.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,15 +232,24 @@ MathJax.Hub.Config({ -

    Less noise

    +

    Simple linear regression model

    -Does the fit look better? Indeed, by -reducing the role of the normal distribution we see immediately that -our linear prediction seemingly reproduces better the training -set. However, this testing 'by the eye' is obviouly not satisfactory in the -long run. Here we have only defined the training data and our model, and -have not discussed a more rigorous approach to the cost function. +This example serves several aims. It allows us to demonstrate several +aspects of data analysis and later machine learning algorithms. The +immediate visualization shows that our linear fit is not +impressive. It goes through the data points, but there are many +outliers which are not reproduced by our linear regression. We could +now play around with this small program and change for example the +factor in front of \( x \) and the normal distribution. Try to change the +function \( y \) to + +$$ +y = 10x+0.01 \times N(0,1), +$$ + +

    +where \( x \) is defined as before.

    @@ -239,7 +277,7 @@ have not discussed a more rigorous approach to the cost function.

  • 31
  • 32
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs023.html b/doc/pub/Regression/html/._Regression-bs023.html index bd1b9f6a5..193801b1c 100644 --- a/doc/pub/Regression/html/._Regression-bs023.html +++ b/doc/pub/Regression/html/._Regression-bs023.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,24 +232,15 @@ MathJax.Hub.Config({ -

    How to study our fits

    +

    Less noise

    -We need more rigorous criteria in defining whether we have succeeded or -not in modeling our training data. You will be surprised to see that -many scientists seldomly venture beyond this 'by the eye' approach. A -standard approach for the cost function is the so-called \( \chi^2 \) -function - -$$ \chi^2 = \frac{1}{n} -\sum_{i=0}^{n-1}\frac{(y_i-\tilde{y}_i)^2}{\sigma_i^2}, -$$ - -

    -where \( \sigma_i^2 \) is the variance (to be defined later) of the entry -\( y_i \). We may not know the explicit value of \( \sigma_i^2 \), it serves -however the aim of scaling the equations and make the cost function -dimensionless. +Does the fit look better? Indeed, by +reducing the role of the normal distribution we see immediately that +our linear prediction seemingly reproduces better the training +set. However, this testing 'by the eye' is obviouly not satisfactory in the +long run. Here we have only defined the training data and our model, and +have not discussed a more rigorous approach to the cost function.

    @@ -248,7 +268,7 @@ dimensionless.

  • 32
  • 33
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs024.html b/doc/pub/Regression/html/._Regression-bs024.html index 4979e3750..fe69a6e2a 100644 --- a/doc/pub/Regression/html/._Regression-bs024.html +++ b/doc/pub/Regression/html/._Regression-bs024.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,23 +232,24 @@ MathJax.Hub.Config({ -

    Minimizing the cost function

    +

    How to study our fits

    -Minimizing the cost function is a central aspect of -our discussions to come. Finding its minima as function of the model -parameters (\( \alpha \) and \( \beta \) in our case) will be a recurring -theme in these series of lectures. Essentially all machine learning -algorithms we will discuss center around the minimization of the -chosen cost function. This depends in turn on our specific -model for describing the data, a typical situation in supervised -learning. Automatizing the search for the minima of the cost function is a -central ingredient in all algorithms. Typical methods which are -employed are various variants of gradient methods. These will be -discussed in more detail later. Again, you'll be surprised to hear that -many practitioners minimize the above function ''by the eye', popularly dubbed as -'chi by the eye'. That is, change a parameter and see (visually and numerically) that -the \( \chi^2 \) function becomes smaller. +We need more rigorous criteria in defining whether we have succeeded or +not in modeling our training data. You will be surprised to see that +many scientists seldomly venture beyond this 'by the eye' approach. A +standard approach for the cost function is the so-called \( \chi^2 \) +function + +$$ \chi^2 = \frac{1}{n} +\sum_{i=0}^{n-1}\frac{(y_i-\tilde{y}_i)^2}{\sigma_i^2}, +$$ + +

    +where \( \sigma_i^2 \) is the variance (to be defined later) of the entry +\( y_i \). We may not know the explicit value of \( \sigma_i^2 \), it serves +however the aim of scaling the equations and make the cost function +dimensionless.

    @@ -247,7 +277,7 @@ the \( \chi^2 \) function becomes smaller.

  • 33
  • 34
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs025.html b/doc/pub/Regression/html/._Regression-bs025.html index 3596923c1..a1e2a076e 100644 --- a/doc/pub/Regression/html/._Regression-bs025.html +++ b/doc/pub/Regression/html/._Regression-bs025.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,42 +232,23 @@ MathJax.Hub.Config({ -

    Relative error

    +

    Minimizing the cost function

    -There are many ways to define the cost function. A simpler approach is to look at the relative difference between the training data and the predicted data, that is we define -the relative error as - -$$ -\epsilon_{\mathrm{relative}}= \frac{\vert \hat{y} -\hat{\tilde{y}}\vert}{\vert \hat{y}\vert}. -$$ - -We can modify easily the above Python code and plot the relative error instead -

    - - -

    import numpy as np
    -import matplotlib.pyplot as plt
    -from sklearn.linear_model import LinearRegression
    -
    -x = np.random.rand(100,1)
    -y = 5*x+0.01*np.random.randn(100,1)
    -linreg = LinearRegression()
    -linreg.fit(x,y)
    -ypredict = linreg.predict(x)
    -
    -plt.plot(x, np.abs(ypredict-y)/abs(y), "ro")
    -plt.axis([0,1.0,0.0, 0.5])
    -plt.xlabel(r'$x$')
    -plt.ylabel(r'$\epsilon_{\mathrm{relative}}$')
    -plt.title(r'Relative error')
    -plt.show()
    -
    -

    -Depending on the parameter in front of the normal distribution, we may -have a small or larger relative error. Try to play around with -different training data sets and study (graphically) the value of the -relative error. +Minimizing the cost function is a central aspect of +our discussions to come. Finding its minima as function of the model +parameters (\( \alpha \) and \( \beta \) in our case) will be a recurring +theme in these series of lectures. Essentially all machine learning +algorithms we will discuss center around the minimization of the +chosen cost function. This depends in turn on our specific +model for describing the data, a typical situation in supervised +learning. Automatizing the search for the minima of the cost function is a +central ingredient in all algorithms. Typical methods which are +employed are various variants of gradient methods. These will be +discussed in more detail later. Again, you'll be surprised to hear that +many practitioners minimize the above function ''by the eye', popularly dubbed as +'chi by the eye'. That is, change a parameter and see (visually and numerically) that +the \( \chi^2 \) function becomes smaller.

    @@ -266,7 +276,7 @@ relative error.

  • 34
  • 35
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs026.html b/doc/pub/Regression/html/._Regression-bs026.html index f827affc9..2b050bf0f 100644 --- a/doc/pub/Regression/html/._Regression-bs026.html +++ b/doc/pub/Regression/html/._Regression-bs026.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,48 +232,43 @@ MathJax.Hub.Config({ -

    The richness of scikit-learn

    +

    Relative error

    -As mentioned above, scikit-learn has an impressive functionality. -We can for example extract the values of \( \alpha \) and \( \beta \) and -their error estimates, or the variance and standard deviation and many -other properties from the statistical data analysis. +There are many ways to define the cost function. A simpler approach is to look at the relative difference between the training data and the predicted data, that is we define +the relative error as -

    -Here we show an -example of the functionality of scikit-learn. +$$ +\epsilon_{\mathrm{relative}}= \frac{\vert \hat{y} -\hat{\tilde{y}}\vert}{\vert \hat{y}\vert}. +$$ + +We can modify easily the above Python code and plot the relative error instead

    -

    import numpy as np 
    -import matplotlib.pyplot as plt 
    -from sklearn.linear_model import LinearRegression 
    -from sklearn.metrics import mean_squared_error, r2_score, mean_squared_log_error, mean_absolute_error
    +
    import numpy as np
    +import matplotlib.pyplot as plt
    +from sklearn.linear_model import LinearRegression
     
     x = np.random.rand(100,1)
    -y = 2.0+ 5*x+0.5*np.random.randn(100,1)
    +y = 5*x+0.01*np.random.randn(100,1)
     linreg = LinearRegression()
     linreg.fit(x,y)
     ypredict = linreg.predict(x)
    -print('The intercept alpha: \n', linreg.intercept_)
    -print('Coefficient beta : \n', linreg.coef_)
    -# The mean squared error                               
    -print("Mean squared error: %.2f" % mean_squared_error(y, ypredict))
    -# Explained variance score: 1 is perfect prediction                                 
    -print('Variance score: %.2f' % r2_score(y, ypredict))
    -# Mean squared log error                                                        
    -print('Mean squared log error: %.2f' % mean_squared_log_error(y, ypredict) )
    -# Mean absolute error                                                           
    -print('Mean absolute error: %.2f' % mean_absolute_error(y, ypredict))
    -plt.plot(x, ypredict, "r-")
    -plt.plot(x, y ,'ro')
    -plt.axis([0.0,1.0,1.5, 7.0])
    +
    +plt.plot(x, np.abs(ypredict-y)/abs(y), "ro")
    +plt.axis([0,1.0,0.0, 0.5])
     plt.xlabel(r'$x$')
    -plt.ylabel(r'$y$')
    -plt.title(r'Linear Regression fit ')
    +plt.ylabel(r'$\epsilon_{\mathrm{relative}}$')
    +plt.title(r'Relative error')
     plt.show()
     
    +

    +Depending on the parameter in front of the normal distribution, we may +have a small or larger relative error. Try to play around with +different training data sets and study (graphically) the value of the +relative error. +

    @@ -271,7 +295,7 @@ plt.show()

  • 35
  • 36
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs027.html b/doc/pub/Regression/html/._Regression-bs027.html index d68ae908b..79b422d69 100644 --- a/doc/pub/Regression/html/._Regression-bs027.html +++ b/doc/pub/Regression/html/._Regression-bs027.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,20 +232,48 @@ MathJax.Hub.Config({ -

    Functions in scikit-learn

    +

    The richness of scikit-learn

    -The function coef gives us the parameter \( \beta \) of our fit while intercept yields -\( \alpha \). Depending on the constant in front of the normal distribution, we get values near or far from \( alpha =2 \) and \( \beta =5 \). Try to play around with different parameters in front of the normal distribution. The function meansquarederror gives us the mean square error, a risk metric corresponding to the expected value of the squared (quadratic) error or loss defined as -$$ MSE(\hat{y},\hat{\tilde{y}}) = \frac{1}{n} -\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, -$$ +As mentioned above, scikit-learn has an impressive functionality. +We can for example extract the values of \( \alpha \) and \( \beta \) and +their error estimates, or the variance and standard deviation and many +other properties from the statistical data analysis.

    -The smaller the value, the better the fit. Ideally we would like to -have an MSE equal zero. The attentive reader has probably recognized -this function as being similar to the \( \chi^2 \) function defined above. +Here we show an +example of the functionality of scikit-learn. +

    + +

    import numpy as np 
    +import matplotlib.pyplot as plt 
    +from sklearn.linear_model import LinearRegression 
    +from sklearn.metrics import mean_squared_error, r2_score, mean_squared_log_error, mean_absolute_error
    +
    +x = np.random.rand(100,1)
    +y = 2.0+ 5*x+0.5*np.random.randn(100,1)
    +linreg = LinearRegression()
    +linreg.fit(x,y)
    +ypredict = linreg.predict(x)
    +print('The intercept alpha: \n', linreg.intercept_)
    +print('Coefficient beta : \n', linreg.coef_)
    +# The mean squared error                               
    +print("Mean squared error: %.2f" % mean_squared_error(y, ypredict))
    +# Explained variance score: 1 is perfect prediction                                 
    +print('Variance score: %.2f' % r2_score(y, ypredict))
    +# Mean squared log error                                                        
    +print('Mean squared log error: %.2f' % mean_squared_log_error(y, ypredict) )
    +# Mean absolute error                                                           
    +print('Mean absolute error: %.2f' % mean_absolute_error(y, ypredict))
    +plt.plot(x, ypredict, "r-")
    +plt.plot(x, y ,'ro')
    +plt.axis([0.0,1.0,1.5, 7.0])
    +plt.xlabel(r'$x$')
    +plt.ylabel(r'$y$')
    +plt.title(r'Linear Regression fit ')
    +plt.show()
    +

    @@ -243,7 +300,7 @@ this function as being similar to the \( \chi^2 \) function defined above.

  • 36
  • 37
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs028.html b/doc/pub/Regression/html/._Regression-bs028.html index 39f493b62..79c5f693a 100644 --- a/doc/pub/Regression/html/._Regression-bs028.html +++ b/doc/pub/Regression/html/._Regression-bs028.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,26 +232,19 @@ MathJax.Hub.Config({ -

    Other functions in scikit-learn

    +

    Functions in scikit-learn

    -The r2score function computes \( R^2 \), the coefficient of -determination. It provides a measure of how well future samples are -likely to be predicted by the model. Best possible score is 1.0 and it -can be negative (because the model can be arbitrarily worse). A -constant model that always predicts the expected value of \( \hat{y} \), -disregarding the input features, would get a \( R^2 \) score of \( 0.0 \). +The function coef gives us the parameter \( \beta \) of our fit while intercept yields +\( \alpha \). Depending on the constant in front of the normal distribution, we get values near or far from \( alpha =2 \) and \( \beta =5 \). Try to play around with different parameters in front of the normal distribution. The function meansquarederror gives us the mean square error, a risk metric corresponding to the expected value of the squared (quadratic) error or loss defined as +$$ MSE(\hat{y},\hat{\tilde{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +$$

    -If \( \tilde{\hat{y}}_i \) is the predicted value of the \( i-th \) sample and \( y_i \) is the corresponding true value, then the score \( R^2 \) is defined as -$$ -R^2(\hat{y}, \tilde{\hat{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, -$$ - -where we have defined the mean value of \( \hat{y} \) as -$$ -\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. -$$ +The smaller the value, the better the fit. Ideally we would like to +have an MSE equal zero. The attentive reader has probably recognized +this function as being similar to the \( \chi^2 \) function defined above.

    @@ -249,6 +271,8 @@ $$

  • 36
  • 37
  • 38
  • +
  • ...
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs029.html b/doc/pub/Regression/html/._Regression-bs029.html index 6a182d377..33cd41ef8 100644 --- a/doc/pub/Regression/html/._Regression-bs029.html +++ b/doc/pub/Regression/html/._Regression-bs029.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,27 +232,26 @@ MathJax.Hub.Config({ -

    The mean absolute error and other functions in scikit-learn

    +

    Other functions in scikit-learn

    -Another quantity will meet again in our discussions of regression analysis is - mean absolute error (MAE), a risk metric corresponding to the expected value of the absolute error loss or what we call the \( l1 \)-norm loss. In our discussion above we presented the relative error. -The MAE is defined as follows -$$ -\text{MAE}(\hat{y}, \hat{\tilde{y}}) = \frac{1}{n} \sum_{i=0}^{n-1} \left| y_i - \tilde{y}_i \right|. -$$ - -Finally we present the -squared logarithmic (quadratic) error -$$ -\text{MSLE}(\hat{y}, \hat{\tilde{y}}) = \frac{1}{n} \sum_{i=0}^{n - 1} (\log_e (1 + y_i) - \log_e (1 + \tilde{y}_i) )^2, -$$ +The r2score function computes \( R^2 \), the coefficient of +determination. It provides a measure of how well future samples are +likely to be predicted by the model. Best possible score is 1.0 and it +can be negative (because the model can be arbitrarily worse). A +constant model that always predicts the expected value of \( \hat{y} \), +disregarding the input features, would get a \( R^2 \) score of \( 0.0 \).

    -where \( \log_e (x) \) stands for the natural logarithm of \( x \). This error -estimate is best to use when targets having exponential growth, such -as population counts, average sales of a commodity over a span of -years etc. +If \( \tilde{\hat{y}}_i \) is the predicted value of the \( i-th \) sample and \( y_i \) is the corresponding true value, then the score \( R^2 \) is defined as +$$ +R^2(\hat{y}, \tilde{\hat{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +$$ + +where we have defined the mean value of \( \hat{y} \) as +$$ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +$$

    @@ -249,6 +277,9 @@ years etc.

  • 36
  • 37
  • 38
  • +
  • 39
  • +
  • ...
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs030.html b/doc/pub/Regression/html/._Regression-bs030.html index a0e4dfa92..69b76d122 100644 --- a/doc/pub/Regression/html/._Regression-bs030.html +++ b/doc/pub/Regression/html/._Regression-bs030.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,50 +232,27 @@ MathJax.Hub.Config({ -

    Cubic polynomial in scikit-learn

    +

    The mean absolute error and other functions in scikit-learn

    -We will discuss in more -detail these and other functions in the various lectures. We conclude this part with another example. Instead of -a linear \( x \)-dependence we study now a cubic polynomial and use the polynomial regression analysis tools of scikit-learn. +Another quantity will meet again in our discussions of regression analysis is + mean absolute error (MAE), a risk metric corresponding to the expected value of the absolute error loss or what we call the \( l1 \)-norm loss. In our discussion above we presented the relative error. +The MAE is defined as follows +$$ +\text{MAE}(\hat{y}, \hat{\tilde{y}}) = \frac{1}{n} \sum_{i=0}^{n-1} \left| y_i - \tilde{y}_i \right|. +$$ + +Finally we present the +squared logarithmic (quadratic) error +$$ +\text{MSLE}(\hat{y}, \hat{\tilde{y}}) = \frac{1}{n} \sum_{i=0}^{n - 1} (\log_e (1 + y_i) - \log_e (1 + \tilde{y}_i) )^2, +$$

    - - -

    import matplotlib.pyplot as plt
    -import numpy as np
    -import random
    -from sklearn.linear_model import Ridge
    -from sklearn.preprocessing import PolynomialFeatures
    -from sklearn.pipeline import make_pipeline
    -from sklearn.linear_model import LinearRegression
    -
    -x=np.linspace(0.02,0.98,200)
    -noise = np.asarray(random.sample((range(200)),200))
    -y=x**3*noise
    -yn=x**3*100
    -poly3 = PolynomialFeatures(degree=3)
    -X = poly3.fit_transform(x[:,np.newaxis])
    -clf3 = LinearRegression()
    -clf3.fit(X,y)
    -
    -Xplot=poly3.fit_transform(x[:,np.newaxis])
    -poly3_plot=plt.plot(x, clf3.predict(Xplot), label='Cubic Fit')
    -plt.plot(x,yn, color='red', label="True Cubic")
    -plt.scatter(x, y, label='Data', color='orange', s=15)
    -plt.legend()
    -plt.show()
    -
    -def error(a):
    -    for i in y:
    -        err=(y-yn)/yn
    -    return abs(np.sum(err))/len(err)
    -
    -print (error(y))
    -
    -

    -Similarly, using R, we can perform similar studies. -(more details on R will be inserted later). +where \( \log_e (x) \) stands for the natural logarithm of \( x \). This error +estimate is best to use when targets having exponential growth, such +as population counts, average sales of a commodity over a span of +years etc.

    @@ -271,6 +277,10 @@ Similarly, using R, we can perform similar studies.

  • 36
  • 37
  • 38
  • +
  • 39
  • +
  • 40
  • +
  • ...
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs031.html b/doc/pub/Regression/html/._Regression-bs031.html index 3ad7cabb6..3033d8063 100644 --- a/doc/pub/Regression/html/._Regression-bs031.html +++ b/doc/pub/Regression/html/._Regression-bs031.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,47 +232,51 @@ MathJax.Hub.Config({ -

    Simple regression model with gradient descent

    -Add info about the equations, play around with different learning rates +

    Cubic polynomial in scikit-learn

    + +

    +We will discuss in more +detail these and other functions in the various lectures. We conclude this part with another example. Instead of +a linear \( x \)-dependence we study now a cubic polynomial and use the polynomial regression analysis tools of scikit-learn. +Add description of the various python commands. +

    -

    # Importing various packages
    -from math import exp, sqrt
    -from random import random, seed
    +
    import matplotlib.pyplot as plt
     import numpy as np
    -import matplotlib.pyplot as plt
    +import random
    +from sklearn.linear_model import Ridge
    +from sklearn.preprocessing import PolynomialFeatures
    +from sklearn.pipeline import make_pipeline
    +from sklearn.linear_model import LinearRegression
     
    -x = 2*np.random.rand(100,1)
    -y = 4+3*x+np.random.randn(100,1)
    +x=np.linspace(0.02,0.98,200)
    +noise = np.asarray(random.sample((range(200)),200))
    +y=x**3*noise
    +yn=x**3*100
    +poly3 = PolynomialFeatures(degree=3)
    +X = poly3.fit_transform(x[:,np.newaxis])
    +clf3 = LinearRegression()
    +clf3.fit(X,y)
     
    -xb = np.c_[np.ones((100,1)), x]
    -theta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)
    -print(theta_linreg)
    -theta = np.random.randn(2,1)
    -
    -eta = 0.1
    -Niterations = 1000
    -m = 100
    -
    -for iter in range(Niterations):
    -    gradients = 2.0/m*xb.T.dot(xb.dot(theta)-y)
    -    theta -= eta*gradients
    -
    -print(theta)
    -xnew = np.array([[0],[2]])
    -xbnew = np.c_[np.ones((2,1)), xnew]
    -ypredict = xbnew.dot(theta)
    -ypredict2 = xbnew.dot(theta_linreg)
    -plt.plot(xnew, ypredict, "r-")
    -plt.plot(xnew, ypredict2, "b-")
    -plt.plot(x, y ,'ro')
    -plt.axis([0,2.0,0, 15.0])
    -plt.xlabel(r'$x$')
    -plt.ylabel(r'$y$')
    -plt.title(r'Random numbers ')
    +Xplot=poly3.fit_transform(x[:,np.newaxis])
    +poly3_plot=plt.plot(x, clf3.predict(Xplot), label='Cubic Fit')
    +plt.plot(x,yn, color='red', label="True Cubic")
    +plt.scatter(x, y, label='Data', color='orange', s=15)
    +plt.legend()
     plt.show()
    +
    +def error(a):
    +    for i in y:
    +        err=(y-yn)/yn
    +    return abs(np.sum(err))/len(err)
    +
    +print (error(y))
     
    +

    +Using R, we can perform similar studies. +

    @@ -266,6 +299,11 @@ plt.show()

  • 36
  • 37
  • 38
  • +
  • 39
  • +
  • 40
  • +
  • 41
  • +
  • ...
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs032.html b/doc/pub/Regression/html/._Regression-bs032.html index cae569fdf..0f9b89474 100644 --- a/doc/pub/Regression/html/._Regression-bs032.html +++ b/doc/pub/Regression/html/._Regression-bs032.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,8 +232,7 @@ MathJax.Hub.Config({ -

    Simple regression model with stochastic gradient descent

    -Add info about the equations, play around with different learning rates +

    Polynomial Regression

    @@ -213,17 +241,24 @@ Add info about the equations, play around with different learning rates from random import random, seed import numpy as np import matplotlib.pyplot as plt -from sklearn.linear_model import SGDRegressor -x = 2*np.random.rand(100,1) -y = 4+3*x+np.random.randn(100,1) +m = 100 +x = 2*np.random.rand(m,1)+4. +y = 4+3*x*x+ +x-np.random.randn(m,1) -xb = np.c_[np.ones((100,1)), x] -theta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y) -print(theta_linreg) -sgdreg = SGDRegressor(n_iter = 50, penalty=None, eta0=0.1) -sgdreg.fit(x,y.ravel()) -print(sgdreg.intercept_, sgdreg.coef_) +xb = np.c_[np.ones((m,1)), x] +theta = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y) +xnew = np.array([[0],[2]]) +xbnew = np.c_[np.ones((2,1)), xnew] +ypredict = xbnew.dot(theta) + +plt.plot(xnew, ypredict, "r-") +plt.plot(x, y ,'ro') +plt.axis([0,2.0,0, 15.0]) +plt.xlabel(r'$x$') +plt.ylabel(r'$y$') +plt.title(r'Random numbers ') +plt.show()

    @@ -246,6 +281,12 @@ sgdreg.fit(x,y.

  • 36
  • 37
  • 38
  • +
  • 39
  • +
  • 40
  • +
  • 41
  • +
  • 42
  • +
  • ...
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs033.html b/doc/pub/Regression/html/._Regression-bs033.html index 21186180b..d55114e2c 100644 --- a/doc/pub/Regression/html/._Regression-bs033.html +++ b/doc/pub/Regression/html/._Regression-bs033.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -201,36 +230,32 @@ MathJax.Hub.Config({

     

     

     

    - + + +

    Linking the regression analysis with a statistical interpretation

    -

    Polynomial Regression

    +Before we proceed, and to link with our discussions of Bayesian statistics to come, it is useful the derive the standard regression analysis equations using a statistical interpretation. This allows us also to derive quantities like the variance and other expectation values in a rather straightforward way. - -

    # Importing various packages
    -from math import exp, sqrt
    -from random import random, seed
    -import numpy as np
    -import matplotlib.pyplot as plt
    +

    +It is assumed that \( \varepsilon_i +\sim \mathcal{N}(0, \sigma^2) \) and the \( \varepsilon_{i} \) are +independent, i.e.: +$$ +\begin{align*} +\mbox{Cov}(\varepsilon_{i_1}, +\varepsilon_{i_2}) & = \left\{ \begin{array}{lcc} \sigma^2 & \mbox{if} +& i_1 = i_2, \\ 0 & \mbox{if} & i_1 \not= i_2. \end{array} \right. +\end{align*} +$$ -m = 100 -x = 2*np.random.rand(m,1)+4. -y = 4+3*x*x+ +x-np.random.randn(m,1) +The randomness of \( \varepsilon_i \) implies that +\( \mathbf{Y}_i \) is also a random variable. In particular, +\( \mathbf{Y}_i \) is normally distributed, because \( \varepsilon_i \sim +\mathcal{N}(0, \sigma^2) \) and \( \mathbf{X}_{i,\ast} \, \beta \) is a +non-random scalar. To specify the parameters of the distribution of +\( \mathbf{Y}_i \) we need to calculate its first two moments. -xb = np.c_[np.ones((m,1)), x] -theta = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y) -xnew = np.array([[0],[2]]) -xbnew = np.c_[np.ones((2,1)), xnew] -ypredict = xbnew.dot(theta) - -plt.plot(xnew, ypredict, "r-") -plt.plot(x, y ,'ro') -plt.axis([0,2.0,0, 15.0]) -plt.xlabel(r'$x$') -plt.ylabel(r'$y$') -plt.title(r'Random numbers ') -plt.show() -

    @@ -251,6 +276,13 @@ plt.show()

  • 36
  • 37
  • 38
  • +
  • 39
  • +
  • 40
  • +
  • 41
  • +
  • 42
  • +
  • 43
  • +
  • ...
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs034.html b/doc/pub/Regression/html/._Regression-bs034.html index 364fa6719..a5c44e236 100644 --- a/doc/pub/Regression/html/._Regression-bs034.html +++ b/doc/pub/Regression/html/._Regression-bs034.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,84 +232,37 @@ MathJax.Hub.Config({ -

    Ridge and Lasso Regression

    +

    Expectation value and variance

    +Its expectation equals: +$$ +\begin{align*} +\mathbb{E}(Y_i) & = +\mathbb{E}(\mathbf{X}_{i, \ast} \, \beta) + \mathbb{E}(\varepsilon_i) +\, \, \, = \, \, \, \mathbf{X}_{i, \ast} \, \beta, +\end{align*} +$$ - -

    import matplotlib.pyplot as plt
    -import numpy as np
    -from sklearn import linear_model
    -from sklearn.linear_model import LinearRegression
    -from sklearn.metrics import mean_squared_error, r2_score
    +while
    +its variance is 
    +$$
    +\begin{align*} \mbox{Var}(Y_i) & = \mathbb{E} \{ [Y_i
    +- \mathbb{E}(Y_i)]^2 \} \, \, \, = \, \, \, \mathbb{E} ( Y_i^2 ) -
    +[\mathbb{E}(Y_i)]^2  \\  & = \mathbb{E} [ ( \mathbf{X}_{i, \ast} \,
    +\beta + \varepsilon_i )^2] - ( \mathbf{X}_{i, \ast} \, \beta)^2 \\ &
    += \mathbb{E} [ ( \mathbf{X}_{i, \ast} \, \beta)^2 + 2 \varepsilon_i
    +\mathbf{X}_{i, \ast} \, \beta + \varepsilon_i^2 ] - ( \mathbf{X}_{i,
    +\ast} \, \beta)^2 \\  & = ( \mathbf{X}_{i, \ast} \, \beta)^2 + 2
    +\mathbb{E}(\varepsilon_i) \mathbf{X}_{i, \ast} \, \beta +
    +\mathbb{E}(\varepsilon_i^2 ) - ( \mathbf{X}_{i, \ast} \, \beta)^2 
    +\\ & = \mathbb{E}(\varepsilon_i^2 ) \, \, \, = \, \, \,
    +\mbox{Var}(\varepsilon_i) \, \, \, = \, \, \, \sigma^2.  
    +\end{align*}
    +$$
     
    -#creating data with random noise
    -x=np.arange(50)
    +Hence, \( Y_i \sim \mathcal{N}( \mathbf{X}_{i, \ast} \, \beta, \sigma^2) \).
     
    -delta=np.random.uniform(-2.5,2.5, size=(50))
    -np.random.shuffle(delta)
    -y =0.5*x+5+delta
    -
    -#arranging data into 2x50 matrix
    -a=np.array(x) #inputs
    -b=np.array(y) #outputs
    -
    -#Split into training and test
    -X_train=a[:37, np.newaxis]
    -X_test=a[37:, np.newaxis]
    -y_train=b[:37]
    -y_test=b[37:]
    -
    -print ("X_train: ", X_train.shape)
    -print ("y_train: ", y_train.shape)
    -print ("X_test: ", X_test.shape)
    -print ("y_test: ", y_test.shape)
    -
    -print ("------------------------------------")
    -
    -print ("Ordinary Least Squares")
    -#Add Ordinary Least Squares fit
    -reg=LinearRegression()
    -reg.fit(X_train, y_train)
    -pred=reg.predict(X_test)
    -print ("Prediction Shape: ", pred.shape)
    -
    -print('Coefficients: \n', reg.coef_)
    -# The mean squared error
    -print("Mean squared error: %.2f"
    -      % mean_squared_error(y_test, pred))
    -# Explained variance score: 1 is perfect prediction
    -print('Variance score: %.2f' % r2_score(y_test, pred))
    -
    -#plot
    -plt.scatter(X_test,y_test,color='green', label="Training Data")
    -plt.plot(X_test, pred, color='black', label="Fit Line")
    -plt.legend()
    -plt.show()
    -
    -print ("------------------------------------")
    -
    -print ("Ridge Regression")
    -
    -ridge=linear_model.RidgeCV(alphas=[0.1,1.0,10.0])
    -ridge.fit(X_train,y_train)
    -print ("Ridge Coefficient: ",ridge.coef_)
    -print ("Ridge Intercept: ", ridge.intercept_)
    -#Look into graphing with Ridge fit
    -
    -print ("------------------------------------")
    -
    -print ("Lasso")
    -lasso=linear_model.Lasso(alpha=0.1)
    -lasso.fit(X_train,y_train)
    -predl=lasso.predict(X_test)
    -print("Lasso Coefficient: ", lasso.coef_)
    -print("Lasso Intercept: ", lasso.intercept_)
    -plt.scatter(X_test,y_test,color='green', label="Training Data")
    -plt.plot(X_test, predl, color='blue', label="Lasso")
    -plt.legend()
    -plt.show()
    -

    @@ -300,6 +282,14 @@ plt.show()

  • 36
  • 37
  • 38
  • +
  • 39
  • +
  • 40
  • +
  • 41
  • +
  • 42
  • +
  • 43
  • +
  • 44
  • +
  • ...
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs035.html b/doc/pub/Regression/html/._Regression-bs035.html index 476608042..3902c8b08 100644 --- a/doc/pub/Regression/html/._Regression-bs035.html +++ b/doc/pub/Regression/html/._Regression-bs035.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -207,16 +236,20 @@ MathJax.Hub.Config({

    -How can we use the singular value decomposition to find the parameters \( \beta_j \)? More details will come. We first note that a general \( m\times n \) matrix \( \hat{A} \) can be written in terms of a diagonal matrix \( \hat{\Sigma} \) of dimensionality \( n\times n \) and two orthognal matrices \( \hat{U} \) and \( \hat{V} \), where the first has dimensionality \( m \times n \) and the last dimensionality \( n\times n \). We have then -$$ -\hat{A} = \hat{U}\hat{\Sigma}\hat{V} -$$ -

    -
    -

    -Add codes and discuss this in connection with lasso and ridge, show example where the standard inversion of a matrix fails and where SVD comes to rescue +A general +\( m\times n \) matrix \( \hat{A} \) can be written in terms of a diagonal +matrix \( \hat{D} \) of dimensionality \( n\times n \) and two orthognal +matrices \( \hat{U} \) and \( \hat{V} \), where the first has dimensionality +\( m \times m \) and the last dimensionality \( n\times n \). +We have then +$$ +\hat{A} = \hat{U}\hat{D}\hat{V}^T +$$ +

    + +

    @@ -236,6 +269,15 @@ Add codes and discuss this in connection with lasso and ridge, show example wher

  • 36
  • 37
  • 38
  • +
  • 39
  • +
  • 40
  • +
  • 41
  • +
  • 42
  • +
  • 43
  • +
  • 44
  • +
  • 45
  • +
  • ...
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs036.html b/doc/pub/Regression/html/._Regression-bs036.html index b5551cea1..a2a01b043 100644 --- a/doc/pub/Regression/html/._Regression-bs036.html +++ b/doc/pub/Regression/html/._Regression-bs036.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,11 +232,84 @@ MathJax.Hub.Config({ -

    Lasso and Ridge regression

    +

    Code examples for Ridge and Lasso Regression

    -Discuss the mathematics here + +

    import matplotlib.pyplot as plt
    +import numpy as np
    +from sklearn import linear_model
    +from sklearn.linear_model import LinearRegression
    +from sklearn.metrics import mean_squared_error, r2_score
    +
    +#creating data with random noise
    +x=np.arange(50)
    +
    +delta=np.random.uniform(-2.5,2.5, size=(50))
    +np.random.shuffle(delta)
    +y =0.5*x+5+delta
    +
    +#arranging data into 2x50 matrix
    +a=np.array(x) #inputs
    +b=np.array(y) #outputs
    +
    +#Split into training and test
    +X_train=a[:37, np.newaxis]
    +X_test=a[37:, np.newaxis]
    +y_train=b[:37]
    +y_test=b[37:]
    +
    +print ("X_train: ", X_train.shape)
    +print ("y_train: ", y_train.shape)
    +print ("X_test: ", X_test.shape)
    +print ("y_test: ", y_test.shape)
    +
    +print ("------------------------------------")
    +
    +print ("Ordinary Least Squares")
    +#Add Ordinary Least Squares fit
    +reg=LinearRegression()
    +reg.fit(X_train, y_train)
    +pred=reg.predict(X_test)
    +print ("Prediction Shape: ", pred.shape)
    +
    +print('Coefficients: \n', reg.coef_)
    +# The mean squared error
    +print("Mean squared error: %.2f"
    +      % mean_squared_error(y_test, pred))
    +# Explained variance score: 1 is perfect prediction
    +print('Variance score: %.2f' % r2_score(y_test, pred))
    +
    +#plot
    +plt.scatter(X_test,y_test,color='green', label="Training Data")
    +plt.plot(X_test, pred, color='black', label="Fit Line")
    +plt.legend()
    +plt.show()
    +
    +print ("------------------------------------")
    +
    +print ("Ridge Regression")
    +
    +ridge=linear_model.RidgeCV(alphas=[0.1,1.0,10.0])
    +ridge.fit(X_train,y_train)
    +print ("Ridge Coefficient: ",ridge.coef_)
    +print ("Ridge Intercept: ", ridge.intercept_)
    +#Look into graphing with Ridge fit
    +
    +print ("------------------------------------")
    +
    +print ("Lasso")
    +lasso=linear_model.Lasso(alpha=0.1)
    +lasso.fit(X_train,y_train)
    +predl=lasso.predict(X_test)
    +print("Lasso Coefficient: ", lasso.coef_)
    +print("Lasso Intercept: ", lasso.intercept_)
    +plt.scatter(X_test,y_test,color='green', label="Training Data")
    +plt.plot(X_test, predl, color='blue', label="Lasso")
    +plt.legend()
    +plt.show()
    +

    @@ -225,6 +327,14 @@ Discuss the mathematics here

  • 36
  • 37
  • 38
  • +
  • 39
  • +
  • 40
  • +
  • 41
  • +
  • 42
  • +
  • 43
  • +
  • 44
  • +
  • 45
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs037.html b/doc/pub/Regression/html/._Regression-bs037.html index 1a3204fc2..d7790e7d6 100644 --- a/doc/pub/Regression/html/._Regression-bs037.html +++ b/doc/pub/Regression/html/._Regression-bs037.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,14 +232,55 @@ MathJax.Hub.Config({ -

    Logistic regression

    -Add discussion about classification versus regression, show examples of more than two cases and why regression is not the best approach. Motivate for k-nearest neighbors +

    From standard regression to Ridge regressions

    -Add examples on classification problems +One of the typical problems we encounter with linear regression, in particular +when the matrix \( \hat{X} \) (our so-called design matrix) is high-dimensional, +are problems with near singular or singular matrices. The column vectors of \( \hat{X} \) +may be linearly dependent, normally referred to as super-collinearity. +This means that the matrix may be rank deficient and it is basically impossible to +to model the data using linear regression. As an example, consider the matrix +$$ +\begin{align*} +\mathbf{X} & = \left[ +\begin{array}{rrr} +1 & -1 & 2 +\\ +1 & 0 & 1 +\\ +1 & 2 & -1 +\\ +1 & 1 & 0 +\end{array} \right] +\end{align*} +$$

    +The columns of \( \hat{X} \) are linearly dependent. We se this easily since the +the first column is the row-wise sum of the other two columns. The rank (more correct, +the column rank) of a matrix is the dimension of the space spanned by the +column vectors. Hence, the rank of \( \mathbf{X} \) is equal to the number +of linearly independent columns. In this particular case the matrix has rank 2. +

    +Super-collinearity of an \( (n \times p) \)-dimensional design matrix \( \mathbf{X} \) implies +that the inverse of the matrix \( \hat{X}^T\hat{x} \) (the matrix we needto invert to solve the linear regression equations) is non-invertible. If we have a square matrix that does not have an inverse, we say this matrix singular. The example here demonstrates this +$$ +\begin{align*} +\hat{X} & = \left[ +\begin{array}{rr} +1 & -1 +\\ +1 & -1 +\end{array} \right]. +\end{align*} +$$ + +We see easily that \( \mbox{det}(\hat{X}) = x_{11} x_{22} - x_{12} x_{21} = 1 \times (-1) - 1 \times (-1) = 0 \). Hence, \( \mathbf{X} \) is singular and its inverse is undefined. +This is equivalent to saying that the matrix \( \hat{X} \) has at least an eigenvalue which is zero. + +

    diff --git a/doc/pub/Regression/html/._Regression-bs038.html b/doc/pub/Regression/html/._Regression-bs038.html new file mode 100644 index 000000000..cca079168 --- /dev/null +++ b/doc/pub/Regression/html/._Regression-bs038.html @@ -0,0 +1,307 @@ + + + + + + + +Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

    Fixing the singularity

    + +

    +If our design matrix \( \hat{X} \) which enters the linear regression problem +$$ +\begin{align} +\hat{\beta} & = (\hat{X}^{T} \hat{X})^{-1} \hat{X}^{T} \hat{y}, +\tag{1} +\end{align} +$$ + +has linearly dependent column vectors, we will not be able to compute the inverse +of \( \hat{X}^T\hat{X} \) and we cannot find the parameters (estimators) \( \beta_i \). +The estimators are only well-defined if \( (\hat{X}^{T}\hat{X})^{-1} \) exits. +This is more likely to happen when the matrix \( \hat{X} \) is high-dimensional. In this case it is likely to encounter a situation where +the regression parameters \( \beta_i \) cannot be estimated. + +

    +The ad hoc approach which was introduced in the 70s was simply to add a diagonal component to the matrix to invert, that is we change +$$ +\hat{X}^{T} \hat{X} \rightarrow \hat{X}^{T} \hat{X}+\lambda \hat{I}, +$$ + +where \( \hat{I} \) is the identity matrix. + +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Regression/html/._Regression-bs039.html b/doc/pub/Regression/html/._Regression-bs039.html new file mode 100644 index 000000000..aa8c96dc3 --- /dev/null +++ b/doc/pub/Regression/html/._Regression-bs039.html @@ -0,0 +1,392 @@ + + + + + + + +Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

    A second-order polynomial with Ridge and Lasso

    +

    + + +

    import numpy as np
    +import matplotlib.pyplot as plt
    +from sklearn.linear_model import Ridge
    +from sklearn.metrics import r2_score
    +
    +np.random.seed(4155)
    +
    +n_samples = 100
    +
    +x = np.random.rand(n_samples,1)
    +y = 5*x*x + 0.1*np.random.rand(n_samples,1)
    +
    +# Centering  x and y.
    +x_ = x - np.mean(x)
    +y_ = y - np.mean(y) # beta_0 = mean(y)
    +
    +X = np.c_[np.ones((n_samples,1)), x, x**2]
    +X_ = np.c_[x_, x_**2]
    +
    +
    +### 1.
    +lmb_values = [1e-4, 1e-3, 1e-2, 10, 1e2, 1e4]
    +num_values = len(lmb_values)
    +
    +## Ridge-regression of centered and not centered data
    +beta_ridge = np.zeros((3,num_values))
    +beta_ridge_centered = np.zeros((3,num_values))
    +
    +I3 = np.eye(3)
    +I2 = np.eye(2)
    +
    +for i,lmb in enumerate(lmb_values):
    +    beta_ridge[:,i] = (np.linalg.inv( X.T @ X + lmb*I3) @ X.T @ y).flatten()
    +    beta_ridge_centered[1:,i] = (np.linalg.inv( X_.T @ X_ + lmb*I2) @ X_.T @ y_).flatten()
    +
    +# sett beta_0 = np.mean(y)
    +beta_ridge_centered[0,:] = np.mean(y)
    +
    +## OLS (ordinary least squares) solution 
    +beta_ls = np.linalg.inv( X.T @ X ) @ X.T @ y
    +
    +## Evaluate the models
    +pred_ls = X @ beta_ls
    +pred_ridge =  X @ beta_ridge
    +pred_ridge_centered =  X_ @ beta_ridge_centered[1:] + beta_ridge_centered[0,:]
    +
    +## Plot the results
    +
    +# Sorting
    +sort_ind = np.argsort(x[:,0])
    +
    +x_plot = x[sort_ind,0]
    +x_centered_plot = x_[sort_ind,0]
    +
    +pred_ls_plot = pred_ls[sort_ind,0]
    +pred_ridge_plot = pred_ridge[sort_ind,:]
    +pred_ridge_centered_plot = pred_ridge_centered[sort_ind,:]
    +
    +# Plott not centered
    +plt.plot(x_plot,pred_ls_plot,label='ls')
    +
    +for i in range(num_values):
    +    plt.plot(x_plot,pred_ridge_plot[:,i],label='ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x,y,'ro')
    +
    +plt.title('linear regression on un-centered data')
    +plt.legend()
    +
    +# Plott centered
    +plt.figure()
    +
    +for i in range(num_values):
    +    plt.plot(x_centered_plot,pred_ridge_centered_plot[:,i],label='ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x_,y,'ro')
    +
    +plt.title('linear regression on centered data')
    +plt.legend()
    +
    +
    +# 2.
    +
    +pred_ridge_scikit =  np.zeros((n_samples,num_values))
    +for i,lmb in enumerate(lmb_values):
    +    pred_ridge_scikit[:,i] = (Ridge(alpha=lmb,fit_intercept=False).fit(X,y).predict(X)).flatten() # fit_intercept=False fordi bias er allerede i X
    +
    +plt.figure()
    +
    +plt.plot(x_plot,pred_ls_plot,label='ls')
    +
    +for i in range(num_values):
    +    plt.plot(x_plot,pred_ridge_scikit[sort_ind,i],label='scikit-ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x,y,'ro')
    +plt.legend()
    +plt.title('linear regression using scikit')
    +
    +plt.show()
    +
    +### R2-score of the results
    +for i in range(num_values):
    +    print('lambda = %g'%lmb_values[i])
    +    print('r2 for scikit: %g'%r2_score(y,pred_ridge_scikit[:,i]))
    +    print('r2 for own code, not centered: %g'%r2_score(y,pred_ridge[:,i]))
    +    print('r2 for own, centered: %g\n'%r2_score(y,pred_ridge_centered[:,i]))
    +
    +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Regression/html/._Regression-bs040.html b/doc/pub/Regression/html/._Regression-bs040.html new file mode 100644 index 000000000..e62c176d7 --- /dev/null +++ b/doc/pub/Regression/html/._Regression-bs040.html @@ -0,0 +1,304 @@ + + + + + + + +Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

    Fitting vs. predicting when data is in the model class

    + +

    +We start by considering the case +\( f(x)=2x \). + +

    +Then the data is clearly generated by a model that is contained within +all three model classes we are using to make predictions (linear +models, third order polynomials, and tenth order polynomials). + +

    +Run the code for the following cases: + +

      +
    1. For \( f(x)=2x \) , \( Ntrain=10 \) and \( \sigma =0 \) (noiseless case), train the three classes of models (linear, third-order polynomial, and tenth order polynomial) for a training set when \( x \in [0,1] \) . Make graphs comparing fits for different order of polynomials. Which model fits the data the best?
    2. +
    3. Do you think that the data that has the least error on the training set will also make the best predictions? Why or why not? Can you try to discuss and formalize your intuition? What can go right and what can go wrong?
    4. +
    5. Check your answer by seeing how well your fits predict newly generated test data (including on data outside the range you fit on, for example \( x \in [0,1.2] \) ) using the code below. How well do you do on points in the range of x where you trained the model? How about points outside the original training data set?
    6. +
    7. Repeat the above for \( f(x)=2x \) , \( Ntrain=10 \) , and \( \sigma=1 \) . What changes?
    8. +
    + +Repeat the exercises above for \( f(x)=2x \) , \( Ntrain=100 \) , and \( \sigma=1 \) . What changes? +Summarize what you have learned about the relationship between model complexity (number of parameters), goodness of fit on training data, and the ability to predict well. + +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Regression/html/._Regression-bs041.html b/doc/pub/Regression/html/._Regression-bs041.html new file mode 100644 index 000000000..0449005ac --- /dev/null +++ b/doc/pub/Regression/html/._Regression-bs041.html @@ -0,0 +1,291 @@ + + + + + + + +Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

    Fitting versus predicting when data is not in the model class

    + +

    +Thus far, we have considered the case where the data is generated using a model contained in the model class. Now consider \( f(x)=2x-10x^5+15x^{10} \) . Notice that the for linear and third-order polynomial the true model \( f(x) \) is not contained in model class. + +

      +
    1. Do better fits lead to better predictions?
    2. +
    3. What is the relationship between the true model for generating the data and the model class that has the most predictive power? How is this related to the model complexity? How does this depend on the number of data points \( Ntrain \) and \( \sigma \)?
    4. +
    + +Summarize what you think you learned about the relationship of knowing the true model class and predictive power. + +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Regression/html/._Regression-bs042.html b/doc/pub/Regression/html/._Regression-bs042.html new file mode 100644 index 000000000..ff3f3130a --- /dev/null +++ b/doc/pub/Regression/html/._Regression-bs042.html @@ -0,0 +1,365 @@ + + + + + + + +Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

    The code

    + +

    + + +

    import numpy as np
    +import sklearn as sk
    +from sklearn import datasets, linear_model
    +from sklearn.preprocessing import PolynomialFeatures
    +
    +import matplotlib as mpl
    +from matplotlib import pyplot as plt
    +
    +%matplotlib notebook
    +
    +# The Training Data
    +
    +N_train=100
    +
    +sigma_train=1;
    +
    +# Train on integers
    +x=np.linspace(0.05,0.95,N_train)
    +# Draw random noise
    +s = sigma_train*np.random.randn(N_train)
    +
    +#linear
    +y=2*x+s
    +
    +#Tenth Order
    +#y=2*x-10*x**5+15*x**10+s
    +
    +p1=plt.plot(x,y, "o",ms=15, label='Training')
    +
    +#Linear Regression
    +# Create linear regression object
    +clf = linear_model.LinearRegression()
    +
    +# Train the model using the training sets
    +clf.fit(x[:, np.newaxis], y)
    +# The coefficients
    +
    +xplot=np.linspace(0.02,0.98,200)
    +linear_plot=plt.plot(xplot, clf.predict(xplot[:, np.newaxis]),label='Linear')
    +
    +#Polynomial Regression
    +
    +
    +poly3 = PolynomialFeatures(degree=3)
    +X = poly3.fit_transform(x[:,np.newaxis])
    +clf3 = linear_model.LinearRegression()
    +clf3.fit(X,y)
    +
    +
    +Xplot=poly3.fit_transform(xplot[:,np.newaxis])
    +poly3_plot=plt.plot(xplot, clf3.predict(Xplot), label='Poly 3')
    +
    +
    +
    +#poly5 = PolynomialFeatures(degree=5)
    +#X = poly5.fit_transform(x[:,np.newaxis])
    +#clf5 = linear_model.LinearRegression()
    +#clf5.fit(X,y)
    +
    +#Xplot=poly5.fit_transform(xplot[:,np.newaxis])
    +#plt.plot(xplot, clf5.predict(Xplot), 'r--',linewidth=1)
    +
    +poly10 = PolynomialFeatures(degree=10)
    +X = poly10.fit_transform(x[:,np.newaxis])
    +clf10 = linear_model.LinearRegression()
    +clf10.fit(X,y)
    +
    +Xplot=poly10.fit_transform(xplot[:,np.newaxis])
    +poly10_plot=plt.plot(xplot, clf10.predict(Xplot), label='Poly 10')
    +
    +axes = plt.gca()
    +axes.set_ylim([-7,7])
    +
    +handles, labels=axes.get_legend_handles_labels()
    +plt.legend(handles,labels, loc='lower center')
    +plt.xlabel("$x$")
    +plt.ylabel("$y$")
    +Title="$N=$"+str(N_train)+", $\sigma=$"+str(sigma_train)
    +plt.title(Title+" (train)")
    +plt.tight_layout()
    +plt.show()
    +
    +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Regression/html/._Regression-bs043.html b/doc/pub/Regression/html/._Regression-bs043.html new file mode 100644 index 000000000..b45774529 --- /dev/null +++ b/doc/pub/Regression/html/._Regression-bs043.html @@ -0,0 +1,327 @@ + + + + + + + +Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

    Generating test data

    +

    + + +

    # Generate Test Data
    +
    +#Number of test data
    +N_test=20
    +
    +sigma_test=sigma_train
    +
    +max_x=1.2
    +x_test=max_x*np.random.random(N_test)
    +# Draw random noise
    +s_test = sigma_test*np.random.randn(N_test)
    +
    +#Linear
    +y_test=2*x_test+s_test
    +#Tenth order
    +#y_test=2*x_test-10*x_test**5+15*x_test**10+s_test
    +
    +#Make design matrices for prediction
    +x_plot=np.linspace(0,max_x, 200)
    +X3 = poly3.fit_transform(x_plot[:,np.newaxis])
    +X10 = poly10.fit_transform(x_plot[:,np.newaxis])
    +
    +%matplotlib notebook
    +
    +fig = plt.figure() 
    +p1=plt.plot(x_test,y_test.transpose(), 'o', ms=12, label='data')
    +p2=plt.plot(x_plot,clf.predict(x_plot[:,np.newaxis]), label='linear')
    +p3=plt.plot(x_plot,clf3.predict(X3), label='3rd order')
    +p10=plt.plot(x_plot,clf10.predict(X10), label='10th order')
    +
    +
    +plt.legend(loc=2)
    +plt.xlabel('$x$')
    +plt.ylabel('$y$')
    +plt.legend(loc='best')
    +plt.title(Title+" (pred.)")
    +plt.tight_layout()
    +plt.show()
    +
    +#Linear Filename
    +#filename_test=Title+"pred-linear.pdf"
    +#Tenth Order Filename
    +#filename_test=Title+"pred-o10.pdf"
    +#plt.savefig(filename_test)
    +#plt.ylim((-6,12))
    +
    +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Regression/html/._Regression-bs044.html b/doc/pub/Regression/html/._Regression-bs044.html new file mode 100644 index 000000000..1ad5ddece --- /dev/null +++ b/doc/pub/Regression/html/._Regression-bs044.html @@ -0,0 +1,278 @@ + + + + + + + +Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

    Lasso regression

    + +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Regression/html/._Regression-bs045.html b/doc/pub/Regression/html/._Regression-bs045.html new file mode 100644 index 000000000..59fd87d05 --- /dev/null +++ b/doc/pub/Regression/html/._Regression-bs045.html @@ -0,0 +1,275 @@ + + + + + + + +Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

    Logistic regression

    + +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Regression/html/Regression-bs.html b/doc/pub/Regression/html/Regression-bs.html index 9560a3323..c92c12f8a 100644 --- a/doc/pub/Regression/html/Regression-bs.html +++ b/doc/pub/Regression/html/Regression-bs.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -222,7 +251,7 @@ MathJax.Hub.Config({
    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

    -

    Aug 24, 2018

    +

    Sep 6, 2018


    @@ -246,7 +275,7 @@ MathJax.Hub.Config({

  • 9
  • 10
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/Regression-reveal.html b/doc/pub/Regression/html/Regression-reveal.html index d5aaa438c..13e0c45e3 100644 --- a/doc/pub/Regression/html/Regression-reveal.html +++ b/doc/pub/Regression/html/Regression-reveal.html @@ -148,7 +148,7 @@ MathJax.Hub.Config({
    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

     
    -

    Aug 24, 2018

    +

    Sep 6, 2018


    @@ -182,7 +182,35 @@ A regression model aims at finding a likelihood function \( p(y\vert \hat{x}) \)

    -

    General linear models

    +

    Regression analysis, overarching aims II

    +
    + +

    +Consider an experiment in which \( p \) characteristics of \( n \) samples are +measured. The data from this experiment are denoted \( \mathbf{X} \), with +\( \mathbf{X} \) as above. The matrix \( \mathbf{X} \) is called the design +matrix. Additional information of the samples is available in the +form of \( \mathbf{Y} \) (also as above). The variable \( \mathbf{Y} \) is +generally referred to as the response variable. The aim of +regression analysis is to explain \( \mathbf{Y} \) in terms of +\( \mathbf{X} \) through a functional relationship like \( Y_i = +f(\mathbf{X}_{i,\ast}) \). When no prior knowledge on the form of +\( f(\cdot) \) is available, it is common to assume a linear relationship +between \( \mathbf{X} \) and \( \mathbf{Y} \). This assumption gives rise to +the linear regression model where \( \beta = (\beta_1, \ldots, +\beta_p)^{\top} \) is the regression parameter. The parameter +\( \beta_j \), \( j=1, \ldots, p \), represents the effect size of covariate +\( j \) on the response. That is, for each unit change in covariate \( j \) +(while keeping the other covariates fixed) the observed change in the +response is equal to \( \beta_j \). + + +

    +
    + + +
    +

    General linear models

    @@ -204,7 +232,7 @@ where \( \epsilon_i \) is the error in our approximation.

    -

    Rewriting the fitting procedure as a linear algebra problem

    +

    Rewriting the fitting procedure as a linear algebra problem

    @@ -225,7 +253,7 @@ $$

    -

    Rewriting the fitting procedure as a linear algebra problem, follows

    +

    Rewriting the fitting procedure as a linear algebra problem, follows

    @@ -275,7 +303,7 @@ $$

    -

    Generalizing the fitting procedure as a linear algebra problem

    +

    Generalizing the fitting procedure as a linear algebra problem

    @@ -299,7 +327,7 @@ $$

    -

    Generalizing the fitting procedure as a linear algebra problem

    +

    Generalizing the fitting procedure as a linear algebra problem

    @@ -330,7 +358,7 @@ The left-hand side of this equation forms know. Our error vector \( \hat{\epsilo

    -

    Optimizing our parameters

    +

    Optimizing our parameters

    @@ -353,7 +381,7 @@ $$

    -

    Optimizing our parameters, more details

    +

    Optimizing our parameters, more details

    @@ -382,7 +410,7 @@ $$

    -

    Interpretations and optimizing our parameters

    +

    Interpretations and optimizing our parameters

    @@ -430,7 +458,7 @@ $$

    -

    Interpretations and optimizing our parameters

    +

    Interpretations and optimizing our parameters

    @@ -461,7 +489,7 @@ $$

    -

    Interpretations and optimizing our parameters

    +

    Interpretations and optimizing our parameters

    @@ -494,7 +522,7 @@ meaning that the solution for \( \hat{\beta} \) is the one which minimizes the r

    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -517,7 +545,7 @@ where the matrix \( \hat{\Sigma} \) is a diagonal matrix with \( \sigma_i \) as

    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -548,7 +576,7 @@ where we have defined the matrix \( \hat{A} =\hat{X}/\hat{\Sigma} \) with matrix

    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -577,7 +605,7 @@ $$

    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -613,7 +641,7 @@ $$

    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -642,7 +670,7 @@ $$

    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -698,7 +726,7 @@ This approach (different linear and non-linear regression) suffers often from bo

    -

    Simple regression model

    +

    Simple regression model

    We are now ready to write our first program which aims at solving the above linear regression equations. We start with data we have produced ourselves, in this case normally distributed random numbers along the \( x \)-axis. These numbers define then the value of a function \( y(x)=4+3x+N(0,1) \). Thereafter we order the \( x \) values and employ our linear regression algorithm to set up the best fit. Here we find it useful to use the numpy function \( c\_ \) arrays where arrays are stacked along their last axis after being upgraded to at least two dimensions with ones post-pended to the shape. The following examples help in understanding what happens

    @@ -738,7 +766,7 @@ We see that, as expected, a linear fit gives a seemingly (from the graph) good r

    -

    Simple regression model, now using scikit-learn

    +

    Simple regression model, now using scikit-learn

    We can repeat the above algorithm using scikit-learn as follows @@ -770,7 +798,7 @@ plt.show()

    -

    Simple linear regression model using scikit-learn

    +

    Simple linear regression model using scikit-learn

    We start with perhaps our simplest possible example, using scikit-learn to perform linear regression analysis on a data set produced by us. @@ -841,7 +869,7 @@ plt.show()

    -

    Simple linear regression model

    +

    Simple linear regression model

    This example serves several aims. It allows us to demonstrate several @@ -865,7 +893,7 @@ where \( x \) is defined as before.

    -

    Less noise

    +

    Less noise

    Does the fit look better? Indeed, by @@ -878,7 +906,7 @@ have not discussed a more rigorous approach to the cost function.

    -

    How to study our fits

    +

    How to study our fits

    We need more rigorous criteria in defining whether we have succeeded or @@ -902,7 +930,7 @@ dimensionless.

    -

    Minimizing the cost function

    +

    Minimizing the cost function

    Minimizing the cost function is a central aspect of @@ -923,7 +951,7 @@ the \( \chi^2 \) function becomes smaller.

    -

    Relative error

    +

    Relative error

    There are many ways to define the cost function. A simpler approach is to look at the relative difference between the training data and the predicted data, that is we define @@ -965,7 +993,7 @@ relative error.

    -

    The richness of scikit-learn

    +

    The richness of scikit-learn

    As mentioned above, scikit-learn has an impressive functionality. @@ -1011,7 +1039,7 @@ plt.show()

    -

    Functions in scikit-learn

    +

    Functions in scikit-learn

    The function coef gives us the parameter \( \beta \) of our fit while intercept yields @@ -1030,7 +1058,7 @@ this function as being similar to the \( \chi^2 \) function defined above.

    -

    Other functions in scikit-learn

    +

    Other functions in scikit-learn

    The r2score function computes \( R^2 \), the coefficient of @@ -1058,7 +1086,7 @@ $$

    -

    The mean absolute error and other functions in scikit-learn

    +

    The mean absolute error and other functions in scikit-learn

    Another quantity will meet again in our discussions of regression analysis is @@ -1087,12 +1115,13 @@ years etc.

    -

    Cubic polynomial in scikit-learn

    +

    Cubic polynomial in scikit-learn

    We will discuss in more detail these and other functions in the various lectures. We conclude this part with another example. Instead of -a linear \( x \)-dependence we study now a cubic polynomial and use the polynomial regression analysis tools of scikit-learn. +a linear \( x \)-dependence we study now a cubic polynomial and use the polynomial regression analysis tools of scikit-learn. +Add description of the various python commands.

    @@ -1129,84 +1158,12 @@ plt.show() print (error(y))

    -Similarly, using R, we can perform similar studies. -(more details on R will be inserted later). +Using R, we can perform similar studies.

    -

    Simple regression model with gradient descent

    -Add info about the equations, play around with different learning rates -

    - - -

    # Importing various packages
    -from math import exp, sqrt
    -from random import random, seed
    -import numpy as np
    -import matplotlib.pyplot as plt
    -
    -x = 2*np.random.rand(100,1)
    -y = 4+3*x+np.random.randn(100,1)
    -
    -xb = np.c_[np.ones((100,1)), x]
    -theta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)
    -print(theta_linreg)
    -theta = np.random.randn(2,1)
    -
    -eta = 0.1
    -Niterations = 1000
    -m = 100
    -
    -for iter in range(Niterations):
    -    gradients = 2.0/m*xb.T.dot(xb.dot(theta)-y)
    -    theta -= eta*gradients
    -
    -print(theta)
    -xnew = np.array([[0],[2]])
    -xbnew = np.c_[np.ones((2,1)), xnew]
    -ypredict = xbnew.dot(theta)
    -ypredict2 = xbnew.dot(theta_linreg)
    -plt.plot(xnew, ypredict, "r-")
    -plt.plot(xnew, ypredict2, "b-")
    -plt.plot(x, y ,'ro')
    -plt.axis([0,2.0,0, 15.0])
    -plt.xlabel(r'$x$')
    -plt.ylabel(r'$y$')
    -plt.title(r'Random numbers ')
    -plt.show()
    -
    -
    - - -
    -

    Simple regression model with stochastic gradient descent

    -Add info about the equations, play around with different learning rates -

    - - -

    # Importing various packages
    -from math import exp, sqrt
    -from random import random, seed
    -import numpy as np
    -import matplotlib.pyplot as plt
    -from sklearn.linear_model import SGDRegressor
    -
    -x = 2*np.random.rand(100,1)
    -y = 4+3*x+np.random.randn(100,1)
    -
    -xb = np.c_[np.ones((100,1)), x]
    -theta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)
    -print(theta_linreg)
    -sgdreg = SGDRegressor(n_iter = 50, penalty=None, eta0=0.1)
    -sgdreg.fit(x,y.ravel())
    -print(sgdreg.intercept_, sgdreg.coef_)
    -
    -
    - - -
    -

    Polynomial Regression

    +

    Polynomial Regression

    @@ -1238,7 +1195,94 @@ plt.show()

    -

    Ridge and Lasso Regression

    +

    Linking the regression analysis with a statistical interpretation

    + +

    +Before we proceed, and to link with our discussions of Bayesian statistics to come, it is useful the derive the standard regression analysis equations using a statistical interpretation. This allows us also to derive quantities like the variance and other expectation values in a rather straightforward way. + +

    +It is assumed that \( \varepsilon_i +\sim \mathcal{N}(0, \sigma^2) \) and the \( \varepsilon_{i} \) are +independent, i.e.: +

     
    +$$ +\begin{align*} +\mbox{Cov}(\varepsilon_{i_1}, +\varepsilon_{i_2}) & = \left\{ \begin{array}{lcc} \sigma^2 & \mbox{if} +& i_1 = i_2, \\ 0 & \mbox{if} & i_1 \not= i_2. \end{array} \right. +\end{align*} +$$ +

     
    + +The randomness of \( \varepsilon_i \) implies that +\( \mathbf{Y}_i \) is also a random variable. In particular, +\( \mathbf{Y}_i \) is normally distributed, because \( \varepsilon_i \sim +\mathcal{N}(0, \sigma^2) \) and \( \mathbf{X}_{i,\ast} \, \beta \) is a +non-random scalar. To specify the parameters of the distribution of +\( \mathbf{Y}_i \) we need to calculate its first two moments. +

    + + +
    +

    Expectation value and variance

    + +

    +Its expectation equals: +

     
    +$$ +\begin{align*} +\mathbb{E}(Y_i) & = +\mathbb{E}(\mathbf{X}_{i, \ast} \, \beta) + \mathbb{E}(\varepsilon_i) +\, \, \, = \, \, \, \mathbf{X}_{i, \ast} \, \beta, +\end{align*} +$$ +

     
    + +while +its variance is +

     
    +$$ +\begin{align*} \mbox{Var}(Y_i) & = \mathbb{E} \{ [Y_i +- \mathbb{E}(Y_i)]^2 \} \, \, \, = \, \, \, \mathbb{E} ( Y_i^2 ) - +[\mathbb{E}(Y_i)]^2 \\ & = \mathbb{E} [ ( \mathbf{X}_{i, \ast} \, +\beta + \varepsilon_i )^2] - ( \mathbf{X}_{i, \ast} \, \beta)^2 \\ & += \mathbb{E} [ ( \mathbf{X}_{i, \ast} \, \beta)^2 + 2 \varepsilon_i +\mathbf{X}_{i, \ast} \, \beta + \varepsilon_i^2 ] - ( \mathbf{X}_{i, +\ast} \, \beta)^2 \\ & = ( \mathbf{X}_{i, \ast} \, \beta)^2 + 2 +\mathbb{E}(\varepsilon_i) \mathbf{X}_{i, \ast} \, \beta + +\mathbb{E}(\varepsilon_i^2 ) - ( \mathbf{X}_{i, \ast} \, \beta)^2 +\\ & = \mathbb{E}(\varepsilon_i^2 ) \, \, \, = \, \, \, +\mbox{Var}(\varepsilon_i) \, \, \, = \, \, \, \sigma^2. +\end{align*} +$$ +

     
    + +Hence, \( Y_i \sim \mathcal{N}( \mathbf{X}_{i, \ast} \, \beta, \sigma^2) \). +

    + + +
    +

    The singular value decompostion

    +
    + +

    +A general +\( m\times n \) matrix \( \hat{A} \) can be written in terms of a diagonal +matrix \( \hat{D} \) of dimensionality \( n\times n \) and two orthognal +matrices \( \hat{U} \) and \( \hat{V} \), where the first has dimensionality +\( m \times m \) and the last dimensionality \( n\times n \). +We have then +

     
    +$$ +\hat{A} = \hat{U}\hat{D}\hat{V}^T +$$ +

     
    +

    +
    + + +
    +

    Code examples for Ridge and Lasso Regression

    @@ -1320,37 +1364,403 @@ plt.show()

    -

    The singular value decompostion

    -
    - -

    -How can we use the singular value decomposition to find the parameters \( \beta_j \)? More details will come. We first note that a general \( m\times n \) matrix \( \hat{A} \) can be written in terms of a diagonal matrix \( \hat{\Sigma} \) of dimensionality \( n\times n \) and two orthognal matrices \( \hat{U} \) and \( \hat{V} \), where the first has dimensionality \( m \times n \) and the last dimensionality \( n\times n \). We have then -

     
    -$$ -\hat{A} = \hat{U}\hat{\Sigma}\hat{V} -$$ -

     
    -

    +

    From standard regression to Ridge regressions

    -Add codes and discuss this in connection with lasso and ridge, show example where the standard inversion of a matrix fails and where SVD comes to rescue +One of the typical problems we encounter with linear regression, in particular +when the matrix \( \hat{X} \) (our so-called design matrix) is high-dimensional, +are problems with near singular or singular matrices. The column vectors of \( \hat{X} \) +may be linearly dependent, normally referred to as super-collinearity. +This means that the matrix may be rank deficient and it is basically impossible to +to model the data using linear regression. As an example, consider the matrix +

     
    +$$ +\begin{align*} +\mathbf{X} & = \left[ +\begin{array}{rrr} +1 & -1 & 2 +\\ +1 & 0 & 1 +\\ +1 & 2 & -1 +\\ +1 & 1 & 0 +\end{array} \right] +\end{align*} +$$ +

     
    + +

    +The columns of \( \hat{X} \) are linearly dependent. We se this easily since the +the first column is the row-wise sum of the other two columns. The rank (more correct, +the column rank) of a matrix is the dimension of the space spanned by the +column vectors. Hence, the rank of \( \mathbf{X} \) is equal to the number +of linearly independent columns. In this particular case the matrix has rank 2. + +

    +Super-collinearity of an \( (n \times p) \)-dimensional design matrix \( \mathbf{X} \) implies +that the inverse of the matrix \( \hat{X}^T\hat{x} \) (the matrix we needto invert to solve the linear regression equations) is non-invertible. If we have a square matrix that does not have an inverse, we say this matrix singular. The example here demonstrates this +

     
    +$$ +\begin{align*} +\hat{X} & = \left[ +\begin{array}{rr} +1 & -1 +\\ +1 & -1 +\end{array} \right]. +\end{align*} +$$ +

     
    + +We see easily that \( \mbox{det}(\hat{X}) = x_{11} x_{22} - x_{12} x_{21} = 1 \times (-1) - 1 \times (-1) = 0 \). Hence, \( \mathbf{X} \) is singular and its inverse is undefined. +This is equivalent to saying that the matrix \( \hat{X} \) has at least an eigenvalue which is zero.

    -

    Lasso and Ridge regression

    +

    Fixing the singularity

    -Discuss the mathematics here +If our design matrix \( \hat{X} \) which enters the linear regression problem +

     
    +$$ +\begin{align} +\hat{\beta} & = (\hat{X}^{T} \hat{X})^{-1} \hat{X}^{T} \hat{y}, +\tag{1} +\end{align} +$$ +

     
    + +has linearly dependent column vectors, we will not be able to compute the inverse +of \( \hat{X}^T\hat{X} \) and we cannot find the parameters (estimators) \( \beta_i \). +The estimators are only well-defined if \( (\hat{X}^{T}\hat{X})^{-1} \) exits. +This is more likely to happen when the matrix \( \hat{X} \) is high-dimensional. In this case it is likely to encounter a situation where +the regression parameters \( \beta_i \) cannot be estimated. + +

    +The ad hoc approach which was introduced in the 70s was simply to add a diagonal component to the matrix to invert, that is we change +

     
    +$$ +\hat{X}^{T} \hat{X} \rightarrow \hat{X}^{T} \hat{X}+\lambda \hat{I}, +$$ +

     
    + +where \( \hat{I} \) is the identity matrix.

    -

    Logistic regression

    -Add discussion about classification versus regression, show examples of more than two cases and why regression is not the best approach. Motivate for k-nearest neighbors +

    A second-order polynomial with Ridge and Lasso

    +

    + + +

    import numpy as np
    +import matplotlib.pyplot as plt
    +from sklearn.linear_model import Ridge
    +from sklearn.metrics import r2_score
    +
    +np.random.seed(4155)
    +
    +n_samples = 100
    +
    +x = np.random.rand(n_samples,1)
    +y = 5*x*x + 0.1*np.random.rand(n_samples,1)
    +
    +# Centering  x and y.
    +x_ = x - np.mean(x)
    +y_ = y - np.mean(y) # beta_0 = mean(y)
    +
    +X = np.c_[np.ones((n_samples,1)), x, x**2]
    +X_ = np.c_[x_, x_**2]
    +
    +
    +### 1.
    +lmb_values = [1e-4, 1e-3, 1e-2, 10, 1e2, 1e4]
    +num_values = len(lmb_values)
    +
    +## Ridge-regression of centered and not centered data
    +beta_ridge = np.zeros((3,num_values))
    +beta_ridge_centered = np.zeros((3,num_values))
    +
    +I3 = np.eye(3)
    +I2 = np.eye(2)
    +
    +for i,lmb in enumerate(lmb_values):
    +    beta_ridge[:,i] = (np.linalg.inv( X.T @ X + lmb*I3) @ X.T @ y).flatten()
    +    beta_ridge_centered[1:,i] = (np.linalg.inv( X_.T @ X_ + lmb*I2) @ X_.T @ y_).flatten()
    +
    +# sett beta_0 = np.mean(y)
    +beta_ridge_centered[0,:] = np.mean(y)
    +
    +## OLS (ordinary least squares) solution 
    +beta_ls = np.linalg.inv( X.T @ X ) @ X.T @ y
    +
    +## Evaluate the models
    +pred_ls = X @ beta_ls
    +pred_ridge =  X @ beta_ridge
    +pred_ridge_centered =  X_ @ beta_ridge_centered[1:] + beta_ridge_centered[0,:]
    +
    +## Plot the results
    +
    +# Sorting
    +sort_ind = np.argsort(x[:,0])
    +
    +x_plot = x[sort_ind,0]
    +x_centered_plot = x_[sort_ind,0]
    +
    +pred_ls_plot = pred_ls[sort_ind,0]
    +pred_ridge_plot = pred_ridge[sort_ind,:]
    +pred_ridge_centered_plot = pred_ridge_centered[sort_ind,:]
    +
    +# Plott not centered
    +plt.plot(x_plot,pred_ls_plot,label='ls')
    +
    +for i in range(num_values):
    +    plt.plot(x_plot,pred_ridge_plot[:,i],label='ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x,y,'ro')
    +
    +plt.title('linear regression on un-centered data')
    +plt.legend()
    +
    +# Plott centered
    +plt.figure()
    +
    +for i in range(num_values):
    +    plt.plot(x_centered_plot,pred_ridge_centered_plot[:,i],label='ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x_,y,'ro')
    +
    +plt.title('linear regression on centered data')
    +plt.legend()
    +
    +
    +# 2.
    +
    +pred_ridge_scikit =  np.zeros((n_samples,num_values))
    +for i,lmb in enumerate(lmb_values):
    +    pred_ridge_scikit[:,i] = (Ridge(alpha=lmb,fit_intercept=False).fit(X,y).predict(X)).flatten() # fit_intercept=False fordi bias er allerede i X
    +
    +plt.figure()
    +
    +plt.plot(x_plot,pred_ls_plot,label='ls')
    +
    +for i in range(num_values):
    +    plt.plot(x_plot,pred_ridge_scikit[sort_ind,i],label='scikit-ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x,y,'ro')
    +plt.legend()
    +plt.title('linear regression using scikit')
    +
    +plt.show()
    +
    +### R2-score of the results
    +for i in range(num_values):
    +    print('lambda = %g'%lmb_values[i])
    +    print('r2 for scikit: %g'%r2_score(y,pred_ridge_scikit[:,i]))
    +    print('r2 for own code, not centered: %g'%r2_score(y,pred_ridge[:,i]))
    +    print('r2 for own, centered: %g\n'%r2_score(y,pred_ridge_centered[:,i]))
    +
    +
    + + +
    +

    Fitting vs. predicting when data is in the model class

    -Add examples on classification problems +We start by considering the case +\( f(x)=2x \). + +

    +Then the data is clearly generated by a model that is contained within +all three model classes we are using to make predictions (linear +models, third order polynomials, and tenth order polynomials). + +

    +Run the code for the following cases: + +

      +

    1. For \( f(x)=2x \) , \( Ntrain=10 \) and \( \sigma =0 \) (noiseless case), train the three classes of models (linear, third-order polynomial, and tenth order polynomial) for a training set when \( x \in [0,1] \) . Make graphs comparing fits for different order of polynomials. Which model fits the data the best?
    2. +

    3. Do you think that the data that has the least error on the training set will also make the best predictions? Why or why not? Can you try to discuss and formalize your intuition? What can go right and what can go wrong?
    4. +

    5. Check your answer by seeing how well your fits predict newly generated test data (including on data outside the range you fit on, for example \( x \in [0,1.2] \) ) using the code below. How well do you do on points in the range of x where you trained the model? How about points outside the original training data set?
    6. +

    7. Repeat the above for \( f(x)=2x \) , \( Ntrain=10 \) , and \( \sigma=1 \) . What changes?
    8. +
    +

    + +Repeat the exercises above for \( f(x)=2x \) , \( Ntrain=100 \) , and \( \sigma=1 \) . What changes? +Summarize what you have learned about the relationship between model complexity (number of parameters), goodness of fit on training data, and the ability to predict well. +

    + + +
    +

    Fitting versus predicting when data is not in the model class

    + +

    +Thus far, we have considered the case where the data is generated using a model contained in the model class. Now consider \( f(x)=2x-10x^5+15x^{10} \) . Notice that the for linear and third-order polynomial the true model \( f(x) \) is not contained in model class. + +

      +

    1. Do better fits lead to better predictions?
    2. +

    3. What is the relationship between the true model for generating the data and the model class that has the most predictive power? How is this related to the model complexity? How does this depend on the number of data points \( Ntrain \) and \( \sigma \)?
    4. +
    +

    + +Summarize what you think you learned about the relationship of knowing the true model class and predictive power. +

    + + +
    +

    The code

    + +

    + + +

    import numpy as np
    +import sklearn as sk
    +from sklearn import datasets, linear_model
    +from sklearn.preprocessing import PolynomialFeatures
    +
    +import matplotlib as mpl
    +from matplotlib import pyplot as plt
    +
    +%matplotlib notebook
    +
    +# The Training Data
    +
    +N_train=100
    +
    +sigma_train=1;
    +
    +# Train on integers
    +x=np.linspace(0.05,0.95,N_train)
    +# Draw random noise
    +s = sigma_train*np.random.randn(N_train)
    +
    +#linear
    +y=2*x+s
    +
    +#Tenth Order
    +#y=2*x-10*x**5+15*x**10+s
    +
    +p1=plt.plot(x,y, "o",ms=15, label='Training')
    +
    +#Linear Regression
    +# Create linear regression object
    +clf = linear_model.LinearRegression()
    +
    +# Train the model using the training sets
    +clf.fit(x[:, np.newaxis], y)
    +# The coefficients
    +
    +xplot=np.linspace(0.02,0.98,200)
    +linear_plot=plt.plot(xplot, clf.predict(xplot[:, np.newaxis]),label='Linear')
    +
    +#Polynomial Regression
    +
    +
    +poly3 = PolynomialFeatures(degree=3)
    +X = poly3.fit_transform(x[:,np.newaxis])
    +clf3 = linear_model.LinearRegression()
    +clf3.fit(X,y)
    +
    +
    +Xplot=poly3.fit_transform(xplot[:,np.newaxis])
    +poly3_plot=plt.plot(xplot, clf3.predict(Xplot), label='Poly 3')
    +
    +
    +
    +#poly5 = PolynomialFeatures(degree=5)
    +#X = poly5.fit_transform(x[:,np.newaxis])
    +#clf5 = linear_model.LinearRegression()
    +#clf5.fit(X,y)
    +
    +#Xplot=poly5.fit_transform(xplot[:,np.newaxis])
    +#plt.plot(xplot, clf5.predict(Xplot), 'r--',linewidth=1)
    +
    +poly10 = PolynomialFeatures(degree=10)
    +X = poly10.fit_transform(x[:,np.newaxis])
    +clf10 = linear_model.LinearRegression()
    +clf10.fit(X,y)
    +
    +Xplot=poly10.fit_transform(xplot[:,np.newaxis])
    +poly10_plot=plt.plot(xplot, clf10.predict(Xplot), label='Poly 10')
    +
    +axes = plt.gca()
    +axes.set_ylim([-7,7])
    +
    +handles, labels=axes.get_legend_handles_labels()
    +plt.legend(handles,labels, loc='lower center')
    +plt.xlabel("$x$")
    +plt.ylabel("$y$")
    +Title="$N=$"+str(N_train)+", $\sigma=$"+str(sigma_train)
    +plt.title(Title+" (train)")
    +plt.tight_layout()
    +plt.show()
    +
    +
    + + +
    +

    Generating test data

    +

    + + +

    # Generate Test Data
    +
    +#Number of test data
    +N_test=20
    +
    +sigma_test=sigma_train
    +
    +max_x=1.2
    +x_test=max_x*np.random.random(N_test)
    +# Draw random noise
    +s_test = sigma_test*np.random.randn(N_test)
    +
    +#Linear
    +y_test=2*x_test+s_test
    +#Tenth order
    +#y_test=2*x_test-10*x_test**5+15*x_test**10+s_test
    +
    +#Make design matrices for prediction
    +x_plot=np.linspace(0,max_x, 200)
    +X3 = poly3.fit_transform(x_plot[:,np.newaxis])
    +X10 = poly10.fit_transform(x_plot[:,np.newaxis])
    +
    +%matplotlib notebook
    +
    +fig = plt.figure() 
    +p1=plt.plot(x_test,y_test.transpose(), 'o', ms=12, label='data')
    +p2=plt.plot(x_plot,clf.predict(x_plot[:,np.newaxis]), label='linear')
    +p3=plt.plot(x_plot,clf3.predict(X3), label='3rd order')
    +p10=plt.plot(x_plot,clf10.predict(X10), label='10th order')
    +
    +
    +plt.legend(loc=2)
    +plt.xlabel('$x$')
    +plt.ylabel('$y$')
    +plt.legend(loc='best')
    +plt.title(Title+" (pred.)")
    +plt.tight_layout()
    +plt.show()
    +
    +#Linear Filename
    +#filename_test=Title+"pred-linear.pdf"
    +#Tenth Order Filename
    +#filename_test=Title+"pred-o10.pdf"
    +#plt.savefig(filename_test)
    +#plt.ylim((-6,12))
    +
    +
    + + +
    +

    Lasso regression

    +
    + + +
    +

    Logistic regression

    diff --git a/doc/pub/Regression/html/Regression-solarized.html b/doc/pub/Regression/html/Regression-solarized.html index 9b2167152..9b2031654 100644 --- a/doc/pub/Regression/html/Regression-solarized.html +++ b/doc/pub/Regression/html/Regression-solarized.html @@ -61,17 +61,14 @@ div { text-align: justify; text-justify: inter-word; } @@ -175,7 +196,7 @@ MathJax.Hub.Config({
    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

    -

    Aug 24, 2018

    +

    Sep 6, 2018












    @@ -205,7 +226,38 @@ A regression model aims at finding a likelihood function \( p(y\vert \hat{x}) \)











    -

    General linear models

    +

    Regression analysis, overarching aims II

    +
    + +

    + +

    +Consider an experiment in which \( p \) characteristics of \( n \) samples are +measured. The data from this experiment are denoted \( \mathbf{X} \), with +\( \mathbf{X} \) as above. The matrix \( \mathbf{X} \) is called the design +matrix. Additional information of the samples is available in the +form of \( \mathbf{Y} \) (also as above). The variable \( \mathbf{Y} \) is +generally referred to as the response variable. The aim of +regression analysis is to explain \( \mathbf{Y} \) in terms of +\( \mathbf{X} \) through a functional relationship like \( Y_i = +f(\mathbf{X}_{i,\ast}) \). When no prior knowledge on the form of +\( f(\cdot) \) is available, it is common to assume a linear relationship +between \( \mathbf{X} \) and \( \mathbf{Y} \). This assumption gives rise to +the linear regression model where \( \beta = (\beta_1, \ldots, +\beta_p)^{\top} \) is the regression parameter. The parameter +\( \beta_j \), \( j=1, \ldots, p \), represents the effect size of covariate +\( j \) on the response. That is, for each unit change in covariate \( j \) +(while keeping the other covariates fixed) the observed change in the +response is equal to \( \beta_j \). + + +

    + + +

    +









    + +

    General linear models

    @@ -226,7 +278,7 @@ where \( \epsilon_i \) is the error in our approximation.











    -

    Rewriting the fitting procedure as a linear algebra problem

    +

    Rewriting the fitting procedure as a linear algebra problem

    @@ -246,7 +298,7 @@ $$











    -

    Rewriting the fitting procedure as a linear algebra problem, follows

    +

    Rewriting the fitting procedure as a linear algebra problem, follows

    @@ -287,7 +339,7 @@ $$











    -

    Generalizing the fitting procedure as a linear algebra problem

    +

    Generalizing the fitting procedure as a linear algebra problem

    @@ -310,7 +362,7 @@ $$











    -

    Generalizing the fitting procedure as a linear algebra problem

    +

    Generalizing the fitting procedure as a linear algebra problem

    @@ -338,7 +390,7 @@ The left-hand side of this equation forms know. Our error vector \( \hat{\epsilo











    -

    Optimizing our parameters

    +

    Optimizing our parameters

    @@ -360,7 +412,7 @@ $$











    -

    Optimizing our parameters, more details

    +

    Optimizing our parameters, more details

    @@ -384,7 +436,7 @@ $$











    -

    Interpretations and optimizing our parameters

    +

    Interpretations and optimizing our parameters

    @@ -423,7 +475,7 @@ $$











    -

    Interpretations and optimizing our parameters

    +

    Interpretations and optimizing our parameters

    @@ -449,7 +501,7 @@ $$











    -

    Interpretations and optimizing our parameters

    +

    Interpretations and optimizing our parameters

    @@ -477,7 +529,7 @@ meaning that the solution for \( \hat{\beta} \) is the one which minimizes the r











    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -500,7 +552,7 @@ where the matrix \( \hat{\Sigma} \) is a diagonal matrix with \( \sigma_i \) as











    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -528,7 +580,7 @@ where we have defined the matrix \( \hat{A} =\hat{X}/\hat{\Sigma} \) with matrix











    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -554,7 +606,7 @@ $$











    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -585,7 +637,7 @@ $$











    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -609,7 +661,7 @@ $$











    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -655,7 +707,7 @@ This approach (different linear and non-linear regression) suffers often from bo











    -

    Simple regression model

    +

    Simple regression model

    We are now ready to write our first program which aims at solving the above linear regression equations. We start with data we have produced ourselves, in this case normally distributed random numbers along the \( x \)-axis. These numbers define then the value of a function \( y(x)=4+3x+N(0,1) \). Thereafter we order the \( x \) values and employ our linear regression algorithm to set up the best fit. Here we find it useful to use the numpy function \( c\_ \) arrays where arrays are stacked along their last axis after being upgraded to at least two dimensions with ones post-pended to the shape. The following examples help in understanding what happens

    @@ -695,7 +747,7 @@ We see that, as expected, a linear fit gives a seemingly (from the graph) good r











    -

    Simple regression model, now using scikit-learn

    +

    Simple regression model, now using scikit-learn

    We can repeat the above algorithm using scikit-learn as follows @@ -726,7 +778,7 @@ plt.show()











    -

    Simple linear regression model using scikit-learn

    +

    Simple linear regression model using scikit-learn

    We start with perhaps our simplest possible example, using scikit-learn to perform linear regression analysis on a data set produced by us. @@ -794,7 +846,7 @@ plt.show()











    -

    Simple linear regression model

    +

    Simple linear regression model

    This example serves several aims. It allows us to demonstrate several @@ -816,7 +868,7 @@ where \( x \) is defined as before.











    -

    Less noise

    +

    Less noise

    Does the fit look better? Indeed, by @@ -829,7 +881,7 @@ have not discussed a more rigorous approach to the cost function.











    -

    How to study our fits

    +

    How to study our fits

    We need more rigorous criteria in defining whether we have succeeded or @@ -851,7 +903,7 @@ dimensionless.











    -

    Minimizing the cost function

    +

    Minimizing the cost function

    Minimizing the cost function is a central aspect of @@ -872,7 +924,7 @@ the \( \chi^2 \) function becomes smaller.











    -

    Relative error

    +

    Relative error

    There are many ways to define the cost function. A simpler approach is to look at the relative difference between the training data and the predicted data, that is we define @@ -912,7 +964,7 @@ relative error.











    -

    The richness of scikit-learn

    +

    The richness of scikit-learn

    As mentioned above, scikit-learn has an impressive functionality. @@ -957,7 +1009,7 @@ plt.show()











    -

    Functions in scikit-learn

    +

    Functions in scikit-learn

    The function coef gives us the parameter \( \beta \) of our fit while intercept yields @@ -974,7 +1026,7 @@ this function as being similar to the \( \chi^2 \) function defined above.











    -

    Other functions in scikit-learn

    +

    Other functions in scikit-learn

    The r2score function computes \( R^2 \), the coefficient of @@ -998,7 +1050,7 @@ $$











    -

    The mean absolute error and other functions in scikit-learn

    +

    The mean absolute error and other functions in scikit-learn

    Another quantity will meet again in our discussions of regression analysis is @@ -1023,12 +1075,13 @@ years etc.











    -

    Cubic polynomial in scikit-learn

    +

    Cubic polynomial in scikit-learn

    We will discuss in more detail these and other functions in the various lectures. We conclude this part with another example. Instead of -a linear \( x \)-dependence we study now a cubic polynomial and use the polynomial regression analysis tools of scikit-learn. +a linear \( x \)-dependence we study now a cubic polynomial and use the polynomial regression analysis tools of scikit-learn. +Add description of the various python commands.

    @@ -1065,82 +1118,12 @@ plt.show() print (error(y))

    -Similarly, using R, we can perform similar studies. -(more details on R will be inserted later). +Using R, we can perform similar studies.











    -

    Simple regression model with gradient descent

    -Add info about the equations, play around with different learning rates -

    - - -

    # Importing various packages
    -from math import exp, sqrt
    -from random import random, seed
    -import numpy as np
    -import matplotlib.pyplot as plt
    -
    -x = 2*np.random.rand(100,1)
    -y = 4+3*x+np.random.randn(100,1)
    -
    -xb = np.c_[np.ones((100,1)), x]
    -theta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)
    -print(theta_linreg)
    -theta = np.random.randn(2,1)
    -
    -eta = 0.1
    -Niterations = 1000
    -m = 100
    -
    -for iter in range(Niterations):
    -    gradients = 2.0/m*xb.T.dot(xb.dot(theta)-y)
    -    theta -= eta*gradients
    -
    -print(theta)
    -xnew = np.array([[0],[2]])
    -xbnew = np.c_[np.ones((2,1)), xnew]
    -ypredict = xbnew.dot(theta)
    -ypredict2 = xbnew.dot(theta_linreg)
    -plt.plot(xnew, ypredict, "r-")
    -plt.plot(xnew, ypredict2, "b-")
    -plt.plot(x, y ,'ro')
    -plt.axis([0,2.0,0, 15.0])
    -plt.xlabel(r'$x$')
    -plt.ylabel(r'$y$')
    -plt.title(r'Random numbers ')
    -plt.show()
    -
    -

    -









    - -

    Simple regression model with stochastic gradient descent

    -Add info about the equations, play around with different learning rates -

    - - -

    # Importing various packages
    -from math import exp, sqrt
    -from random import random, seed
    -import numpy as np
    -import matplotlib.pyplot as plt
    -from sklearn.linear_model import SGDRegressor
    -
    -x = 2*np.random.rand(100,1)
    -y = 4+3*x+np.random.randn(100,1)
    -
    -xb = np.c_[np.ones((100,1)), x]
    -theta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)
    -print(theta_linreg)
    -sgdreg = SGDRegressor(n_iter = 50, penalty=None, eta0=0.1)
    -sgdreg.fit(x,y.ravel())
    -print(sgdreg.intercept_, sgdreg.coef_)
    -
    -

    -









    - -

    Polynomial Regression

    +

    Polynomial Regression

    @@ -1168,10 +1151,92 @@ plt.ylabel(r'$y$') plt.title(r'Random numbers ') plt.show()

    +

    + + +

    Linking the regression analysis with a statistical interpretation

    + +

    +Before we proceed, and to link with our discussions of Bayesian statistics to come, it is useful the derive the standard regression analysis equations using a statistical interpretation. This allows us also to derive quantities like the variance and other expectation values in a rather straightforward way. + +

    +It is assumed that \( \varepsilon_i +\sim \mathcal{N}(0, \sigma^2) \) and the \( \varepsilon_{i} \) are +independent, i.e.: +$$ +\begin{align*} +\mbox{Cov}(\varepsilon_{i_1}, +\varepsilon_{i_2}) & = \left\{ \begin{array}{lcc} \sigma^2 & \mbox{if} +& i_1 = i_2, \\ 0 & \mbox{if} & i_1 \not= i_2. \end{array} \right. +\end{align*} +$$ + +The randomness of \( \varepsilon_i \) implies that +\( \mathbf{Y}_i \) is also a random variable. In particular, +\( \mathbf{Y}_i \) is normally distributed, because \( \varepsilon_i \sim +\mathcal{N}(0, \sigma^2) \) and \( \mathbf{X}_{i,\ast} \, \beta \) is a +non-random scalar. To specify the parameters of the distribution of +\( \mathbf{Y}_i \) we need to calculate its first two moments. +











    -

    Ridge and Lasso Regression

    +

    Expectation value and variance

    + +

    +Its expectation equals: +$$ +\begin{align*} +\mathbb{E}(Y_i) & = +\mathbb{E}(\mathbf{X}_{i, \ast} \, \beta) + \mathbb{E}(\varepsilon_i) +\, \, \, = \, \, \, \mathbf{X}_{i, \ast} \, \beta, +\end{align*} +$$ + +while +its variance is +$$ +\begin{align*} \mbox{Var}(Y_i) & = \mathbb{E} \{ [Y_i +- \mathbb{E}(Y_i)]^2 \} \, \, \, = \, \, \, \mathbb{E} ( Y_i^2 ) - +[\mathbb{E}(Y_i)]^2 \\ & = \mathbb{E} [ ( \mathbf{X}_{i, \ast} \, +\beta + \varepsilon_i )^2] - ( \mathbf{X}_{i, \ast} \, \beta)^2 \\ & += \mathbb{E} [ ( \mathbf{X}_{i, \ast} \, \beta)^2 + 2 \varepsilon_i +\mathbf{X}_{i, \ast} \, \beta + \varepsilon_i^2 ] - ( \mathbf{X}_{i, +\ast} \, \beta)^2 \\ & = ( \mathbf{X}_{i, \ast} \, \beta)^2 + 2 +\mathbb{E}(\varepsilon_i) \mathbf{X}_{i, \ast} \, \beta + +\mathbb{E}(\varepsilon_i^2 ) - ( \mathbf{X}_{i, \ast} \, \beta)^2 +\\ & = \mathbb{E}(\varepsilon_i^2 ) \, \, \, = \, \, \, +\mbox{Var}(\varepsilon_i) \, \, \, = \, \, \, \sigma^2. +\end{align*} +$$ + +Hence, \( Y_i \sim \mathcal{N}( \mathbf{X}_{i, \ast} \, \beta, \sigma^2) \). + +

    +









    + +

    The singular value decompostion

    +
    + +

    + +

    +A general +\( m\times n \) matrix \( \hat{A} \) can be written in terms of a diagonal +matrix \( \hat{D} \) of dimensionality \( n\times n \) and two orthognal +matrices \( \hat{U} \) and \( \hat{V} \), where the first has dimensionality +\( m \times m \) and the last dimensionality \( n\times n \). +We have then +$$ +\hat{A} = \hat{U}\hat{D}\hat{V}^T +$$ +

    + + +

    +









    + +

    Code examples for Ridge and Lasso Regression

    @@ -1252,38 +1317,390 @@ plt.show()











    -

    The singular value decompostion

    -
    - -

    -How can we use the singular value decomposition to find the parameters \( \beta_j \)? More details will come. We first note that a general \( m\times n \) matrix \( \hat{A} \) can be written in terms of a diagonal matrix \( \hat{\Sigma} \) of dimensionality \( n\times n \) and two orthognal matrices \( \hat{U} \) and \( \hat{V} \), where the first has dimensionality \( m \times n \) and the last dimensionality \( n\times n \). We have then -$$ -\hat{A} = \hat{U}\hat{\Sigma}\hat{V} -$$ -

    - +

    From standard regression to Ridge regressions

    -Add codes and discuss this in connection with lasso and ridge, show example where the standard inversion of a matrix fails and where SVD comes to rescue +One of the typical problems we encounter with linear regression, in particular +when the matrix \( \hat{X} \) (our so-called design matrix) is high-dimensional, +are problems with near singular or singular matrices. The column vectors of \( \hat{X} \) +may be linearly dependent, normally referred to as super-collinearity. +This means that the matrix may be rank deficient and it is basically impossible to +to model the data using linear regression. As an example, consider the matrix +$$ +\begin{align*} +\mathbf{X} & = \left[ +\begin{array}{rrr} +1 & -1 & 2 +\\ +1 & 0 & 1 +\\ +1 & 2 & -1 +\\ +1 & 1 & 0 +\end{array} \right] +\end{align*} +$$ + +

    +The columns of \( \hat{X} \) are linearly dependent. We se this easily since the +the first column is the row-wise sum of the other two columns. The rank (more correct, +the column rank) of a matrix is the dimension of the space spanned by the +column vectors. Hence, the rank of \( \mathbf{X} \) is equal to the number +of linearly independent columns. In this particular case the matrix has rank 2. + +

    +Super-collinearity of an \( (n \times p) \)-dimensional design matrix \( \mathbf{X} \) implies +that the inverse of the matrix \( \hat{X}^T\hat{x} \) (the matrix we needto invert to solve the linear regression equations) is non-invertible. If we have a square matrix that does not have an inverse, we say this matrix singular. The example here demonstrates this +$$ +\begin{align*} +\hat{X} & = \left[ +\begin{array}{rr} +1 & -1 +\\ +1 & -1 +\end{array} \right]. +\end{align*} +$$ + +We see easily that \( \mbox{det}(\hat{X}) = x_{11} x_{22} - x_{12} x_{21} = 1 \times (-1) - 1 \times (-1) = 0 \). Hence, \( \mathbf{X} \) is singular and its inverse is undefined. +This is equivalent to saying that the matrix \( \hat{X} \) has at least an eigenvalue which is zero.











    -

    Lasso and Ridge regression

    +

    Fixing the singularity

    -Discuss the mathematics here +If our design matrix \( \hat{X} \) which enters the linear regression problem +$$ +\begin{align} +\hat{\beta} & = (\hat{X}^{T} \hat{X})^{-1} \hat{X}^{T} \hat{y}, +\label{_auto1} +\end{align} +$$ + +has linearly dependent column vectors, we will not be able to compute the inverse +of \( \hat{X}^T\hat{X} \) and we cannot find the parameters (estimators) \( \beta_i \). +The estimators are only well-defined if \( (\hat{X}^{T}\hat{X})^{-1} \) exits. +This is more likely to happen when the matrix \( \hat{X} \) is high-dimensional. In this case it is likely to encounter a situation where +the regression parameters \( \beta_i \) cannot be estimated. + +

    +The ad hoc approach which was introduced in the 70s was simply to add a diagonal component to the matrix to invert, that is we change +$$ +\hat{X}^{T} \hat{X} \rightarrow \hat{X}^{T} \hat{X}+\lambda \hat{I}, +$$ + +where \( \hat{I} \) is the identity matrix.











    -

    Logistic regression

    -Add discussion about classification versus regression, show examples of more than two cases and why regression is not the best approach. Motivate for k-nearest neighbors +

    A second-order polynomial with Ridge and Lasso

    +

    + + +

    import numpy as np
    +import matplotlib.pyplot as plt
    +from sklearn.linear_model import Ridge
    +from sklearn.metrics import r2_score
    +
    +np.random.seed(4155)
    +
    +n_samples = 100
    +
    +x = np.random.rand(n_samples,1)
    +y = 5*x*x + 0.1*np.random.rand(n_samples,1)
    +
    +# Centering  x and y.
    +x_ = x - np.mean(x)
    +y_ = y - np.mean(y) # beta_0 = mean(y)
    +
    +X = np.c_[np.ones((n_samples,1)), x, x**2]
    +X_ = np.c_[x_, x_**2]
    +
    +
    +### 1.
    +lmb_values = [1e-4, 1e-3, 1e-2, 10, 1e2, 1e4]
    +num_values = len(lmb_values)
    +
    +## Ridge-regression of centered and not centered data
    +beta_ridge = np.zeros((3,num_values))
    +beta_ridge_centered = np.zeros((3,num_values))
    +
    +I3 = np.eye(3)
    +I2 = np.eye(2)
    +
    +for i,lmb in enumerate(lmb_values):
    +    beta_ridge[:,i] = (np.linalg.inv( X.T @ X + lmb*I3) @ X.T @ y).flatten()
    +    beta_ridge_centered[1:,i] = (np.linalg.inv( X_.T @ X_ + lmb*I2) @ X_.T @ y_).flatten()
    +
    +# sett beta_0 = np.mean(y)
    +beta_ridge_centered[0,:] = np.mean(y)
    +
    +## OLS (ordinary least squares) solution 
    +beta_ls = np.linalg.inv( X.T @ X ) @ X.T @ y
    +
    +## Evaluate the models
    +pred_ls = X @ beta_ls
    +pred_ridge =  X @ beta_ridge
    +pred_ridge_centered =  X_ @ beta_ridge_centered[1:] + beta_ridge_centered[0,:]
    +
    +## Plot the results
    +
    +# Sorting
    +sort_ind = np.argsort(x[:,0])
    +
    +x_plot = x[sort_ind,0]
    +x_centered_plot = x_[sort_ind,0]
    +
    +pred_ls_plot = pred_ls[sort_ind,0]
    +pred_ridge_plot = pred_ridge[sort_ind,:]
    +pred_ridge_centered_plot = pred_ridge_centered[sort_ind,:]
    +
    +# Plott not centered
    +plt.plot(x_plot,pred_ls_plot,label='ls')
    +
    +for i in range(num_values):
    +    plt.plot(x_plot,pred_ridge_plot[:,i],label='ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x,y,'ro')
    +
    +plt.title('linear regression on un-centered data')
    +plt.legend()
    +
    +# Plott centered
    +plt.figure()
    +
    +for i in range(num_values):
    +    plt.plot(x_centered_plot,pred_ridge_centered_plot[:,i],label='ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x_,y,'ro')
    +
    +plt.title('linear regression on centered data')
    +plt.legend()
    +
    +
    +# 2.
    +
    +pred_ridge_scikit =  np.zeros((n_samples,num_values))
    +for i,lmb in enumerate(lmb_values):
    +    pred_ridge_scikit[:,i] = (Ridge(alpha=lmb,fit_intercept=False).fit(X,y).predict(X)).flatten() # fit_intercept=False fordi bias er allerede i X
    +
    +plt.figure()
    +
    +plt.plot(x_plot,pred_ls_plot,label='ls')
    +
    +for i in range(num_values):
    +    plt.plot(x_plot,pred_ridge_scikit[sort_ind,i],label='scikit-ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x,y,'ro')
    +plt.legend()
    +plt.title('linear regression using scikit')
    +
    +plt.show()
    +
    +### R2-score of the results
    +for i in range(num_values):
    +    print('lambda = %g'%lmb_values[i])
    +    print('r2 for scikit: %g'%r2_score(y,pred_ridge_scikit[:,i]))
    +    print('r2 for own code, not centered: %g'%r2_score(y,pred_ridge[:,i]))
    +    print('r2 for own, centered: %g\n'%r2_score(y,pred_ridge_centered[:,i]))
    +
    +

    +









    + +

    Fitting vs. predicting when data is in the model class

    -Add examples on classification problems +We start by considering the case +\( f(x)=2x \).

    +Then the data is clearly generated by a model that is contained within +all three model classes we are using to make predictions (linear +models, third order polynomials, and tenth order polynomials). + +

    +Run the code for the following cases: + +

      +
    1. For \( f(x)=2x \) , \( Ntrain=10 \) and \( \sigma =0 \) (noiseless case), train the three classes of models (linear, third-order polynomial, and tenth order polynomial) for a training set when \( x \in [0,1] \) . Make graphs comparing fits for different order of polynomials. Which model fits the data the best?
    2. +
    3. Do you think that the data that has the least error on the training set will also make the best predictions? Why or why not? Can you try to discuss and formalize your intuition? What can go right and what can go wrong?
    4. +
    5. Check your answer by seeing how well your fits predict newly generated test data (including on data outside the range you fit on, for example \( x \in [0,1.2] \) ) using the code below. How well do you do on points in the range of x where you trained the model? How about points outside the original training data set?
    6. +
    7. Repeat the above for \( f(x)=2x \) , \( Ntrain=10 \) , and \( \sigma=1 \) . What changes?
    8. +
    + +Repeat the exercises above for \( f(x)=2x \) , \( Ntrain=100 \) , and \( \sigma=1 \) . What changes? +Summarize what you have learned about the relationship between model complexity (number of parameters), goodness of fit on training data, and the ability to predict well. + +

    +









    + +

    Fitting versus predicting when data is not in the model class

    + +

    +Thus far, we have considered the case where the data is generated using a model contained in the model class. Now consider \( f(x)=2x-10x^5+15x^{10} \) . Notice that the for linear and third-order polynomial the true model \( f(x) \) is not contained in model class. + +

      +
    1. Do better fits lead to better predictions?
    2. +
    3. What is the relationship between the true model for generating the data and the model class that has the most predictive power? How is this related to the model complexity? How does this depend on the number of data points \( Ntrain \) and \( \sigma \)?
    4. +
    + +Summarize what you think you learned about the relationship of knowing the true model class and predictive power. + +

    +









    + +

    The code

    + +

    + + +

    import numpy as np
    +import sklearn as sk
    +from sklearn import datasets, linear_model
    +from sklearn.preprocessing import PolynomialFeatures
    +
    +import matplotlib as mpl
    +from matplotlib import pyplot as plt
    +
    +%matplotlib notebook
    +
    +# The Training Data
    +
    +N_train=100
    +
    +sigma_train=1;
    +
    +# Train on integers
    +x=np.linspace(0.05,0.95,N_train)
    +# Draw random noise
    +s = sigma_train*np.random.randn(N_train)
    +
    +#linear
    +y=2*x+s
    +
    +#Tenth Order
    +#y=2*x-10*x**5+15*x**10+s
    +
    +p1=plt.plot(x,y, "o",ms=15, label='Training')
    +
    +#Linear Regression
    +# Create linear regression object
    +clf = linear_model.LinearRegression()
    +
    +# Train the model using the training sets
    +clf.fit(x[:, np.newaxis], y)
    +# The coefficients
    +
    +xplot=np.linspace(0.02,0.98,200)
    +linear_plot=plt.plot(xplot, clf.predict(xplot[:, np.newaxis]),label='Linear')
    +
    +#Polynomial Regression
    +
    +
    +poly3 = PolynomialFeatures(degree=3)
    +X = poly3.fit_transform(x[:,np.newaxis])
    +clf3 = linear_model.LinearRegression()
    +clf3.fit(X,y)
    +
    +
    +Xplot=poly3.fit_transform(xplot[:,np.newaxis])
    +poly3_plot=plt.plot(xplot, clf3.predict(Xplot), label='Poly 3')
    +
    +
    +
    +#poly5 = PolynomialFeatures(degree=5)
    +#X = poly5.fit_transform(x[:,np.newaxis])
    +#clf5 = linear_model.LinearRegression()
    +#clf5.fit(X,y)
    +
    +#Xplot=poly5.fit_transform(xplot[:,np.newaxis])
    +#plt.plot(xplot, clf5.predict(Xplot), 'r--',linewidth=1)
    +
    +poly10 = PolynomialFeatures(degree=10)
    +X = poly10.fit_transform(x[:,np.newaxis])
    +clf10 = linear_model.LinearRegression()
    +clf10.fit(X,y)
    +
    +Xplot=poly10.fit_transform(xplot[:,np.newaxis])
    +poly10_plot=plt.plot(xplot, clf10.predict(Xplot), label='Poly 10')
    +
    +axes = plt.gca()
    +axes.set_ylim([-7,7])
    +
    +handles, labels=axes.get_legend_handles_labels()
    +plt.legend(handles,labels, loc='lower center')
    +plt.xlabel("$x$")
    +plt.ylabel("$y$")
    +Title="$N=$"+str(N_train)+", $\sigma=$"+str(sigma_train)
    +plt.title(Title+" (train)")
    +plt.tight_layout()
    +plt.show()
    +
    +

    + + +

    Generating test data

    +

    + + +

    # Generate Test Data
    +
    +#Number of test data
    +N_test=20
    +
    +sigma_test=sigma_train
    +
    +max_x=1.2
    +x_test=max_x*np.random.random(N_test)
    +# Draw random noise
    +s_test = sigma_test*np.random.randn(N_test)
    +
    +#Linear
    +y_test=2*x_test+s_test
    +#Tenth order
    +#y_test=2*x_test-10*x_test**5+15*x_test**10+s_test
    +
    +#Make design matrices for prediction
    +x_plot=np.linspace(0,max_x, 200)
    +X3 = poly3.fit_transform(x_plot[:,np.newaxis])
    +X10 = poly10.fit_transform(x_plot[:,np.newaxis])
    +
    +%matplotlib notebook
    +
    +fig = plt.figure() 
    +p1=plt.plot(x_test,y_test.transpose(), 'o', ms=12, label='data')
    +p2=plt.plot(x_plot,clf.predict(x_plot[:,np.newaxis]), label='linear')
    +p3=plt.plot(x_plot,clf3.predict(X3), label='3rd order')
    +p10=plt.plot(x_plot,clf10.predict(X10), label='10th order')
    +
    +
    +plt.legend(loc=2)
    +plt.xlabel('$x$')
    +plt.ylabel('$y$')
    +plt.legend(loc='best')
    +plt.title(Title+" (pred.)")
    +plt.tight_layout()
    +plt.show()
    +
    +#Linear Filename
    +#filename_test=Title+"pred-linear.pdf"
    +#Tenth Order Filename
    +#filename_test=Title+"pred-o10.pdf"
    +#plt.savefig(filename_test)
    +#plt.ylim((-6,12))
    +
    +

    +









    + +

    Lasso regression

    + +

    +









    + +

    Logistic regression

    diff --git a/doc/pub/Regression/html/Regression.html b/doc/pub/Regression/html/Regression.html index 7e1a6bbe5..fd86d2474 100644 --- a/doc/pub/Regression/html/Regression.html +++ b/doc/pub/Regression/html/Regression.html @@ -66,17 +66,14 @@ div { text-align: justify; text-justify: inter-word; } @@ -180,7 +201,7 @@ MathJax.Hub.Config({
    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

    -

    Aug 24, 2018

    +

    Sep 6, 2018












    @@ -210,7 +231,38 @@ A regression model aims at finding a likelihood function \( p(y\vert \hat{x}) \)











    -

    General linear models

    +

    Regression analysis, overarching aims II

    +
    + +

    + +

    +Consider an experiment in which \( p \) characteristics of \( n \) samples are +measured. The data from this experiment are denoted \( \mathbf{X} \), with +\( \mathbf{X} \) as above. The matrix \( \mathbf{X} \) is called the design +matrix. Additional information of the samples is available in the +form of \( \mathbf{Y} \) (also as above). The variable \( \mathbf{Y} \) is +generally referred to as the response variable. The aim of +regression analysis is to explain \( \mathbf{Y} \) in terms of +\( \mathbf{X} \) through a functional relationship like \( Y_i = +f(\mathbf{X}_{i,\ast}) \). When no prior knowledge on the form of +\( f(\cdot) \) is available, it is common to assume a linear relationship +between \( \mathbf{X} \) and \( \mathbf{Y} \). This assumption gives rise to +the linear regression model where \( \beta = (\beta_1, \ldots, +\beta_p)^{\top} \) is the regression parameter. The parameter +\( \beta_j \), \( j=1, \ldots, p \), represents the effect size of covariate +\( j \) on the response. That is, for each unit change in covariate \( j \) +(while keeping the other covariates fixed) the observed change in the +response is equal to \( \beta_j \). + + +

    + + +

    +









    + +

    General linear models

    @@ -231,7 +283,7 @@ where \( \epsilon_i \) is the error in our approximation.











    -

    Rewriting the fitting procedure as a linear algebra problem

    +

    Rewriting the fitting procedure as a linear algebra problem

    @@ -251,7 +303,7 @@ $$











    -

    Rewriting the fitting procedure as a linear algebra problem, follows

    +

    Rewriting the fitting procedure as a linear algebra problem, follows

    @@ -292,7 +344,7 @@ $$











    -

    Generalizing the fitting procedure as a linear algebra problem

    +

    Generalizing the fitting procedure as a linear algebra problem

    @@ -315,7 +367,7 @@ $$











    -

    Generalizing the fitting procedure as a linear algebra problem

    +

    Generalizing the fitting procedure as a linear algebra problem

    @@ -343,7 +395,7 @@ The left-hand side of this equation forms know. Our error vector \( \hat{\epsilo











    -

    Optimizing our parameters

    +

    Optimizing our parameters

    @@ -365,7 +417,7 @@ $$











    -

    Optimizing our parameters, more details

    +

    Optimizing our parameters, more details

    @@ -389,7 +441,7 @@ $$











    -

    Interpretations and optimizing our parameters

    +

    Interpretations and optimizing our parameters

    @@ -428,7 +480,7 @@ $$











    -

    Interpretations and optimizing our parameters

    +

    Interpretations and optimizing our parameters

    @@ -454,7 +506,7 @@ $$











    -

    Interpretations and optimizing our parameters

    +

    Interpretations and optimizing our parameters

    @@ -482,7 +534,7 @@ meaning that the solution for \( \hat{\beta} \) is the one which minimizes the r











    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -505,7 +557,7 @@ where the matrix \( \hat{\Sigma} \) is a diagonal matrix with \( \sigma_i \) as











    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -533,7 +585,7 @@ where we have defined the matrix \( \hat{A} =\hat{X}/\hat{\Sigma} \) with matrix











    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -559,7 +611,7 @@ $$











    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -590,7 +642,7 @@ $$











    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -614,7 +666,7 @@ $$











    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -660,7 +712,7 @@ This approach (different linear and non-linear regression) suffers often from bo











    -

    Simple regression model

    +

    Simple regression model

    We are now ready to write our first program which aims at solving the above linear regression equations. We start with data we have produced ourselves, in this case normally distributed random numbers along the \( x \)-axis. These numbers define then the value of a function \( y(x)=4+3x+N(0,1) \). Thereafter we order the \( x \) values and employ our linear regression algorithm to set up the best fit. Here we find it useful to use the numpy function \( c\_ \) arrays where arrays are stacked along their last axis after being upgraded to at least two dimensions with ones post-pended to the shape. The following examples help in understanding what happens

    @@ -700,7 +752,7 @@ We see that, as expected, a linear fit gives a seemingly (from the graph) good r











    -

    Simple regression model, now using scikit-learn

    +

    Simple regression model, now using scikit-learn

    We can repeat the above algorithm using scikit-learn as follows @@ -731,7 +783,7 @@ plt.show()











    -

    Simple linear regression model using scikit-learn

    +

    Simple linear regression model using scikit-learn

    We start with perhaps our simplest possible example, using scikit-learn to perform linear regression analysis on a data set produced by us. @@ -799,7 +851,7 @@ plt.show()











    -

    Simple linear regression model

    +

    Simple linear regression model

    This example serves several aims. It allows us to demonstrate several @@ -821,7 +873,7 @@ where \( x \) is defined as before.











    -

    Less noise

    +

    Less noise

    Does the fit look better? Indeed, by @@ -834,7 +886,7 @@ have not discussed a more rigorous approach to the cost function.











    -

    How to study our fits

    +

    How to study our fits

    We need more rigorous criteria in defining whether we have succeeded or @@ -856,7 +908,7 @@ dimensionless.











    -

    Minimizing the cost function

    +

    Minimizing the cost function

    Minimizing the cost function is a central aspect of @@ -877,7 +929,7 @@ the \( \chi^2 \) function becomes smaller.











    -

    Relative error

    +

    Relative error

    There are many ways to define the cost function. A simpler approach is to look at the relative difference between the training data and the predicted data, that is we define @@ -917,7 +969,7 @@ relative error.











    -

    The richness of scikit-learn

    +

    The richness of scikit-learn

    As mentioned above, scikit-learn has an impressive functionality. @@ -962,7 +1014,7 @@ plt.show()











    -

    Functions in scikit-learn

    +

    Functions in scikit-learn

    The function coef gives us the parameter \( \beta \) of our fit while intercept yields @@ -979,7 +1031,7 @@ this function as being similar to the \( \chi^2 \) function defined above.











    -

    Other functions in scikit-learn

    +

    Other functions in scikit-learn

    The r2score function computes \( R^2 \), the coefficient of @@ -1003,7 +1055,7 @@ $$











    -

    The mean absolute error and other functions in scikit-learn

    +

    The mean absolute error and other functions in scikit-learn

    Another quantity will meet again in our discussions of regression analysis is @@ -1028,12 +1080,13 @@ years etc.











    -

    Cubic polynomial in scikit-learn

    +

    Cubic polynomial in scikit-learn

    We will discuss in more detail these and other functions in the various lectures. We conclude this part with another example. Instead of -a linear \( x \)-dependence we study now a cubic polynomial and use the polynomial regression analysis tools of scikit-learn. +a linear \( x \)-dependence we study now a cubic polynomial and use the polynomial regression analysis tools of scikit-learn. +Add description of the various python commands.

    @@ -1070,82 +1123,12 @@ plt.show() print (error(y))

    -Similarly, using R, we can perform similar studies. -(more details on R will be inserted later). +Using R, we can perform similar studies.











    -

    Simple regression model with gradient descent

    -Add info about the equations, play around with different learning rates -

    - - -

    # Importing various packages
    -from math import exp, sqrt
    -from random import random, seed
    -import numpy as np
    -import matplotlib.pyplot as plt
    -
    -x = 2*np.random.rand(100,1)
    -y = 4+3*x+np.random.randn(100,1)
    -
    -xb = np.c_[np.ones((100,1)), x]
    -theta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)
    -print(theta_linreg)
    -theta = np.random.randn(2,1)
    -
    -eta = 0.1
    -Niterations = 1000
    -m = 100
    -
    -for iter in range(Niterations):
    -    gradients = 2.0/m*xb.T.dot(xb.dot(theta)-y)
    -    theta -= eta*gradients
    -
    -print(theta)
    -xnew = np.array([[0],[2]])
    -xbnew = np.c_[np.ones((2,1)), xnew]
    -ypredict = xbnew.dot(theta)
    -ypredict2 = xbnew.dot(theta_linreg)
    -plt.plot(xnew, ypredict, "r-")
    -plt.plot(xnew, ypredict2, "b-")
    -plt.plot(x, y ,'ro')
    -plt.axis([0,2.0,0, 15.0])
    -plt.xlabel(r'$x$')
    -plt.ylabel(r'$y$')
    -plt.title(r'Random numbers ')
    -plt.show()
    -
    -

    -









    - -

    Simple regression model with stochastic gradient descent

    -Add info about the equations, play around with different learning rates -

    - - -

    # Importing various packages
    -from math import exp, sqrt
    -from random import random, seed
    -import numpy as np
    -import matplotlib.pyplot as plt
    -from sklearn.linear_model import SGDRegressor
    -
    -x = 2*np.random.rand(100,1)
    -y = 4+3*x+np.random.randn(100,1)
    -
    -xb = np.c_[np.ones((100,1)), x]
    -theta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)
    -print(theta_linreg)
    -sgdreg = SGDRegressor(n_iter = 50, penalty=None, eta0=0.1)
    -sgdreg.fit(x,y.ravel())
    -print(sgdreg.intercept_, sgdreg.coef_)
    -
    -

    -









    - -

    Polynomial Regression

    +

    Polynomial Regression

    @@ -1173,10 +1156,92 @@ plt.ylabel(r plt.title(r'Random numbers ') plt.show()

    +

    + + +

    Linking the regression analysis with a statistical interpretation

    + +

    +Before we proceed, and to link with our discussions of Bayesian statistics to come, it is useful the derive the standard regression analysis equations using a statistical interpretation. This allows us also to derive quantities like the variance and other expectation values in a rather straightforward way. + +

    +It is assumed that \( \varepsilon_i +\sim \mathcal{N}(0, \sigma^2) \) and the \( \varepsilon_{i} \) are +independent, i.e.: +$$ +\begin{align*} +\mbox{Cov}(\varepsilon_{i_1}, +\varepsilon_{i_2}) & = \left\{ \begin{array}{lcc} \sigma^2 & \mbox{if} +& i_1 = i_2, \\ 0 & \mbox{if} & i_1 \not= i_2. \end{array} \right. +\end{align*} +$$ + +The randomness of \( \varepsilon_i \) implies that +\( \mathbf{Y}_i \) is also a random variable. In particular, +\( \mathbf{Y}_i \) is normally distributed, because \( \varepsilon_i \sim +\mathcal{N}(0, \sigma^2) \) and \( \mathbf{X}_{i,\ast} \, \beta \) is a +non-random scalar. To specify the parameters of the distribution of +\( \mathbf{Y}_i \) we need to calculate its first two moments. +











    -

    Ridge and Lasso Regression

    +

    Expectation value and variance

    + +

    +Its expectation equals: +$$ +\begin{align*} +\mathbb{E}(Y_i) & = +\mathbb{E}(\mathbf{X}_{i, \ast} \, \beta) + \mathbb{E}(\varepsilon_i) +\, \, \, = \, \, \, \mathbf{X}_{i, \ast} \, \beta, +\end{align*} +$$ + +while +its variance is +$$ +\begin{align*} \mbox{Var}(Y_i) & = \mathbb{E} \{ [Y_i +- \mathbb{E}(Y_i)]^2 \} \, \, \, = \, \, \, \mathbb{E} ( Y_i^2 ) - +[\mathbb{E}(Y_i)]^2 \\ & = \mathbb{E} [ ( \mathbf{X}_{i, \ast} \, +\beta + \varepsilon_i )^2] - ( \mathbf{X}_{i, \ast} \, \beta)^2 \\ & += \mathbb{E} [ ( \mathbf{X}_{i, \ast} \, \beta)^2 + 2 \varepsilon_i +\mathbf{X}_{i, \ast} \, \beta + \varepsilon_i^2 ] - ( \mathbf{X}_{i, +\ast} \, \beta)^2 \\ & = ( \mathbf{X}_{i, \ast} \, \beta)^2 + 2 +\mathbb{E}(\varepsilon_i) \mathbf{X}_{i, \ast} \, \beta + +\mathbb{E}(\varepsilon_i^2 ) - ( \mathbf{X}_{i, \ast} \, \beta)^2 +\\ & = \mathbb{E}(\varepsilon_i^2 ) \, \, \, = \, \, \, +\mbox{Var}(\varepsilon_i) \, \, \, = \, \, \, \sigma^2. +\end{align*} +$$ + +Hence, \( Y_i \sim \mathcal{N}( \mathbf{X}_{i, \ast} \, \beta, \sigma^2) \). + +

    +









    + +

    The singular value decompostion

    +
    + +

    + +

    +A general +\( m\times n \) matrix \( \hat{A} \) can be written in terms of a diagonal +matrix \( \hat{D} \) of dimensionality \( n\times n \) and two orthognal +matrices \( \hat{U} \) and \( \hat{V} \), where the first has dimensionality +\( m \times m \) and the last dimensionality \( n\times n \). +We have then +$$ +\hat{A} = \hat{U}\hat{D}\hat{V}^T +$$ +

    + + +

    +









    + +

    Code examples for Ridge and Lasso Regression

    @@ -1257,38 +1322,390 @@ plt.show()











    -

    The singular value decompostion

    -
    - -

    -How can we use the singular value decomposition to find the parameters \( \beta_j \)? More details will come. We first note that a general \( m\times n \) matrix \( \hat{A} \) can be written in terms of a diagonal matrix \( \hat{\Sigma} \) of dimensionality \( n\times n \) and two orthognal matrices \( \hat{U} \) and \( \hat{V} \), where the first has dimensionality \( m \times n \) and the last dimensionality \( n\times n \). We have then -$$ -\hat{A} = \hat{U}\hat{\Sigma}\hat{V} -$$ -

    - +

    From standard regression to Ridge regressions

    -Add codes and discuss this in connection with lasso and ridge, show example where the standard inversion of a matrix fails and where SVD comes to rescue +One of the typical problems we encounter with linear regression, in particular +when the matrix \( \hat{X} \) (our so-called design matrix) is high-dimensional, +are problems with near singular or singular matrices. The column vectors of \( \hat{X} \) +may be linearly dependent, normally referred to as super-collinearity. +This means that the matrix may be rank deficient and it is basically impossible to +to model the data using linear regression. As an example, consider the matrix +$$ +\begin{align*} +\mathbf{X} & = \left[ +\begin{array}{rrr} +1 & -1 & 2 +\\ +1 & 0 & 1 +\\ +1 & 2 & -1 +\\ +1 & 1 & 0 +\end{array} \right] +\end{align*} +$$ + +

    +The columns of \( \hat{X} \) are linearly dependent. We se this easily since the +the first column is the row-wise sum of the other two columns. The rank (more correct, +the column rank) of a matrix is the dimension of the space spanned by the +column vectors. Hence, the rank of \( \mathbf{X} \) is equal to the number +of linearly independent columns. In this particular case the matrix has rank 2. + +

    +Super-collinearity of an \( (n \times p) \)-dimensional design matrix \( \mathbf{X} \) implies +that the inverse of the matrix \( \hat{X}^T\hat{x} \) (the matrix we needto invert to solve the linear regression equations) is non-invertible. If we have a square matrix that does not have an inverse, we say this matrix singular. The example here demonstrates this +$$ +\begin{align*} +\hat{X} & = \left[ +\begin{array}{rr} +1 & -1 +\\ +1 & -1 +\end{array} \right]. +\end{align*} +$$ + +We see easily that \( \mbox{det}(\hat{X}) = x_{11} x_{22} - x_{12} x_{21} = 1 \times (-1) - 1 \times (-1) = 0 \). Hence, \( \mathbf{X} \) is singular and its inverse is undefined. +This is equivalent to saying that the matrix \( \hat{X} \) has at least an eigenvalue which is zero.











    -

    Lasso and Ridge regression

    +

    Fixing the singularity

    -Discuss the mathematics here +If our design matrix \( \hat{X} \) which enters the linear regression problem +$$ +\begin{align} +\hat{\beta} & = (\hat{X}^{T} \hat{X})^{-1} \hat{X}^{T} \hat{y}, +\label{_auto1} +\end{align} +$$ + +has linearly dependent column vectors, we will not be able to compute the inverse +of \( \hat{X}^T\hat{X} \) and we cannot find the parameters (estimators) \( \beta_i \). +The estimators are only well-defined if \( (\hat{X}^{T}\hat{X})^{-1} \) exits. +This is more likely to happen when the matrix \( \hat{X} \) is high-dimensional. In this case it is likely to encounter a situation where +the regression parameters \( \beta_i \) cannot be estimated. + +

    +The ad hoc approach which was introduced in the 70s was simply to add a diagonal component to the matrix to invert, that is we change +$$ +\hat{X}^{T} \hat{X} \rightarrow \hat{X}^{T} \hat{X}+\lambda \hat{I}, +$$ + +where \( \hat{I} \) is the identity matrix.











    -

    Logistic regression

    -Add discussion about classification versus regression, show examples of more than two cases and why regression is not the best approach. Motivate for k-nearest neighbors +

    A second-order polynomial with Ridge and Lasso

    +

    + + +

    import numpy as np
    +import matplotlib.pyplot as plt
    +from sklearn.linear_model import Ridge
    +from sklearn.metrics import r2_score
    +
    +np.random.seed(4155)
    +
    +n_samples = 100
    +
    +x = np.random.rand(n_samples,1)
    +y = 5*x*x + 0.1*np.random.rand(n_samples,1)
    +
    +# Centering  x and y.
    +x_ = x - np.mean(x)
    +y_ = y - np.mean(y) # beta_0 = mean(y)
    +
    +X = np.c_[np.ones((n_samples,1)), x, x**2]
    +X_ = np.c_[x_, x_**2]
    +
    +
    +### 1.
    +lmb_values = [1e-4, 1e-3, 1e-2, 10, 1e2, 1e4]
    +num_values = len(lmb_values)
    +
    +## Ridge-regression of centered and not centered data
    +beta_ridge = np.zeros((3,num_values))
    +beta_ridge_centered = np.zeros((3,num_values))
    +
    +I3 = np.eye(3)
    +I2 = np.eye(2)
    +
    +for i,lmb in enumerate(lmb_values):
    +    beta_ridge[:,i] = (np.linalg.inv( X.T @ X + lmb*I3) @ X.T @ y).flatten()
    +    beta_ridge_centered[1:,i] = (np.linalg.inv( X_.T @ X_ + lmb*I2) @ X_.T @ y_).flatten()
    +
    +# sett beta_0 = np.mean(y)
    +beta_ridge_centered[0,:] = np.mean(y)
    +
    +## OLS (ordinary least squares) solution 
    +beta_ls = np.linalg.inv( X.T @ X ) @ X.T @ y
    +
    +## Evaluate the models
    +pred_ls = X @ beta_ls
    +pred_ridge =  X @ beta_ridge
    +pred_ridge_centered =  X_ @ beta_ridge_centered[1:] + beta_ridge_centered[0,:]
    +
    +## Plot the results
    +
    +# Sorting
    +sort_ind = np.argsort(x[:,0])
    +
    +x_plot = x[sort_ind,0]
    +x_centered_plot = x_[sort_ind,0]
    +
    +pred_ls_plot = pred_ls[sort_ind,0]
    +pred_ridge_plot = pred_ridge[sort_ind,:]
    +pred_ridge_centered_plot = pred_ridge_centered[sort_ind,:]
    +
    +# Plott not centered
    +plt.plot(x_plot,pred_ls_plot,label='ls')
    +
    +for i in range(num_values):
    +    plt.plot(x_plot,pred_ridge_plot[:,i],label='ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x,y,'ro')
    +
    +plt.title('linear regression on un-centered data')
    +plt.legend()
    +
    +# Plott centered
    +plt.figure()
    +
    +for i in range(num_values):
    +    plt.plot(x_centered_plot,pred_ridge_centered_plot[:,i],label='ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x_,y,'ro')
    +
    +plt.title('linear regression on centered data')
    +plt.legend()
    +
    +
    +# 2.
    +
    +pred_ridge_scikit =  np.zeros((n_samples,num_values))
    +for i,lmb in enumerate(lmb_values):
    +    pred_ridge_scikit[:,i] = (Ridge(alpha=lmb,fit_intercept=False).fit(X,y).predict(X)).flatten() # fit_intercept=False fordi bias er allerede i X
    +
    +plt.figure()
    +
    +plt.plot(x_plot,pred_ls_plot,label='ls')
    +
    +for i in range(num_values):
    +    plt.plot(x_plot,pred_ridge_scikit[sort_ind,i],label='scikit-ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x,y,'ro')
    +plt.legend()
    +plt.title('linear regression using scikit')
    +
    +plt.show()
    +
    +### R2-score of the results
    +for i in range(num_values):
    +    print('lambda = %g'%lmb_values[i])
    +    print('r2 for scikit: %g'%r2_score(y,pred_ridge_scikit[:,i]))
    +    print('r2 for own code, not centered: %g'%r2_score(y,pred_ridge[:,i]))
    +    print('r2 for own, centered: %g\n'%r2_score(y,pred_ridge_centered[:,i]))
    +
    +

    +









    + +

    Fitting vs. predicting when data is in the model class

    -Add examples on classification problems +We start by considering the case +\( f(x)=2x \).

    +Then the data is clearly generated by a model that is contained within +all three model classes we are using to make predictions (linear +models, third order polynomials, and tenth order polynomials). + +

    +Run the code for the following cases: + +

      +
    1. For \( f(x)=2x \) , \( Ntrain=10 \) and \( \sigma =0 \) (noiseless case), train the three classes of models (linear, third-order polynomial, and tenth order polynomial) for a training set when \( x \in [0,1] \) . Make graphs comparing fits for different order of polynomials. Which model fits the data the best?
    2. +
    3. Do you think that the data that has the least error on the training set will also make the best predictions? Why or why not? Can you try to discuss and formalize your intuition? What can go right and what can go wrong?
    4. +
    5. Check your answer by seeing how well your fits predict newly generated test data (including on data outside the range you fit on, for example \( x \in [0,1.2] \) ) using the code below. How well do you do on points in the range of x where you trained the model? How about points outside the original training data set?
    6. +
    7. Repeat the above for \( f(x)=2x \) , \( Ntrain=10 \) , and \( \sigma=1 \) . What changes?
    8. +
    + +Repeat the exercises above for \( f(x)=2x \) , \( Ntrain=100 \) , and \( \sigma=1 \) . What changes? +Summarize what you have learned about the relationship between model complexity (number of parameters), goodness of fit on training data, and the ability to predict well. + +

    +









    + +

    Fitting versus predicting when data is not in the model class

    + +

    +Thus far, we have considered the case where the data is generated using a model contained in the model class. Now consider \( f(x)=2x-10x^5+15x^{10} \) . Notice that the for linear and third-order polynomial the true model \( f(x) \) is not contained in model class. + +

      +
    1. Do better fits lead to better predictions?
    2. +
    3. What is the relationship between the true model for generating the data and the model class that has the most predictive power? How is this related to the model complexity? How does this depend on the number of data points \( Ntrain \) and \( \sigma \)?
    4. +
    + +Summarize what you think you learned about the relationship of knowing the true model class and predictive power. + +

    +









    + +

    The code

    + +

    + + +

    import numpy as np
    +import sklearn as sk
    +from sklearn import datasets, linear_model
    +from sklearn.preprocessing import PolynomialFeatures
    +
    +import matplotlib as mpl
    +from matplotlib import pyplot as plt
    +
    +%matplotlib notebook
    +
    +# The Training Data
    +
    +N_train=100
    +
    +sigma_train=1;
    +
    +# Train on integers
    +x=np.linspace(0.05,0.95,N_train)
    +# Draw random noise
    +s = sigma_train*np.random.randn(N_train)
    +
    +#linear
    +y=2*x+s
    +
    +#Tenth Order
    +#y=2*x-10*x**5+15*x**10+s
    +
    +p1=plt.plot(x,y, "o",ms=15, label='Training')
    +
    +#Linear Regression
    +# Create linear regression object
    +clf = linear_model.LinearRegression()
    +
    +# Train the model using the training sets
    +clf.fit(x[:, np.newaxis], y)
    +# The coefficients
    +
    +xplot=np.linspace(0.02,0.98,200)
    +linear_plot=plt.plot(xplot, clf.predict(xplot[:, np.newaxis]),label='Linear')
    +
    +#Polynomial Regression
    +
    +
    +poly3 = PolynomialFeatures(degree=3)
    +X = poly3.fit_transform(x[:,np.newaxis])
    +clf3 = linear_model.LinearRegression()
    +clf3.fit(X,y)
    +
    +
    +Xplot=poly3.fit_transform(xplot[:,np.newaxis])
    +poly3_plot=plt.plot(xplot, clf3.predict(Xplot), label='Poly 3')
    +
    +
    +
    +#poly5 = PolynomialFeatures(degree=5)
    +#X = poly5.fit_transform(x[:,np.newaxis])
    +#clf5 = linear_model.LinearRegression()
    +#clf5.fit(X,y)
    +
    +#Xplot=poly5.fit_transform(xplot[:,np.newaxis])
    +#plt.plot(xplot, clf5.predict(Xplot), 'r--',linewidth=1)
    +
    +poly10 = PolynomialFeatures(degree=10)
    +X = poly10.fit_transform(x[:,np.newaxis])
    +clf10 = linear_model.LinearRegression()
    +clf10.fit(X,y)
    +
    +Xplot=poly10.fit_transform(xplot[:,np.newaxis])
    +poly10_plot=plt.plot(xplot, clf10.predict(Xplot), label='Poly 10')
    +
    +axes = plt.gca()
    +axes.set_ylim([-7,7])
    +
    +handles, labels=axes.get_legend_handles_labels()
    +plt.legend(handles,labels, loc='lower center')
    +plt.xlabel("$x$")
    +plt.ylabel("$y$")
    +Title="$N=$"+str(N_train)+", $\sigma=$"+str(sigma_train)
    +plt.title(Title+" (train)")
    +plt.tight_layout()
    +plt.show()
    +
    +

    + + +

    Generating test data

    +

    + + +

    # Generate Test Data
    +
    +#Number of test data
    +N_test=20
    +
    +sigma_test=sigma_train
    +
    +max_x=1.2
    +x_test=max_x*np.random.random(N_test)
    +# Draw random noise
    +s_test = sigma_test*np.random.randn(N_test)
    +
    +#Linear
    +y_test=2*x_test+s_test
    +#Tenth order
    +#y_test=2*x_test-10*x_test**5+15*x_test**10+s_test
    +
    +#Make design matrices for prediction
    +x_plot=np.linspace(0,max_x, 200)
    +X3 = poly3.fit_transform(x_plot[:,np.newaxis])
    +X10 = poly10.fit_transform(x_plot[:,np.newaxis])
    +
    +%matplotlib notebook
    +
    +fig = plt.figure() 
    +p1=plt.plot(x_test,y_test.transpose(), 'o', ms=12, label='data')
    +p2=plt.plot(x_plot,clf.predict(x_plot[:,np.newaxis]), label='linear')
    +p3=plt.plot(x_plot,clf3.predict(X3), label='3rd order')
    +p10=plt.plot(x_plot,clf10.predict(X10), label='10th order')
    +
    +
    +plt.legend(loc=2)
    +plt.xlabel('$x$')
    +plt.ylabel('$y$')
    +plt.legend(loc='best')
    +plt.title(Title+" (pred.)")
    +plt.tight_layout()
    +plt.show()
    +
    +#Linear Filename
    +#filename_test=Title+"pred-linear.pdf"
    +#Tenth Order Filename
    +#filename_test=Title+"pred-o10.pdf"
    +#plt.savefig(filename_test)
    +#plt.ylim((-6,12))
    +
    +

    +









    + +

    Lasso regression

    + +

    +









    + +

    Logistic regression

    diff --git a/doc/pub/Regression/ipynb/Regression.ipynb b/doc/pub/Regression/ipynb/Regression.ipynb index a4a85095f..af7e36ea4 100644 --- a/doc/pub/Regression/ipynb/Regression.ipynb +++ b/doc/pub/Regression/ipynb/Regression.ipynb @@ -10,7 +10,7 @@ " \n", "**Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University\n", "\n", - "Date: **Aug 24, 2018**\n", + "Date: **Sep 6, 2018**\n", "\n", "Copyright 1999-2018, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license\n", "\n", @@ -33,6 +33,28 @@ "\n", "\n", "\n", + "## Regression analysis, overarching aims II\n", + "\n", + "\n", + "Consider an experiment in which $p$ characteristics of $n$ samples are\n", + "measured. The data from this experiment are denoted $\\mathbf{X}$, with\n", + "$\\mathbf{X}$ as above. The matrix $\\mathbf{X}$ is called the *design\n", + "matrix*. Additional information of the samples is available in the\n", + "form of $\\mathbf{Y}$ (also as above). The variable $\\mathbf{Y}$ is\n", + "generally referred to as the *response variable*. The aim of\n", + "regression analysis is to explain $\\mathbf{Y}$ in terms of\n", + "$\\mathbf{X}$ through a functional relationship like $Y_i =\n", + "f(\\mathbf{X}_{i,\\ast})$. When no prior knowledge on the form of\n", + "$f(\\cdot)$ is available, it is common to assume a linear relationship\n", + "between $\\mathbf{X}$ and $\\mathbf{Y}$. This assumption gives rise to\n", + "the *linear regression model* where $\\beta = (\\beta_1, \\ldots,\n", + "\\beta_p)^{\\top}$ is the *regression parameter*. The parameter\n", + "$\\beta_j$, $j=1, \\ldots, p$, represents the effect size of covariate\n", + "$j$ on the response. That is, for each unit change in covariate $j$\n", + "(while keeping the other covariates fixed) the observed change in the\n", + "response is equal to $\\beta_j$.\n", + "\n", + "\n", "\n", "## General linear models\n", "Before we proceed let us study a case from linear algebra where we aim at fitting a set of data $\\hat{y}=[y_0,y_1,\\dots,y_{n-1}]$. We could think of these data as a result of an experiment or a complicated numerical experiment. These data are functions of a series of variables $\\hat{x}=[x_0,x_1,\\dots,x_{n-1}]$, that is $y_i = y(x_i)$ with $i=0,1,2,\\dots,n-1$. The variables $x_i$ could represent physical quantities like time, temperature, position etc. We assume that $y(x)$ is a smooth function. \n", @@ -897,19 +919,10 @@ { "cell_type": "code", "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[1 4]\n", - " [2 5]\n", - " [3 6]]\n", - "[[1 2 3 0 0 4 5 6]]\n" - ] - } - ], + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "import numpy as np\n", "print(np.c_[np.array([1,2,3]), np.array([4,5,6])])\n", @@ -918,20 +931,11 @@ }, { "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
    " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "%matplotlib inline\n", "\n", @@ -941,7 +945,7 @@ "import matplotlib.pyplot as plt\n", "\n", "x = 2*np.random.rand(100,1)\n", - "y = 4+3*x+0.01*np.random.randn(100,1)\n", + "y = 4+3*x+np.random.randn(100,1)\n", "\n", "xb = np.c_[np.ones((100,1)), x]\n", "beta = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)\n", @@ -975,20 +979,11 @@ }, { "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
    " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "# Importing various packages\n", "from random import random, seed\n", @@ -997,7 +992,7 @@ "from sklearn.linear_model import LinearRegression\n", "\n", "x = 2*np.random.rand(100,1)\n", - "y = 4+3*x+0.01*np.random.randn(100,1)\n", + "y = 4+3*x+np.random.randn(100,1)\n", "linreg = LinearRegression()\n", "linreg.fit(x,y)\n", "xnew = np.array([[0],[2]])\n", @@ -1068,20 +1063,11 @@ }, { "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
    " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "# Importing various packages\n", "import numpy as np\n", @@ -1216,27 +1202,18 @@ }, { "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
    " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from sklearn.linear_model import LinearRegression\n", "\n", "x = np.random.rand(100,1)\n", - "y = 5*x+np.random.randn(100,1)\n", + "y = 5*x+0.01*np.random.randn(100,1)\n", "linreg = LinearRegression()\n", "linreg.fit(x,y)\n", "ypredict = linreg.predict(x)\n", @@ -1272,34 +1249,11 @@ }, { "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The intercept alpha: \n", - " [2.00137415]\n", - "Coefficient beta : \n", - " [[4.99698001]]\n", - "Mean squared error: 0.00\n", - "Variance score: 1.00\n", - "Mean squared log error: 0.00\n", - "Mean absolute error: 0.01\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEWCAYAAABrDZDcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAHVRJREFUeJzt3XuUXeV53/HvTyPJYoRsmpHAXKQZx41xiG2KMwW8nAtBdkodipvGywtHEoI4ltHUBFpacKK1apKGum5WHCtJkRAYENIxBrvQKK4vNTaulx2DPRRMuJga6EgIMEgQMCo3XZ7+8Z7jOXN0LnsuZ5/L/n3WmjVzzr69szXaz3neqyICMzMrrnmdLoCZmXWWA4GZWcE5EJiZFZwDgZlZwTkQmJkVnAOBmVnBORDYnJH0q5Ie7nQ5+oGkFZL2SRpow7nfLenH5fP/S0lfkbR2rq9jvUMeR2DTJWkC+P2IuL3TZWlE0hXABuBV4ADwIHBpRHyvk+XqBpK+AeyIiI11tp1P+rf9ldwLZh3jjMB6nqT5DTbdHBFHAkuBO4Av5Hz9bjUMPNDpQlj3cCCwOSPpDEm7q15PSPp3ku6T9IKkmyUtqtp+tqR7JT0v6e8kvaNq28clPSrpRUkPSvrtqm3nS/qupL+Q9CxwRbNyRcQBoAQcL2lZxuu/U9I95et/oVz2P63+PSVdLuknwPUZzne5pCfK53tY0sry+6dKGpf0U0lPS/p0+f0RSVEJMpKOk7RD0nOSHpH0kapzXyHpFkk3ls//gKTRBv9GjwI/D/xtuWrodZK+Jen3Jf0isBl4V3nb883uq/UPBwJrtw8CZwFvAt4BnA8g6RTgOuCjwBBwNbBD0uvKxz0K/CrwBuCPge2Sjq0672nAY8AxwJXNCiBpIXAe8CzwD62uX97/NuAG4OeAm4DfrjntG8vbhoF1Lc53IvAx4J9GxBLgnwET5fNsBDZGxOuBNwO3NPg1Pg/sBo4DPgD8J0lnVm0/p7zPUcAO4K/rnSQi3gzsAv5FRBwZEa9WbXsIuBD4XnnbUQ3KYn3GgcDa7S8j4smIeA74W+CflN9fB1wdEXdFxMGI2Eqqzz8dICK+UD7uUETcDPwYOLXqvE9GxF9FxIGIeLnBtT9Y/lT7MvAR4APl7KDV9U8H5pfLvj8ibgW+X3PuQ8AnIuLV8vWbne8g8DrgJEkLImIiIh4tn2c/8I8lLY2IfRFxZ+0vIWk58G7g8oh4JSLuBa4lBbeK70TElyPiILANOLnBPTE7jAOBtdtPqn5+CTiy/PMwcGm5GuX58gN7OekTL5LOq6pmeR54G6muv+LxDNe+pfyp9hjgfuCXq7Y1u/5xwBMxtSdF7fX2RMQrWc4XEY8Al5CqsJ6R9HlJx5WP+zDwFuBHkn4g6ew6v8dxwHMR8WLVezuB46te197nRT3YdmEd4kBgnfI4cGVEHFX1NRgRN0kaBq4hVacMlR/m9wOqOj5zd7eI2Ev6xH5FVfVSw+sDT5HaE6qvt7z2tFl/n3IZPlfuiTNcPvZT5fd/HBEfAo4uv/dFSYtrzv0k8HOSllS9twJ4Ius9mAZ3IywgBwKbqQWSFlV9TffT5zXAhZJOU7JY0m+VH3aLSQ+kPQCSLiBlBDMWEQ8DXwMuy3D975Gqcz4mab6k9zO1Wmpav4+kEyWdWW7/eIVUVXWo/LutlrQsIg4BlcbZQzVlfxz4O+CT5Xv9DlImsX0296SBp4ETyu0kVhAOBDZTXyY90CpfV0zn4IgYJ9Xb/zWpAfcRyg3JEfEg8OekB/LTwNuB785Bmf+M1LB7dIvrvwb8K9LD9nlgNfAlUp3/tH8fUvvAfwb2kqpwjgb+sLztLOABSftIDcfnNmjz+BAwQsoObiO1T7RjHMc3SV1LfyJpbxvOb13IA8rMMpB0F7A5Iq7vdFnM5pozArM6JP26pDeWq4bWkrq+frXT5TJrh7YHgnL96L1VXz+VdEm7r2s2SycCPyRVDV1K6nr6VGeLZNYeuVYNKU2g9QRwWkTszO3CZmbWUN5VQyuBRx0EzMy6R94DTs4lDdc/jKR1pL7eLF68+Jff+ta35lkuM7Pe8vd/D6+99rOXE8DeCDXcv4ncqobK/ZKfBH4pIp5utu/o6GiMj4/nUi4zs56kqc/8UWB8hoEgz6qhfw7871ZBwMzMmnjsscOCwGzlGQg+RINqITMza2H/fjjtNHjzmyffW7So8f7TkEsgKM+d8l7g1jyuZ2bWs0olGBmBefPS91IJPvMZWLgQvl+eBPeGGyACrr0WhodBYj+81uSsTXXlyGK3EZhZIZVKsG4dvPRS/e1nnw1/8zcpSNSQdHdE1F2QqBVPU2tm1g1KJVi7Fg4erL/9ySfh2GPrb5slTzFhZtYJlSogCQYGYPXqxkFAalsQAGcEZmb5GxuDzZtTPT/AoUPN91+xoq3FcSAwM8tTqQSbNmXff3AQrmy6LPesuWrIzCwvpRKcd17r/SoGBmDLFli1qn1lwoHAzCwflR5BraqBKgYHYevWtgcBcCAwM8vHhg2Nu4XWGhrKJROocCAwM2u3fftgZ4ZJl4eHYft22Ls3tyAADgRmZnOrdmSwBEuWND9mwYIUACYmcg0AFQ4EZmZzpdIOsHNn6hpamwUcccThxwwNwfXXdyQAVDgQmJnNRnUGsHZt/XaAhQtTYLjmmp/NDdSpaqB6PI7AzGymaucGajQyeP/+9H3Vqo4/9OtxRmBmNlNZewK1eWTwbDkQmJllVT0/0Pz52XoC5TAyeLYcCMzMsqhuCIbG1UCQRgRX2gFyHA8wU24jMDPLIms10OBgTzz8qzkjMDNrpLpHUNYBYT0WBMAZgZlZfa1WC6s1PJwGhPUgZwRmZvVMZ26gHmgQbsYZgZlZLan1PgMDqcF4eDgFgR6rDqrmjMDMrLotoFUQGB5Oo4QPHEjfOzQ/0FxyRmBmxdasLWBwcOr7PV4F1IgzAjMrttWr6weBSg+g6rmBerBHUBYOBGZWTDfd1LwaaNeu9NCfmEirivVBFVAjDgRm1t9KJVi6ND30q79+93ebH9fl8wPNJQcCM+tfY2Op6ufZZxvvs21bqvuv1qdtAY04EJhZfyqVYPPm5vsMD6dAUZC2gEYUEZ0uw2FGR0djfHy808Uws142MtJ6Wggp1f/3AUl3R8ToTI51RmBm/SnL3EAFagdoxoHAzPpD9VoBWUYGL1hQqHaAZhwIzKx3VT/816zJlgVAVywY301yCQSSjpL0RUk/kvSQpHflcV0z62O1C8XUa+8cGjp8sfiIrlgwvpvkNcXERuCrEfEBSQuBwVYHmJk1lWV20OeeSw99a6rtGYGkNwC/BnwWICJei4jn231dM+sj1ZPCjYzAH/2RG4PnUB5VQ28C9gDXS7pH0rWSFtfuJGmdpHFJ43v27MmhWGbWE6qrgCLS909+svVxBRsUNht5BIL5wDuBTRFxCvD/gI/X7hQRWyJiNCJGly1blkOxzKwnNKsCOuKIqa8rvYUKOChsNvIIBLuB3RFxV/n1F0mBwcysvrExmD8/PdgbVQFJcM01UxuDt23rmzUC8tT2xuKI+ImkxyWdGBEPAyuBB9t9XTPrUWNjsGlT6/1WrEgPez/wZy2vXkMXAaVyj6HHgAtyuq6Z9YJSKVUBZR0H4Pr/OZVLIIiIe4EZzYFhZn2u2QphtaSUCfT4GsHdxktVmllnZRkPAGmx+AMH2l+eAvIUE2aWn9rxAKVS9uqgdevaWbJCc0ZgZvmorQLauTOtBZDF+vVw1VXtK1vBORCYWT6yVgFVGxz0eIAcuGrIzPKxa1f996U0GdzwcHo9MJC+e1BYbpwRmFn7NVsfwOMBOs4ZgZm1z8aNzYOAxwN0BQcCM2sPCS65ZOp7lSqggi4S361cNWRms1MZFbxrV6rmqdcd9OWXYdGi9LMf/F3HgcDMZm5sDDZvnlwdrF4QqLdymHUVBwIzm5lSaWoQqOUA0DPcRmBmM7NhQ+OHfbMGYus6zgjMbPpaPei9RGRPcUZgZtm9+GLrICC5S2iPcUZgZtnUCwCDg1OnjZDgwgvdM6jHOCMws0mV2UGlyaUiK1/Vtm5N7QNbthy+VKQnh+s5zgjMLKmdHfTgwfr7VTcQe2qIvuCMwMySVrODDg+7S2ifciAws6TR7KBZt1vPciAwK6LalcLOOKP1p313Ce1bbiMwK5p6K4W1Wi7Ss4T2NWcEZkXTrC1g2zYvEFNADgRm/a62GqjRp38prSE8MZGqiQ4cSN8nJhwE+pyrhsz6Wb1qoEbcBlBYzgjM+lnWBePdBlBoDgRm/axZBuCVwqzMVUNm/Wj3bli+vPH24eFU92+GMwKz/lE9T1CzIOBqIKvhQGDWq6p7Ay1dmnr81FYFXXaZF4y3lhRdOHfI6OhojI+Pd7oYZt2rtjdQI64CKgxJd0fE6EyOzaWNQNIE8CJwEDgw08KaGSkIrF3beHbQap4fyDLIs7H4NyJib47XM+s/lUwgSxAAjw2wTNxryKyXZM0EwI3ClllejcUB/E9Jd0taV28HSeskjUsa37NnT07FMushUvMgsGABDA25UdimLa+M4Fci4glJRwNfl/SjiPh29Q4RsQXYAqmxOKdymXW/VovFQ5og7vrr/eC3GcklI4iIJ8rfnwFuA07N47pmPa3eWsGQqnxqX2/d6iBgM9b2QCBpsaQllZ+B3wTub/d1zXrWK6/UDwAR9ReMdxWQzVIeVUPHALcp/WHPBz4XEV/N4bpmvadRAKjmBeNtjrU9I4iIxyLi5PLXL0WEuzGY1apXDXTZZV4s3nLhKSbM8lQqpekgKg/+o45qnAV86lP5l88KyeMIzPJSKsEFF8D+/ZPvvfDC1H2cAVgHOCMwy0NlWojqIFDtjW90ELCOcSAwa5fqaaHXrGk+GOzpp3MrllktVw2ZtcN73gPf+Mbk61af9j0nkHWQMwKzuTY2NjUItLJwoecEso5yIDCbreoqoPnzYdOm7McODcF113lcgHWUq4bMZqN2gZjpzAzqEcHWJZwRmM3Ghg2tVwmr5WkhrMs4IzCbjdo1gptZuRJuv719ZTGbIWcEZtNRvWD88uXZjhkYgPXrHQSsazkjMMuqtj1g9+7m+7sdwHqEMwKzZqozgLVrs7cHDAw4CFjPcEZg1oh7BFlBOCMwa+Tii7NlAENDXijGepozArN6SiV49tnW+w0OwsaNfvBbT3MgMKt18slw332Ntw8MwKFDaX6gK690ELCe56ohK67qhuCRkfRaah4EIC0Uf+gQTEw4CFhfcEZgxVS7SMzOnbB6devjhob88Le+44zAiuniixsvEgOwfXuq/69WaQ8w6zPOCKyYmjUEV68dsGED7Nrl9gDraw4EVjz1FouvZ9UqP/itEBwIrDiyBIChofaXw6zLtGwjkPR1SSfnURizOVcqwXHH1Q8CCxce/tptAFZAWRqLLwc+I+l6Sce2u0Bmc6ZUSj2Bnnpq6vvbt6d2gOuumzoi2CuFWUEpWi2qXdlR+h3gPwC3Av8lIl5uV6FGR0djfHy8Xae3flQqTW3YbbZOwPBwGgNg1kck3R0RozM5NlP3UUkCHgY2ARcBP5a0ZiYXNJtzlTEBO3emT/qtFovZtSufcpn1iCxtBN8FngD+AjgeOB84AzhV0pZ2Fs4sk1ZjAmqtWNG+spj1oCy9htYBD8bhdUgXSXqoDWUym55mYwIGB6fOIDo4mMYDmNnPtMwIIuKBOkGg4rfmuDxm2Umtu4Ru2eIpos1amNUUExHx2FwVxKyhsTGYPz89zOfPT6+zjglYtSo1DHuSOLOGcptrSNKApHskfSmva1ofGBuDTZsmVwc7eDC9rrZ9u8cEmM1CniOLLwYeAl6f4zWt1119dfPtnhfIbNZyyQgknUBqT7g2j+tZHzl0qPG26iDgKiCzGcuraugzwGVAw//VktZJGpc0vmfPnpyKZV0t6+RwZjYrbQ8Eks4GnomIu5vtFxFbImI0IkaXLVvW7mJZt6luEM7SG2jx4nzKZVYAeWQE7wbOkTQBfB44U9L2HK5rvaBUgiVLpjYI1xoYOPx1q7YDM8us7YEgIv4wIk6IiBHgXOCbEZFhTUDre6USrFsH+/bV3z4wkNoBtm6dOhZg61a3AZjNIa9HYJ2zYcPUUb+1KhmCF4gxa6tc1yyOiG9FxNl5XtO6SKkEIyMwbx4sWtR6crjaKiEzawtnBJaPSjVQJQN49dXWx6xb194ymRmQc0ZgBVOdAaxdW78aqF7vIAnWr4errmp7Ec3MgcDaoVSCpUvT6mCVNQIa9QiKmNoQvH17GhTmIGCWG1cN2dyqLBKTdX0ArxZm1nEOBDZ3SiVYs2bq1A/NeG0As67gqiGbG5XG4FZBYGDAawOYdRlnBDY3Lr+8+ZgASBmAH/5mXceBwGYvy+Rw8+Y5CJh1KVcN2fRUdwnNMjkcpEVibrzRQcCsSzkQWDb1uoTWGhw8/L2hIbjuOgcBsy7mQGCtVRqCn322/vbh4RQYaheK374d9u51EDDrcoqsXf1yNDo6GuPj450uhlWMjDSfF0hqvpKYmbWdpLsjYnQmxzojsMNVtwMMDLSeHG7FilyKZWbt4V5DNtXYGGzePNkG0Cpj9KAws57njMAmlUpTg0C1er2DhobcJdSsDzgQ2KTVqxtnAPUmh3NDsFlfcNWQpQniFi5svo8nhzPrW84Iiqa6IXhkJH3CbxUEJLcDmPUxB4IiqYwHqAwIq+0NNDp6+KAwCS680FVAZn3MgaBImi0WHwE/+MHhg8K2bfMiMWZ9zm0ERdJoPEB1j6BVq/zp36xgnBH0m9o2gFKp9eRwHhBmVmjOCPpJpQ2gUv2zc2fqEtqMB4SZFZ4zgn7SrA0AUjvA9u1T2wA8IMys8BwIelllauhK1U+zNoDKQLFVq9J4gEOH0ncHAbPCc9VQryqV4Pd+D157rfW+bgMwsyacEfSqDRuyBQG3AZhZCw4EvaK6N9DSpa2nhq5wG4CZteCqoV5Q2xuo0UphtYaHHQTMrCVnBL2gVW+gelwlZGYZtT0QSFok6fuSfijpAUl/3O5r9p1du7LtVxk05m6hZjYNeVQNvQqcGRH7JC0AviPpKxFxZw7X7n3NRgRX8zTRZjZDbc8IItlXfrmg/NVi/UPjjjuyBwFXA5nZLOTSRiBpQNK9wDPA1yPirjr7rJM0Lml8z549eRSre9RbI+DMM6fuUz0ieGgofXl0sJnNAUWrxcnn8mLSUcBtwEURcX+j/UZHR2N8fDy3cnVUbY+gWhMT6WFvZtaEpLsjYnQmx+baaygingfuAM7K87pdqZIFrF7dfI0ABwEza7M8eg0tK2cCSDoCeC/wo3Zft6tVrxTWSNb2ATOzWcqj19CxwFZJA6TAc0tEfCmH63afUimNCcgyKtjzA5lZTtoeCCLiPuCUdl+na42NpcbcgwezH+NeQGaWI48sbqexMdi0aXpBwL2AzCxnnmuonbZsyb7v4KADgJl1hDOCdsqaCTgLMLMOciCYC2NjMDAwuVLY4sXZev0MDqaBYl4pzMw6yIFgtirtAIcOTb6XZaZQZwFm1iUcCGajVEpBoJFjjoH161O2AOn7+vVpoJizADPrErlOMZFV108xUSrBxRe3XiBGmpopmJm1yWymmHCvoelqNTdQNQ8KM7Me4Kqh6cq6Wti8eR4UZmY9wYGgkdqpoUsl+IM/yDY9xOLFcOONbgMws57gqqF6SiW44ALYvz+93rkzzRLaigeFmVkPckZQq1SCNWsmg0A9g4OHvzc05CBgZj3JgaBapSG4WU+qiPTAr6wWNjycBoXt3esgYGY9yVVDFaUSrF2bbVqIVav80DezvuGMACYzgVZBYGgon/KYmeWouIGguldQs+UiKxYuhI0bcymamVmeilk1NJ1BYZAygY0bXR1kZn2peIFgOm0BAwOwdasDgJn1tWJUDY2Nwfz5qZfP6tXZgsDgoIOAmRVCfweCUgmOPDL7cpGVNQU8RbSZFUj/Vg1Ntx3Ao4LNrKD6KyOo7gm0dm32IDAw4CBgZoXVPxlBbQaQdb1gZwJmVnC9nxFUsoAsYwFquS3AzKzHM4LptgNAqjb66EfhqqvaVy4zsx7SWxlBqQRLl6aePRKcd17rIFDdE2j79lRl5CBgZvYzvZMRjI0dvlB8q/WAXf9vZtZSb2QEpdLhQaAV1/+bmWXSGxnBhg3Z93UWYGY2Lb2REeza1Xy7RwSbmc1Yb2QEK1Y0XzTecwKZmc1Y2zMCScsl3SHpQUkPSLp42ie58so0aVw9K1c6CJiZzUIeVUMHgEsj4iTgdOBfSzppWmdYtQpuuCFNIFchwfr1cPvtc1hUM7PiaXvVUEQ8BTxV/vlFSQ8BxwMPTutEXifYzKwtcm0sljQCnALcVWfbOknjksb37NmTZ7HMzAott0Ag6UjgvwGXRMRPa7dHxJaIGI2I0WXLluVVLDOzwsslEEhaQAoCpYi4NY9rmplZNnn0GhLwWeChiPh0u69nZmbTk0dG8G5gDXCmpHvLX+/L4bpmZpZBHr2GvgOo3dcxM7OZ6Y0pJszMrG0cCMzMCs6BwMys4BwIzMwKzoHAzKzgHAjMzArOgcDMrOAcCMzMCs6BwMys4BwIzMwKzoHAzKzgHAjMzArOgcDMrOAcCMzMCk4R0ekyHEbSi8DDnS5Hl1gK7O10IbqA78Mk34tJvheTToyIJTM5sO3rEczQwxEx2ulCdANJ474Xvg/VfC8m+V5MkjQ+02NdNWRmVnAOBGZmBdetgWBLpwvQRXwvEt+HSb4Xk3wvJs34XnRlY7GZmeWnWzMCMzPLiQOBmVnBdSwQSDpL0sOSHpH08TrbXyfp5vL2uySN5F/KfGS4F/9W0oOS7pP0DUnDnShnHlrdi6r9fkdSSOrbroNZ7oWkD5b/Nh6Q9Lm8y5iXDP9HVki6Q9I95f8n7+tEOfMg6TpJz0i6v8F2SfrL8r26T9I7W540InL/AgaAR4GfBxYCPwROqtlnDNhc/vlc4OZOlLVL7sVvAIPln9cX+V6U91sCfBu4ExjtdLk7+HfxC8A9wD8qvz660+Xu4L3YAqwv/3wSMNHpcrfxfvwa8E7g/gbb3wd8BRBwOnBXq3N2KiM4FXgkIh6LiNeAzwPvr9nn/cDW8s9fBFZKUo5lzEvLexERd0TES+WXdwIn5FzGvGT5uwD4j8CngFfyLFzOstyLjwD/NSL+ASAinsm5jHnJci8CeH355zcAT+ZYvlxFxLeB55rs8n7gxkjuBI6SdGyzc3YqEBwPPF71enf5vbr7RMQB4AVgKJfS5SvLvaj2YVK070ct70U5zV0eEf8jz4J1QJa/i7cAb5H0XUl3Sjort9LlK8u9uAJYLWk38GXgonyK1pWm+0zp2ikmrA5Jq4FR4Nc7XZZOkDQP+DRwfoeL0i3mk6qHziBlid+W9PaIeL6jpeqMDwE3RMSfS3oXsE3S2yLiUKcL1gs6lRE8ASyven1C+b26+0iaT0r3ns2ldPnKci+Q9B5gA3BORLyaU9ny1upeLAHeBnxL0gSp/nNHnzYYZ/m72A3siIj9EfF/gf9DCgz9Jsu9+DBwC0BEfA9YRJqQrogyPVOqdSoQ/AD4BUlvkrSQ1Bi8o2afHcDa8s8fAL4Z5ZaQPtPyXkg6BbiaFAT6tR4YWtyLiHghIpZGxEhEjJDaS86JiBlPttXFsvwf+e+kbABJS0lVRY/lWcicZLkXu4CVAJJ+kRQI9uRayu6xAziv3HvodOCFiHiq2QEdqRqKiAOSPgZ8jdQj4LqIeEDSnwDjEbED+CwpvXuE1DBybifK2m4Z78WfAUcCXyi3l++KiHM6Vug2yXgvCiHjvfga8JuSHgQOAv8+Ivoua854Ly4FrpH0b0gNx+f36QdHJN1E+gCwtNwm8glgAUBEbCa1kbwPeAR4Cbig5Tn79F6ZmVlGHllsZlZwDgRmZgXnQGBmVnAOBGZmBedAYGZWcA4EZmYF50BgZlZwDgRmGZTnun9v+ec/lfRXnS6T2VzxpHNm2XwC+BNJRwOnAH03stuKyyOLzTKS9L9IU32cEREvdro8ZnPFVUNmGUh6O3As8JqDgPUbBwKzFsqrO5VIKz/t6+MFYKygHAjMmpA0CNwKXBoRD5GWyfxEZ0tlNrfcRmBmVnDOCMzMCs6BwMys4BwIzMwKzoHAzKzgHAjMzArOgcDMrOAcCMzMCu7/A6jE3yWzv6FTAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
    " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "import numpy as np \n", "import matplotlib.pyplot as plt \n", @@ -1307,7 +1261,7 @@ "from sklearn.metrics import mean_squared_error, r2_score, mean_squared_log_error, mean_absolute_error\n", "\n", "x = np.random.rand(100,1)\n", - "y = 2.0+ 5*x+0.01*np.random.randn(100,1)\n", + "y = 2.0+ 5*x+0.5*np.random.randn(100,1)\n", "linreg = LinearRegression()\n", "linreg.fit(x,y)\n", "ypredict = linreg.predict(x)\n", @@ -1446,32 +1400,17 @@ "\n", "We will discuss in more\n", "detail these and other functions in the various lectures. We conclude this part with another example. Instead of \n", - "a linear $x$-dependence we study now a cubic polynomial and use the polynomial regression analysis tools of scikit-learn." + "a linear $x$-dependence we study now a cubic polynomial and use the polynomial regression analysis tools of scikit-learn. \n", + "Add description of the various python commands." ] }, { "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
    " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.004999999999999991\n" - ] - } - ], + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", @@ -1509,110 +1448,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Similarly, using **R**, we can perform similar studies. \n", - "(more details on **R** will be inserted later).\n", + "Using **R**, we can perform similar studies. \n", "\n", "\n", "\n", "\n", "\n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "## Simple regression model with gradient descent\n", - "Add info about the equations, play around with different learning rates" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "# Importing various packages\n", - "from math import exp, sqrt\n", - "from random import random, seed\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "\n", - "x = 2*np.random.rand(100,1)\n", - "y = 4+3*x+np.random.randn(100,1)\n", - "\n", - "xb = np.c_[np.ones((100,1)), x]\n", - "theta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)\n", - "print(theta_linreg)\n", - "theta = np.random.randn(2,1)\n", - "\n", - "eta = 0.1\n", - "Niterations = 1000\n", - "m = 100\n", - "\n", - "for iter in range(Niterations):\n", - " gradients = 2.0/m*xb.T.dot(xb.dot(theta)-y)\n", - " theta -= eta*gradients\n", - "\n", - "print(theta)\n", - "xnew = np.array([[0],[2]])\n", - "xbnew = np.c_[np.ones((2,1)), xnew]\n", - "ypredict = xbnew.dot(theta)\n", - "ypredict2 = xbnew.dot(theta_linreg)\n", - "plt.plot(xnew, ypredict, \"r-\")\n", - "plt.plot(xnew, ypredict2, \"b-\")\n", - "plt.plot(x, y ,'ro')\n", - "plt.axis([0,2.0,0, 15.0])\n", - "plt.xlabel(r'$x$')\n", - "plt.ylabel(r'$y$')\n", - "plt.title(r'Random numbers ')\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Simple regression model with stochastic gradient descent\n", - "Add info about the equations, play around with different learning rates" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "# Importing various packages\n", - "from math import exp, sqrt\n", - "from random import random, seed\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "from sklearn.linear_model import SGDRegressor\n", - "\n", - "x = 2*np.random.rand(100,1)\n", - "y = 4+3*x+np.random.randn(100,1)\n", - "\n", - "xb = np.c_[np.ones((100,1)), x]\n", - "theta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)\n", - "print(theta_linreg)\n", - "sgdreg = SGDRegressor(n_iter = 50, penalty=None, eta0=0.1)\n", - "sgdreg.fit(x,y.ravel())\n", - "print(sgdreg.intercept_, sgdreg.coef_)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ "## Polynomial Regression" ] }, { "cell_type": "code", - "execution_count": 10, - "metadata": {}, + "execution_count": 8, + "metadata": { + "collapsed": false + }, "outputs": [], "source": [ "# Importing various packages\n", @@ -1644,72 +1495,131 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Ridge and Lasso Regression" + "\n", + "## Linking the regression analysis with a statistical interpretation\n", + "\n", + "Before we proceed, and to link with our discussions of Bayesian statistics to come, it is useful the derive the standard regression analysis equations using a statistical interpretation. This allows us also to derive quantities like the variance and other expectation values in a rather straightforward way. \n", + "\n", + "It is assumed that $\\varepsilon_i\n", + "\\sim \\mathcal{N}(0, \\sigma^2)$ and the $\\varepsilon_{i}$ are\n", + "independent, i.e.:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*} \n", + "\\mbox{Cov}(\\varepsilon_{i_1},\n", + "\\varepsilon_{i_2}) & = \\left\\{ \\begin{array}{lcc} \\sigma^2 & \\mbox{if}\n", + "& i_1 = i_2, \\\\ 0 & \\mbox{if} & i_1 \\not= i_2. \\end{array} \\right.\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The randomness of $\\varepsilon_i$ implies that\n", + "$\\mathbf{Y}_i$ is also a random variable. In particular,\n", + "$\\mathbf{Y}_i$ is normally distributed, because $\\varepsilon_i \\sim\n", + "\\mathcal{N}(0, \\sigma^2)$ and $\\mathbf{X}_{i,\\ast} \\, \\beta$ is a\n", + "non-random scalar. To specify the parameters of the distribution of\n", + "$\\mathbf{Y}_i$ we need to calculate its first two moments. \n", + "\n", + "## Expectation value and variance\n", + "\n", + "Its expectation equals:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*} \n", + "\\mathbb{E}(Y_i) & =\n", + "\\mathbb{E}(\\mathbf{X}_{i, \\ast} \\, \\beta) + \\mathbb{E}(\\varepsilon_i)\n", + "\\, \\, \\, = \\, \\, \\, \\mathbf{X}_{i, \\ast} \\, \\beta, \n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "while\n", + "its variance is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*} \\mbox{Var}(Y_i) & = \\mathbb{E} \\{ [Y_i\n", + "- \\mathbb{E}(Y_i)]^2 \\} \\, \\, \\, = \\, \\, \\, \\mathbb{E} ( Y_i^2 ) -\n", + "[\\mathbb{E}(Y_i)]^2 \\\\ & = \\mathbb{E} [ ( \\mathbf{X}_{i, \\ast} \\,\n", + "\\beta + \\varepsilon_i )^2] - ( \\mathbf{X}_{i, \\ast} \\, \\beta)^2 \\\\ &\n", + "= \\mathbb{E} [ ( \\mathbf{X}_{i, \\ast} \\, \\beta)^2 + 2 \\varepsilon_i\n", + "\\mathbf{X}_{i, \\ast} \\, \\beta + \\varepsilon_i^2 ] - ( \\mathbf{X}_{i,\n", + "\\ast} \\, \\beta)^2 \\\\ & = ( \\mathbf{X}_{i, \\ast} \\, \\beta)^2 + 2\n", + "\\mathbb{E}(\\varepsilon_i) \\mathbf{X}_{i, \\ast} \\, \\beta +\n", + "\\mathbb{E}(\\varepsilon_i^2 ) - ( \\mathbf{X}_{i, \\ast} \\, \\beta)^2 \n", + "\\\\ & = \\mathbb{E}(\\varepsilon_i^2 ) \\, \\, \\, = \\, \\, \\,\n", + "\\mbox{Var}(\\varepsilon_i) \\, \\, \\, = \\, \\, \\, \\sigma^2. \n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Hence, $Y_i \\sim \\mathcal{N}( \\mathbf{X}_{i, \\ast} \\, \\beta, \\sigma^2)$. \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## The singular value decompostion\n", + "\n", + "\n", + "A general\n", + "$m\\times n$ matrix $\\hat{A}$ can be written in terms of a diagonal\n", + "matrix $\\hat{D}$ of dimensionality $n\\times n$ and two orthognal\n", + "matrices $\\hat{U}$ and $\\hat{V}$, where the first has dimensionality\n", + "$m \\times m$ and the last dimensionality $n\\times n$. \n", + "We have then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\hat{A} = \\hat{U}\\hat{D}\\hat{V}^T\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Code examples for Ridge and Lasso Regression" ] }, { "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "X_train: (37, 1)\n", - "y_train: (37,)\n", - "X_test: (13, 1)\n", - "y_test: (13,)\n", - "------------------------------------\n", - "Ordinary Least Squares\n", - "Prediction Shape: (13,)\n", - "Coefficients: \n", - " [0.54090544]\n", - "Mean squared error: 4.92\n", - "Variance score: 0.11\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.7/site-packages/sklearn/linear_model/base.py:509: RuntimeWarning: internal gelsd driver lwork query error, required iwork dimension not returned. This is likely the result of LAPACK bug 0038, fixed in LAPACK 3.2.2 (released July 21, 2010). Falling back to 'gelss' driver.\n", - " linalg.lstsq(X, y)\n" - ] - }, - { - "data": { - "text/plain": [ - "
    " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "------------------------------------\n", - "Ridge Regression\n", - "Ridge Coefficient: [0.54089262]\n", - "Ridge Intercept: 4.6076494432587065\n", - "------------------------------------\n", - "Lasso\n", - "Lasso Coefficient: [0.54002825]\n", - "Lasso Intercept: 4.623208095009552\n" - ] - }, - { - "data": { - "text/plain": [ - "
    " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", @@ -1789,8 +1699,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## The singular value decompostion\n", - "How can we use the singular value decomposition to find the parameters $\\beta_j$? More details will come. We first note that a general $m\\times n$ matrix $\\hat{A}$ can be written in terms of a diagonal matrix $\\hat{\\Sigma}$ of dimensionality $n\\times n$ and two orthognal matrices $\\hat{U}$ and $\\hat{V}$, where the first has dimensionality $m \\times n$ and the last dimensionality $n\\times n$. We have then" + "## From standard regression to Ridge regressions\n", + "\n", + "One of the typical problems we encounter with linear regression, in particular \n", + "when the matrix $\\hat{X}$ (our so-called design matrix) is high-dimensional, \n", + "are problems with near singular or singular matrices. The column vectors of $\\hat{X}$ \n", + "may be linearly dependent, normally referred to as super-collinearity. \n", + "This means that the matrix may be rank deficient and it is basically impossible to \n", + "to model the data using linear regression. As an example, consider the matrix" ] }, { @@ -1798,7 +1714,18 @@ "metadata": {}, "source": [ "$$\n", - "\\hat{A} = \\hat{U}\\hat{\\Sigma}\\hat{V}\n", + "\\begin{align*}\n", + "\\mathbf{X} & = \\left[\n", + "\\begin{array}{rrr}\n", + "1 & -1 & 2\n", + "\\\\\n", + "1 & 0 & 1\n", + "\\\\\n", + "1 & 2 & -1\n", + "\\\\\n", + "1 & 1 & 0\n", + "\\end{array} \\right]\n", + "\\end{align*}\n", "$$" ] }, @@ -1806,39 +1733,414 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Add codes and discuss this in connection with lasso and ridge, show example where the standard inversion of a matrix fails and where SVD comes to rescue\n", + "The columns of $\\hat{X}$ are linearly dependent. We se this easily since the \n", + "the first column is the row-wise sum of the other two columns. The rank (more correct,\n", + "the column rank) of a matrix is the dimension of the space spanned by the\n", + "column vectors. Hence, the rank of $\\mathbf{X}$ is equal to the number\n", + "of linearly independent columns. In this particular case the matrix has rank 2.\n", + "\n", + "Super-collinearity of an $(n \\times p)$-dimensional design matrix $\\mathbf{X}$ implies\n", + "that the inverse of the matrix $\\hat{X}^T\\hat{x}$ (the matrix we needto invert to solve the linear regression equations) is non-invertible. If we have a square matrix that does not have an inverse, we say this matrix singular. The example here demonstrates this" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "\\hat{X} & = \\left[\n", + "\\begin{array}{rr}\n", + "1 & -1\n", + "\\\\\n", + "1 & -1\n", + "\\end{array} \\right].\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see easily that $\\mbox{det}(\\hat{X}) = x_{11} x_{22} - x_{12} x_{21} = 1 \\times (-1) - 1 \\times (-1) = 0$. Hence, $\\mathbf{X}$ is singular and its inverse is undefined.\n", + "This is equivalent to saying that the matrix $\\hat{X}$ has at least an eigenvalue which is zero.\n", + "\n", + "## Fixing the singularity\n", + "\n", + "If our design matrix $\\hat{X}$ which enters the linear regression problem" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\hat{\\beta} = (\\hat{X}^{T} \\hat{X})^{-1} \\hat{X}^{T} \\hat{y},\n", + "\\label{_auto1} \\tag{1}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "has linearly dependent column vectors, we will not be able to compute the inverse\n", + "of $\\hat{X}^T\\hat{X}$ and we cannot find the parameters (estimators) $\\beta_i$. \n", + "The estimators are only well-defined if $(\\hat{X}^{T}\\hat{X})^{-1}$ exits. \n", + "This is more likely to happen when the matrix $\\hat{X}$ is high-dimensional. In this case it is likely to encounter a situation where \n", + "the regression parameters $\\beta_i$ cannot be estimated.\n", + "\n", + "The *ad hoc* approach which was introduced in the 70s was simply to add a diagonal component to the matrix to invert, that is we change" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\hat{X}^{T} \\hat{X} \\rightarrow \\hat{X}^{T} \\hat{X}+\\lambda \\hat{I},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\hat{I}$ is the identity matrix.\n", "\n", "\n", - "## Lasso and Ridge regression\n", "\n", - "Discuss the mathematics here\n", + "## A second-order polynomial with Ridge and Lasso" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.linear_model import Ridge\n", + "from sklearn.metrics import r2_score\n", "\n", - "## Logistic regression\n", - "Add discussion about classification versus regression, show examples of more than two cases and why regression is not the best approach. Motivate for k-nearest neighbors\n", + "np.random.seed(4155)\n", "\n", - "Add examples on classification problems" + "n_samples = 100\n", + "\n", + "x = np.random.rand(n_samples,1)\n", + "y = 5*x*x + 0.1*np.random.rand(n_samples,1)\n", + "\n", + "# Centering x and y.\n", + "x_ = x - np.mean(x)\n", + "y_ = y - np.mean(y) # beta_0 = mean(y)\n", + "\n", + "X = np.c_[np.ones((n_samples,1)), x, x**2]\n", + "X_ = np.c_[x_, x_**2]\n", + "\n", + "\n", + "### 1.\n", + "lmb_values = [1e-4, 1e-3, 1e-2, 10, 1e2, 1e4]\n", + "num_values = len(lmb_values)\n", + "\n", + "## Ridge-regression of centered and not centered data\n", + "beta_ridge = np.zeros((3,num_values))\n", + "beta_ridge_centered = np.zeros((3,num_values))\n", + "\n", + "I3 = np.eye(3)\n", + "I2 = np.eye(2)\n", + "\n", + "for i,lmb in enumerate(lmb_values):\n", + " beta_ridge[:,i] = (np.linalg.inv( X.T @ X + lmb*I3) @ X.T @ y).flatten()\n", + " beta_ridge_centered[1:,i] = (np.linalg.inv( X_.T @ X_ + lmb*I2) @ X_.T @ y_).flatten()\n", + "\n", + "# sett beta_0 = np.mean(y)\n", + "beta_ridge_centered[0,:] = np.mean(y)\n", + "\n", + "## OLS (ordinary least squares) solution \n", + "beta_ls = np.linalg.inv( X.T @ X ) @ X.T @ y\n", + "\n", + "## Evaluate the models\n", + "pred_ls = X @ beta_ls\n", + "pred_ridge = X @ beta_ridge\n", + "pred_ridge_centered = X_ @ beta_ridge_centered[1:] + beta_ridge_centered[0,:]\n", + "\n", + "## Plot the results\n", + "\n", + "# Sorting\n", + "sort_ind = np.argsort(x[:,0])\n", + "\n", + "x_plot = x[sort_ind,0]\n", + "x_centered_plot = x_[sort_ind,0]\n", + "\n", + "pred_ls_plot = pred_ls[sort_ind,0]\n", + "pred_ridge_plot = pred_ridge[sort_ind,:]\n", + "pred_ridge_centered_plot = pred_ridge_centered[sort_ind,:]\n", + "\n", + "# Plott not centered\n", + "plt.plot(x_plot,pred_ls_plot,label='ls')\n", + "\n", + "for i in range(num_values):\n", + " plt.plot(x_plot,pred_ridge_plot[:,i],label='ridge, lmb=%g'%lmb_values[i])\n", + "\n", + "plt.plot(x,y,'ro')\n", + "\n", + "plt.title('linear regression on un-centered data')\n", + "plt.legend()\n", + "\n", + "# Plott centered\n", + "plt.figure()\n", + "\n", + "for i in range(num_values):\n", + " plt.plot(x_centered_plot,pred_ridge_centered_plot[:,i],label='ridge, lmb=%g'%lmb_values[i])\n", + "\n", + "plt.plot(x_,y,'ro')\n", + "\n", + "plt.title('linear regression on centered data')\n", + "plt.legend()\n", + "\n", + "\n", + "# 2.\n", + "\n", + "pred_ridge_scikit = np.zeros((n_samples,num_values))\n", + "for i,lmb in enumerate(lmb_values):\n", + " pred_ridge_scikit[:,i] = (Ridge(alpha=lmb,fit_intercept=False).fit(X,y).predict(X)).flatten() # fit_intercept=False fordi bias er allerede i X\n", + "\n", + "plt.figure()\n", + "\n", + "plt.plot(x_plot,pred_ls_plot,label='ls')\n", + "\n", + "for i in range(num_values):\n", + " plt.plot(x_plot,pred_ridge_scikit[sort_ind,i],label='scikit-ridge, lmb=%g'%lmb_values[i])\n", + "\n", + "plt.plot(x,y,'ro')\n", + "plt.legend()\n", + "plt.title('linear regression using scikit')\n", + "\n", + "plt.show()\n", + "\n", + "### R2-score of the results\n", + "for i in range(num_values):\n", + " print('lambda = %g'%lmb_values[i])\n", + " print('r2 for scikit: %g'%r2_score(y,pred_ridge_scikit[:,i]))\n", + " print('r2 for own code, not centered: %g'%r2_score(y,pred_ridge[:,i]))\n", + " print('r2 for own, centered: %g\\n'%r2_score(y,pred_ridge_centered[:,i]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Fitting vs. predicting when data is in the model class\n", + "\n", + "We start by considering the case\n", + "$f(x)=2x$.\n", + "\n", + "Then the data is clearly generated by a model that is contained within\n", + "all three model classes we are using to make predictions (linear\n", + "models, third order polynomials, and tenth order polynomials).\n", + "\n", + "Run the code for the following cases:\n", + "\n", + "1. For $f(x)=2x$ , $Ntrain=10$ and $\\sigma =0$ (noiseless case), train the three classes of models (linear, third-order polynomial, and tenth order polynomial) for a training set when $x \\in [0,1]$ . Make graphs comparing fits for different order of polynomials. Which model fits the data the best?\n", + "\n", + "2. Do you think that the data that has the least error on the training set will also make the best predictions? Why or why not? Can you try to discuss and formalize your intuition? What can go right and what can go wrong?\n", + "\n", + "3. Check your answer by seeing how well your fits predict newly generated test data (including on data outside the range you fit on, for example $x \\in [0,1.2]$ ) using the code below. How well do you do on points in the range of x where you trained the model? How about points outside the original training data set?\n", + "\n", + "4. Repeat the above for $f(x)=2x$ , $Ntrain=10$ , and $\\sigma=1$ . What changes?\n", + "\n", + "Repeat the exercises above for $f(x)=2x$ , $Ntrain=100$ , and $\\sigma=1$ . What changes?\n", + "Summarize what you have learned about the relationship between model complexity (number of parameters), goodness of fit on training data, and the ability to predict well.\n", + "\n", + "\n", + "## Fitting versus predicting when data is not in the model class\n", + "\n", + "Thus far, we have considered the case where the data is generated using a model contained in the model class. Now consider $f(x)=2x-10x^5+15x^{10}$ . Notice that the for linear and third-order polynomial the true model $f(x)$ is not contained in model class.\n", + "\n", + "1. Do better fits lead to better predictions?\n", + "\n", + "2. What is the relationship between the true model for generating the data and the model class that has the most predictive power? How is this related to the model complexity? How does this depend on the number of data points $Ntrain$ and $\\sigma$?\n", + "\n", + "Summarize what you think you learned about the relationship of knowing the true model class and predictive power.\n", + "\n", + "## The code" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import sklearn as sk\n", + "from sklearn import datasets, linear_model\n", + "from sklearn.preprocessing import PolynomialFeatures\n", + "\n", + "import matplotlib as mpl\n", + "from matplotlib import pyplot as plt\n", + "\n", + "%matplotlib notebook\n", + "\n", + "# The Training Data\n", + "\n", + "N_train=100\n", + "\n", + "sigma_train=1;\n", + "\n", + "# Train on integers\n", + "x=np.linspace(0.05,0.95,N_train)\n", + "# Draw random noise\n", + "s = sigma_train*np.random.randn(N_train)\n", + "\n", + "#linear\n", + "y=2*x+s\n", + "\n", + "#Tenth Order\n", + "#y=2*x-10*x**5+15*x**10+s\n", + "\n", + "p1=plt.plot(x,y, \"o\",ms=15, label='Training')\n", + "\n", + "#Linear Regression\n", + "# Create linear regression object\n", + "clf = linear_model.LinearRegression()\n", + "\n", + "# Train the model using the training sets\n", + "clf.fit(x[:, np.newaxis], y)\n", + "# The coefficients\n", + "\n", + "xplot=np.linspace(0.02,0.98,200)\n", + "linear_plot=plt.plot(xplot, clf.predict(xplot[:, np.newaxis]),label='Linear')\n", + "\n", + "#Polynomial Regression\n", + "\n", + "\n", + "poly3 = PolynomialFeatures(degree=3)\n", + "X = poly3.fit_transform(x[:,np.newaxis])\n", + "clf3 = linear_model.LinearRegression()\n", + "clf3.fit(X,y)\n", + "\n", + "\n", + "Xplot=poly3.fit_transform(xplot[:,np.newaxis])\n", + "poly3_plot=plt.plot(xplot, clf3.predict(Xplot), label='Poly 3')\n", + "\n", + "\n", + "\n", + "#poly5 = PolynomialFeatures(degree=5)\n", + "#X = poly5.fit_transform(x[:,np.newaxis])\n", + "#clf5 = linear_model.LinearRegression()\n", + "#clf5.fit(X,y)\n", + "\n", + "#Xplot=poly5.fit_transform(xplot[:,np.newaxis])\n", + "#plt.plot(xplot, clf5.predict(Xplot), 'r--',linewidth=1)\n", + "\n", + "poly10 = PolynomialFeatures(degree=10)\n", + "X = poly10.fit_transform(x[:,np.newaxis])\n", + "clf10 = linear_model.LinearRegression()\n", + "clf10.fit(X,y)\n", + "\n", + "Xplot=poly10.fit_transform(xplot[:,np.newaxis])\n", + "poly10_plot=plt.plot(xplot, clf10.predict(Xplot), label='Poly 10')\n", + "\n", + "axes = plt.gca()\n", + "axes.set_ylim([-7,7])\n", + "\n", + "handles, labels=axes.get_legend_handles_labels()\n", + "plt.legend(handles,labels, loc='lower center')\n", + "plt.xlabel(\"$x$\")\n", + "plt.ylabel(\"$y$\")\n", + "Title=\"$N=$\"+str(N_train)+\", $\\sigma=$\"+str(sigma_train)\n", + "plt.title(Title+\" (train)\")\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## Generating test data" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Generate Test Data\n", + "\n", + "#Number of test data\n", + "N_test=20\n", + "\n", + "sigma_test=sigma_train\n", + "\n", + "max_x=1.2\n", + "x_test=max_x*np.random.random(N_test)\n", + "# Draw random noise\n", + "s_test = sigma_test*np.random.randn(N_test)\n", + "\n", + "#Linear\n", + "y_test=2*x_test+s_test\n", + "#Tenth order\n", + "#y_test=2*x_test-10*x_test**5+15*x_test**10+s_test\n", + "\n", + "#Make design matrices for prediction\n", + "x_plot=np.linspace(0,max_x, 200)\n", + "X3 = poly3.fit_transform(x_plot[:,np.newaxis])\n", + "X10 = poly10.fit_transform(x_plot[:,np.newaxis])\n", + "\n", + "%matplotlib notebook\n", + "\n", + "fig = plt.figure() \n", + "p1=plt.plot(x_test,y_test.transpose(), 'o', ms=12, label='data')\n", + "p2=plt.plot(x_plot,clf.predict(x_plot[:,np.newaxis]), label='linear')\n", + "p3=plt.plot(x_plot,clf3.predict(X3), label='3rd order')\n", + "p10=plt.plot(x_plot,clf10.predict(X10), label='10th order')\n", + "\n", + "\n", + "plt.legend(loc=2)\n", + "plt.xlabel('$x$')\n", + "plt.ylabel('$y$')\n", + "plt.legend(loc='best')\n", + "plt.title(Title+\" (pred.)\")\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n", + "#Linear Filename\n", + "#filename_test=Title+\"pred-linear.pdf\"\n", + "#Tenth Order Filename\n", + "#filename_test=Title+\"pred-o10.pdf\"\n", + "#plt.savefig(filename_test)\n", + "#plt.ylim((-6,12))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lasso regression\n", + "\n", + "\n", + "## Logistic regression" ] } ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.0" - } - }, + "metadata": {}, "nbformat": 4, "nbformat_minor": 2 } diff --git a/doc/pub/Regression/ipynb/ipynb-Regression-src.tar.gz b/doc/pub/Regression/ipynb/ipynb-Regression-src.tar.gz index 511f8a4c0b45a416add0774da1af965b16159152..11e5676115c2089368680876bdad35a3ef51af6a 100644 GIT binary patch literal 211 zcmb2|=3o&1JRzEa`R)0$Sxkl^ZHd?8j_zzyoY}cc?~1E9>%@BwDT^lmQ!(p&aHlq1 zJxAo1TqxS-C=dJ%!Z0B0{*>O*)-RaY-^kaF1k_u-_*r&WL zJNfiY@`^wE_@y%!pMJbq<$LXilbyVKZ*2RT`r^jEH^uLqb?>(V12XubUdQ0K LVCDh_4F(1Pob+c8 literal 211 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 (GsQ7K#dMdwBKyCG~{wF31M#ye~4dD)bT zybyh_q3)?)bGC^#t1pfAekRDiMf5TRjeL%C)Ne>3G9T+J)Rt^V9WU=NZD=N!TiP5= zqtZfA%9F4bDH|Y2PgDn}O%4EKz^#2)7Mf|7k{{+JHSf}cLGwG;QgdpYr~|ft`8CZ> zY?+K8)Q#0{!N_r`EP#Qb*xBE;j-*Yit9MoXLZeDUFPP-lDLY!1>8GB?CH39DXcCk2 zBF~mwu5T$q)e{^@$P=YlC*pngbvh5$Mz0*Sg(Y3dO6rotdzjggpl)c{pT&FcLMz1{ zisu0OAjZ|h1Q`NTnndhc)x0BFsm9asLtV&jdjvJ}lWB>rR3MfzCRaX{E4od(921Za z8YvKas5s+K#k?$s+E6@MR)Zh0t#yHw7AnmiXk2+Ol&g_yQqzpUD(DO|vOL~JR)K+$ z@f+{IYH^!7^u9(mY~&MnM~-)n<-7>ZjgqRubasI_V8c z5W|f0N>qA&jMt=y{o8W^~tq3O*UEkWnq zY$Xq+ITb9sS$&unD;L*7YGXLFOpnE>ew=smUF27{XahRvvsJJoV~hPDMMgtMqK!|c zi(kPSV?JDl3pPArJ20q7PDP4msMLz1;~Ru~;Q zE52U!*I2uKzE){}pL&;GzkYzFKUD7VGrhbNW=>|V_4IFYWmd4?KLmY%s|;#xmFBa# ziKkzOP6MAjPXD#qAsrf#OtRWSu7>H{^@W29Kg=L(4Bv*}RDWArfn}xQQ(pls!>j`; ztW324oqDSvxwLX{7z-S+#^zi)omp;A8NzVuA7T@OGp7UB%Ajn{ky3~)kKNyuV@LNi zQE<~VVFUMvJKr7pm&Z{AAbxw+s7>E(A)jc!u?csq6|fvo2$COA(2$oPh7Zh6%^x0& z-MfBvT_dz!V-K8FfBbpwCl*LusU$lQe<2gsXgI=Kd2_#-`YcKB8vPG1&6B$M9hwXX z;MGT9QML9qCuIllBCu$Z>avjnNZG!UDvpkBUr8=fR#FuN78wT%$FGR{zet=^SAbQ5 zgY~-vI}Zo1m>4fF4-Y$!7$>)=s01e~fQ?m@mraQD|38BAbHiiOR3I7Y zWMeFtZP$zY6V7uGAxItsV>t~oUCseu_?A7v!SpRcXB{ELYF@mlJkJ;%S`<+(g3BZj zN~5WDdViL5LI>-M`iK#N=(7bn*mZDDc21j4l7Ay)Hj^bsCu}&tkO>%smWQWI z800DWN%@7k##My@jkhsTjA^>06{O>^O&d=bMH%lR=rOADf%K?H&9q*~STI|T+x444!97k#n@nJDn-Bf0C>ixi11ORCe?9@~IUspCTcC+(s* zCq&}bZ7-V~_Z=8PhyIm*W->YLJsmy#ofRJs`AHczI^$^#!-*mN4#=XQDkG+-@~kS# z$}#_j3?&M6f*IqTY1O=DG&et3DaT+;KubEkO1a8U^kz`x_5g)bGxEAO_=O;JaNPO+ zeUT2;-OL4IZB!)S zLF2;%6L%sq;p+REIKjB&(%CB)+clr}gI{X`Q&D=eKr;Mh$85~@nh&cWn8nBLCM<^i zCQgIC`CHiZPeu(pNf;*7UqZWBU1aK z>}IG%1o;~GUQrP2Tr9Be;UI`2amk!yrBElqRNo6#zySNN0-w6i%UO4~uMuv!9H*LT zv%#N2?BBbFuF| z!~3tKSlOrv&>3mK_8mpev7P*(kn&u`pTG~s2%wlgg>yDGRFHjRrOu^7-yqHQbDC1& VC83FsczC$D00>l65=xQ?{{tE6EII%H delta 186431 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