From 2b876efff6d007d177fbfe7cbc18891c1f606092 Mon Sep 17 00:00:00 2001
From: Laurent Modolo <laurent.modolo@ens-lyon.fr>
Date: Mon, 16 Oct 2023 09:48:19 +0200
Subject: [PATCH] update M1_biosciences_dimension_reduction

---
 M1_biosciences_dimension_reduction/PCA.tex    | 100 ++++++++++++------
 .../annexes.tex                               |  99 +++++++++++++++++
 .../figures/ortho_proj.pdf                    | Bin 0 -> 16627 bytes
 M1_biosciences_dimension_reduction/main.tex   |   7 +-
 4 files changed, 175 insertions(+), 31 deletions(-)
 create mode 100644 M1_biosciences_dimension_reduction/figures/ortho_proj.pdf

diff --git a/M1_biosciences_dimension_reduction/PCA.tex b/M1_biosciences_dimension_reduction/PCA.tex
index a2a3df4..f442fb3 100644
--- a/M1_biosciences_dimension_reduction/PCA.tex
+++ b/M1_biosciences_dimension_reduction/PCA.tex
@@ -249,8 +249,8 @@ $$
 		\begin{itemize}
 	        \item Using trigonometry properties:
 	        $$
-	        \operatorname{cos} \theta = \|\ybf\|_2 \Big/ \|\xbf\|_2
-	        $$
+	        \operatorname{cos} \theta = \frac{\|\ybf_{proj}\|_2}{ \|\ybf\|_2} = \lambda \frac{\|\xbf\|_2 }{\|\ybf\|_2}
+	       $$
 	        \item The dot product is the length of $\xbf$ times the length of the ortho. projection of $\ybf$ 
 	        \item Orthogonality : 
 	        $$
@@ -500,9 +500,9 @@ I_T(\Xbf) & = & \frac{1}{n} \sum_{i=1}^n \sum_{j=1}^p (x_i^j - \overline{x}^j)^2
     $$
     \item This operation resumes to a linear transform of $\xbf_i$ (old) to obtain $\zbf$ (new)
     $$
-    \zbf_{i1} = \widetilde{\xbf}_{i,c} \vbf_1'
+    \zbf_{i1} = \widetilde{\xbf}_{i,c} \vbf_1
     $$
-\item How to determine $\vbf_1=(v_{11},v_{12})$ ? 
+\item How to determine $\vbf_1=\left[ \begin{array}{c}   v_{11} \\ v_{12} \end{array} \right]_{2 \times 1}$ ? 
 \end{itemize}
 	\column{.4\textwidth}
 		\begin{center}
@@ -542,7 +542,7 @@ I_T(\Xbf) & = & \frac{1}{n} \sum_{i=1}^n \sum_{j=1}^p (x_i^j - \overline{x}^j)^2
     \begin{eqnarray*}
     \zbf_{1} &=& v_{11} \widetilde{\xbf}_c^1 + v_{12} \widetilde{\xbf}_c^2 \\
     &=& \left[ \begin{array}{cc} \widetilde{\xbf}^1_c & \widetilde{\xbf}_c^2  \end{array} \right]_{n \times 2} \left[ \begin{array}{c}   v_{11} \\ v_{12} \end{array} \right]_{2 \times 1}   \\
-    \zbf_{1} &=& \widetilde{\Xbf}_c \vbf_1'
+    \zbf_{1} &=& \widetilde{\Xbf}_c \vbf_1
     \end{eqnarray*}
     \item Equation of a line with slope $\vbf_1$
     \item Centered data so no intercept
@@ -561,7 +561,7 @@ I_T(\Xbf) & = & \frac{1}{n} \sum_{i=1}^n \sum_{j=1}^p (x_i^j - \overline{x}^j)^2
 \begin{itemize}
     \item First axis carries the biggest empirical variance
     \begin{eqnarray*}
-    \operatorname{var}(\zbf_{1}) &=& \operatorname{var} \Big(\widetilde{\Xbf}_c \vbf_1' \Big) \\
+    \operatorname{var}(\zbf_{1}) &=& \operatorname{var} \Big(\widetilde{\Xbf}_c \vbf_1 \Big) \\
     &=& \operatorname{var} \Big( v_{11} \widetilde{\xbf}_c^1 + v_{12} \widetilde{\xbf}_c^2 \Big) \\
     &=& v_{11}^2 \operatorname{var} \big(\widetilde{\xbf}_c^1\big) + v_{12}^2 \operatorname{var} \big(\widetilde{\xbf}_c^2\big) + 2 v_{11} v_{12} \operatorname{c}(\widetilde{\xbf}_c^1,\widetilde{\xbf}_c^2)  
     \end{eqnarray*}
@@ -586,7 +586,7 @@ I_T(\Xbf) & = & \frac{1}{n} \sum_{i=1}^n \sum_{j=1}^p (x_i^j - \overline{x}^j)^2
     \begin{eqnarray*}
     \operatorname{var}(\zbf_{1}) &=& v_{11}^2 + v_{12}^2 + 2 v_{11} v_{12} \times  \operatorname{r}(\widetilde{\xbf}_c^1,\widetilde{\xbf}_c^2)  
     \end{eqnarray*}
-    \item Constraint of ortho-normality: $\|\vbf_1\|^2_2=1$ 
+    \item Constraint for a normed basis: $\|\vbf_1\|^2_2=1$ 
     \item This ensures that the new basis is of unitary scale, so that the information carried by the new axes can be compared
 \end{itemize}
 	\column{.4\textwidth}
@@ -603,9 +603,9 @@ I_T(\Xbf) & = & \frac{1}{n} \sum_{i=1}^n \sum_{j=1}^p (x_i^j - \overline{x}^j)^2
 \begin{itemize}
     \item To find the first axis, find coefficients $\mathbf{v}_1$, s.t.
     \begin{eqnarray*}
-    \max_{\vbf_1, \|\vbf_1\|_2^2=1 } \Big\{ \operatorname{var}(\zbf_{1}) \Big\} &=& \max_{\vbf_1, \|\vbf_1\|_2^2=1 } \Big\{ \operatorname{var}( \Xbf_c \vbf_1' ) \Big\}\\
-    &=& \max_{\vbf_1, \|\vbf_1\|_2^2=1 } \Big\{  \vbf_1' \Big( \Xbf_c'\Xbf_c  \Big) \vbf_1\Big\} \\
-    &=& \max_{\vbf_1, \|\vbf_1\|_2^2=1 }\Big\{  \vbf_1' \Sbf \vbf_1\Big\}
+    \max_{\vbf_1, \|\vbf_1\|_2^2=1 } \Big\{ \operatorname{var}(\zbf_{1}) \Big\} &=& \max_{\vbf_1, \|\vbf_1\|_2^2=1 } \Big\{ \operatorname{var}( \Xbf_c \vbf_1 ) \Big\}\\
+    &=& \max_{\vbf_1, \|\vbf_1\|_2^2=1 } \Big\{  \vbf_1 \Big( \Xbf_c'\Xbf_c  \Big) \vbf_1'\Big\} \\
+    &=& \max_{\vbf_1, \|\vbf_1\|_2^2=1 }\Big\{  \vbf_1 \Sbf \vbf_1'\Big\}
     \end{eqnarray*}
     \item The solution of this optimization problem is explicit 
     \begin{eqnarray*}
@@ -619,18 +619,18 @@ I_T(\Xbf) & = & \frac{1}{n} \sum_{i=1}^n \sum_{j=1}^p (x_i^j - \overline{x}^j)^2
 \begin{frame}
 \frametitle{normed PCA as an optimization problem}
 \begin{itemize}
-    \item To find the first axis, find coefficients $\mathbf{v}_1$, s.t.
+    \item To find the first axis, find coefficients $\widetilde{\vbf}_1$, s.t.
     \begin{eqnarray*}
-    \max_{\vbf_1, \|\vbf_1\|_2^2=1 } \Big\{ \operatorname{var}(\zbf_{1}) \Big\} &=& \max_{\vbf_1, \|\vbf_1\|_2^2=1 } \Big\{ \operatorname{var}( \widetilde{\Xbf}_c \vbf_1' ) \Big\}\\
-    &=& \max_{\vbf_1, \|\vbf_1\|_2^2=1 } \Big\{  \vbf_1' \Big( \widetilde{\Xbf}_c'\widetilde{\Xbf}_c  \Big) \vbf_1\Big\} \\
-    &=& \max_{\vbf_1, \|\vbf_1\|_2^2=1 }\Big\{  \vbf_1' \Rbf \vbf_1\Big\}
+    \max_{\widetilde{\vbf}_1, \|\widetilde{\vbf}_1\|_2^2=1 } \Big\{ \operatorname{var}(\zbf_{1}) \Big\} &=& \max_{\widetilde{\vbf}_1, \|\widetilde{\vbf}_1\|_2^2=1 } \Big\{ \operatorname{var}( \widetilde{\Xbf}_c \widetilde{\vbf}_1 ) \Big\}\\
+    &=& \max_{\widetilde{\vbf}_1, \|\widetilde{\vbf}_1\|_2^2=1 } \Big\{  \widetilde{\vbf}_1 \Big( \widetilde{\Xbf}_c'\widetilde{\Xbf}_c  \Big) \widetilde{\vbf}_1'\Big\} \\
+    &=& \max_{\widetilde{\vbf}_1, \|\widetilde{\vbf}_1\|_2^2=1 }\Big\{  \widetilde{\vbf}_1 \Rbf \widetilde{\vbf}_1'\Big\}
     \end{eqnarray*}
     \item The solution of this optimization problem is explicit 
     \begin{eqnarray*}
-    \vbf_1'\vbf_1 &=& 1 \\
-    \Rbf \vbf_1 &=& \lambda_1 \vbf_1
+    \widetilde{\vbf}_1'\widetilde{\vbf}_1 &=& 1 \\
+    \Rbf \widetilde{\vbf}_1 &=& \lambda_1 \widetilde{\vbf}_1
     \end{eqnarray*}
-    \item $\vbf_1$ (resp $\lambda_1$) is the first eigenvector (resp eigenvalue) of the \textbf{correlation} matrix 
+    \item $\widetilde{\vbf}_1$ (resp $\lambda_1$) is the first eigenvector (resp eigenvalue) of the \textbf{correlation} matrix 
 \end{itemize}
 \end{frame}
 
@@ -642,7 +642,7 @@ I_T(\Xbf) & = & \frac{1}{n} \sum_{i=1}^n \sum_{j=1}^p (x_i^j - \overline{x}^j)^2
 \begin{itemize}
     \item $\Sbf$ contains the directions of maximal variance of the data
     \item $\mathbf{v}_1 \perp \mathbf{v}_2$ and are normed (unit variance) 
-    \item $(\lambda_1^2,\lambda_2^2)$ quantify the amount of variance in each direction
+    \item $(\lambda_1,\lambda_2)$ quantify the amount of variance in each direction
     \item The eigen decomposition provides the best representation of the data in terms of variance
     \item Its the linear transform that makes the new set of coordinates diagonal
     \end{itemize}
@@ -661,14 +661,14 @@ I_T(\Xbf) & = & \frac{1}{n} \sum_{i=1}^n \sum_{j=1}^p (x_i^j - \overline{x}^j)^2
 \begin{itemize}
     \item Eigenvalues quantify the inertia of the dataset:
     $$
-    I_T(X) = \sum_{k=1} I_k(X) = \sum_{k=1}^K \lambda_k^2
+    I_T(X) = \sum_{k=1} I_k(X) = \sum_{k=1}^K \lambda_k
     $$
     \item Percent of explained variance:
     $$
-    \text{Contrib}_k = \frac{\lambda_k^2}{\sum_{\ell=1}^K \lambda_\ell^2}
+    \text{Contrib}_k = \frac{\lambda_k}{\sum_{\ell=1}^K \lambda_\ell}
     $$
     $$
-    \text{Contrib}_{1:k} = \frac{\sum_{h=1}^k\lambda_h^2}{\sum_{\ell=1}^K \lambda_\ell^2}
+    \text{Contrib}_{1:k} = \frac{\sum_{h=1}^k\lambda_h}{\sum_{\ell=1}^K \lambda_\ell}
     $$
     \end{itemize}
 	\column{.45\textwidth}
@@ -683,7 +683,7 @@ I_T(\Xbf) & = & \frac{1}{n} \sum_{i=1}^n \sum_{j=1}^p (x_i^j - \overline{x}^j)^2
 \frametitle{Representation of individuals in the new coordinates}
 \begin{center}
     \includegraphics[scale=0.6]{./figures/projection_individuals.pdf} \\
-    The new coordinates for individuals are $\vbf_k'  \big( \xbf_i- \overline{\xbf}\big)$
+    The new coordinates for individuals are $\big( \xbf_i- \overline{\xbf}\big)\vbf_k$
 
 \end{center}
 \end{frame}
@@ -699,7 +699,7 @@ I_T(\Xbf) & = & \frac{1}{n} \sum_{i=1}^n \sum_{j=1}^p (x_i^j - \overline{x}^j)^2
     \item From 2D to 2D, there is no dimension reduction !
     \item The approach is generalized from $p$ variables to $K$ principal components
     $$
-    \zbf_{k} = \sum_{j=1}^p v_{kj} \widetilde{\xbf}_c^j = \Xbf_c \mathbf{v}_1'
+    \zbf_{k} = \sum_{j=1}^p v_{kj} \widetilde{\xbf}_c^j = \Xbf_c \mathbf{v}_1
     $$
     \item Intuition: if $v_{kj}$ is high, variable $j$ highly contributes to principal component $\zbf_k$
     \item From $p$ to $K(=2)$ the information was compressed
@@ -707,6 +707,46 @@ I_T(\Xbf) & = & \frac{1}{n} \sum_{i=1}^n \sum_{j=1}^p (x_i^j - \overline{x}^j)^2
 \end{frame}
 
 
+\begin{frame}
+	\frametitle{General Case with $K$ principal components}
+	\begin{itemize}
+	    \item $\Vbf_{[p \times K]} = \big[ \vbf_1, \hdots,\vbf_K \big]$, the eigen vectors of the covariance matrix	
+		$$
+		\Sbf_{p \times p} = \frac{1}{n} \Xbf'\Xbf = \frac{1}{n}\sum_{k=1}^K \lambda_k \vbf_k \vbf_k' 
+		$$
+		\item $\Ubf_{[n \times K]} = \big[ \ubf_1, \hdots,\ubf_K \big]$, the eigen vectors of the Gram matrix
+		$$
+		\Gbf_{n \times n} = \frac{1}{p} \Xbf \Xbf' = \frac{1}{p} \sum_{k=1}^K \lambda_k \ubf_k \ubf_k' 
+		$$
+		
+		\item Then we have
+		\begin{eqnarray*}	
+			\big( \Xbf \Xbf' \big) \ubf_k &=&  \sqrt{\lambda_k} \Xbf \vbf_k = \lambda_k \ubf_k \\
+			\big( \Xbf' \Xbf \big) \vbf_k &=& \sqrt{\lambda_k} \Xbf' \ubf_k  = \lambda_k \vbf_k
+		\end{eqnarray*}
+		
+	\end{itemize}
+\end{frame}
+
+
+\begin{frame}
+\frametitle{Low-rank approximation of X}
+\begin{itemize}
+	\item The rank of a matrix ($r^{*}$) is the number of linearly independent columns (unknown in practice) 
+	\item From a statistical perspective, it is the number of independent coordinates that can describe a dataset
+    \item The initial dataset can be rewritten such that 	
+	$$
+	\Xbf = \Ubf_{n \times r^{*}} \Vbf_{r^{*} \times p}' = \sum_{k=1}^{r^{*}} \sqrt{\lambda_k} \ubf_k \vbf_k'
+	$$
+	\item Since the rank is unknown, we select a number of components $K$, and then:
+	$$
+	\Xbf \simeq \Ubf_{n \times K} \Vbf_{K \times p}' = \sum_{k=1}^{K} \sqrt{\lambda_k} \ubf_k \vbf_k'
+	$$
+	\item It is called the low-rank approximation of $\Xbf$
+\end{itemize}
+\end{frame}
+
+
 
 \begin{frame}
 \frametitle{PCA on the complete ER dataset - 1}
@@ -755,7 +795,7 @@ I_T(\Xbf) & = & \frac{1}{n} \sum_{i=1}^n \sum_{j=1}^p (x_i^j - \overline{x}^j)^2
     \item Geometrically, $\mathbf{x}_i-\overline{\mathbf{x}}$ is colinear to $\mathbf{z}_k$
     \item Compute 
     $$
-    \cos^2 \theta( \mathbf{x}_i-\overline{\mathbf{x}}, \mathbf{z}_k) = \frac{\Big( \vbf_k'  \big( \xbf_i- \overline{\xbf}\big) \Big)^2}{\|\xbf_i- \overline{\xbf}\|^2\|\vbf_k\|^2}
+    \cos^2 \theta( \mathbf{x}_i-\overline{\mathbf{x}}, \mathbf{z}_k) = \frac{\Big( \big( \xbf_i- \overline{\xbf}\big)\vbf_k \Big)^2}{\|\xbf_i- \overline{\xbf}\|^2\|\vbf_k\|^2}
     $$
     \end{itemize}
 	\column{.45\textwidth}
@@ -769,7 +809,7 @@ I_T(\Xbf) & = & \frac{1}{n} \sum_{i=1}^n \sum_{j=1}^p (x_i^j - \overline{x}^j)^2
 \frametitle{Contribution of individuals to the representation}
 The contribution of a $\mathbf{x}_i$ is the proportion of carried by $\mathbf{x}_i$
 $$
-\operatorname{contr}(\xbf_i,\mathbf{z}_k) = \frac{\Big( \vbf_k'  \big( \xbf_i- \overline{\xbf}\big) \Big)^2}{n \lambda_k}
+\operatorname{contr}(\xbf_i,\mathbf{z}_k) = \frac{\Big(  \big( \xbf_i- \overline{\xbf}\big)\vbf_k \Big)^2}{n \lambda_k}
 $$
 \begin{center}
     \includegraphics[scale=0.3]{./figures/outlier_contribution.pdf}
@@ -788,7 +828,7 @@ $$
 	                                    &  \ddots & \\
 	\operatorname{r}(\xbf^j,\xbf^{j'})                                   &  \hdots     &\operatorname{r}(\xbf^p,\xbf^{p})
 	\end{array}
-	\right] =\frac{1}{n} \widetilde{\Xbf}_c' \widetilde{\Xbf}_c = \sum_{k=1}^K \lambda_k^2 \vbf_k \vbf_k'
+	\right] =\frac{1}{n} \widetilde{\Xbf}_c' \widetilde{\Xbf}_c = \sum_{k=1}^K \lambda_k \vbf_k \vbf_k'
     $$	
     \item Get $K$ new uncorrelated (non redundant) variables $\Zbf=\left[ \begin{array}{c} \zbf^1, \hdots,  \zbf^K\end{array}\right]$
 \end{itemize}
@@ -799,19 +839,19 @@ $$
 \begin{columns}[c]
 	\column{.5\textwidth}
 \begin{itemize}
-	\item Components are independent of variance with $S^2( \zbf_k) = \lambda_k^2$
+	\item Components are independent of variance with $\operatorname{var}( \zbf_k) = \lambda_k$
 	$$
 	\Sbf_Z = \left[ 
 	\begin{array}{ccc} 
-	\lambda_1^2 &         & 0\\ 
+	\lambda_1 &         & 0\\ 
 	            &  \ddots & \\
-	     0       &         & \lambda_K^2
+	     0       &         & \lambda_K
 	\end{array}
 	\right]
 	$$	
 	\item Contribution of variables to axis:
 	\begin{eqnarray*}	
-	\operatorname{c}(\xbf^j,\zbf_k) &=& (\xbf^{j})' \ubf_k = \lambda_k^2 v_{jk} \\
+	\operatorname{c}(\xbf^j,\zbf_k) &=& (\xbf^{j})' \ubf_k = \lambda_k v_{jk} \\
 								&=& \operatorname{r}(\xbf^j,\zbf_k) \, \text{for normed PCA} \\
 	\operatorname{c}(\Xbf,\Zbf)     &=& \Sbf_Z \Vbf								
 	\end{eqnarray*}		
diff --git a/M1_biosciences_dimension_reduction/annexes.tex b/M1_biosciences_dimension_reduction/annexes.tex
index 67f0a12..6c2a27a 100644
--- a/M1_biosciences_dimension_reduction/annexes.tex
+++ b/M1_biosciences_dimension_reduction/annexes.tex
@@ -14,6 +14,105 @@
 	\end{itemize}
 \end{frame}
 
+\section[Principal Components]{Principal Components and orthogonal subspaces}
+
+\begin{frame}
+\frametitle{Decomposition of $\mathbb{R}^p$ into orthogonal subspaces}
+\begin{itemize}
+	\item Let us consider $p$ orthogonal subspaces $\big( E_k \big)_{k=1,p}$ each subspace spanned by an individual axis (dim 1): 
+	$$
+ \mathbb{R}^p = \bigoplus_{k=1}^p E_k,
+	$$
+	\item Orthogonal projection of $X_i \in \mathbb{R}^p$ on a subspace $E_k=\operatorname{vect}(Z_k)$
+	$$
+	\operatorname{Proj}_{E_k}(X_i)  = X_i V_k \in \mathbb{R}
+	$$
+	\item The inertia of $X$ wrt $E_k$ measures the proximity of $E_k$ from $X$
+	$$
+	I_{E_k}(X)=\frac{1}{n} \sum_{i=1}^n \|X_i-\operatorname{Proj}_{E_k}(X_i)\|_2^2
+	$$
+	\item Let $E_k^\perp$ denotes the orthogonal complement of subspace $E_k$.
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Pythagore - Huyguens Theorem}
+		\begin{center}
+			\includegraphics[scale=0.5]{./figures/ortho_proj.pdf}
+		\end{center}
+			$$
+I_T(X) = I_{E}(X) + I_{E^\perp}(X) = I \Big( \operatorname{Proj}_{E}(X) \Big) + I \Big( \operatorname{Proj}_{k^\perp}(X) \Big)
+$$				
+
+\end{frame}
+
+
+\begin{frame}
+\frametitle{Construction of principal components (PC)}
+\begin{itemize}
+	\item Resume the data $X$ by a new dataset $Z_{n \times K}$, $K \leq p$ and $K$ fixed
+	\item The new axis spans the 1-dim subspaces $\Big( E_k=\operatorname{vect}(Z_k) \Big)_k$
+	$$
+	\forall k,k', \quad E_k \perp E_{k'}
+	$$
+	\item $Z=[Z_1, \hdots, Z_K]$ constitute independent PCs (easy interpretation)
+	\item $Z_k \in \mathbb{R}^n$ is defined as a linear combination of the variables
+	$$
+	Z_{k} = X V_k, \quad V_k=\big(V_{jk} \big)_j \in \mathbb{R}^p
+	$$
+	\item $V_{p \times K} = [V_1,\hdots, V_K]$ is the matrix of contributions (weights) of variables $\big( X^j \big)_j$
+	\begin{eqnarray*}
+	Z_{n \times K}   &=& X_{n \times p}V_{p \times K}
+	\end{eqnarray*}
+\end{itemize}
+\end{frame}
+
+
+
+\begin{frame}
+\frametitle{Decomposition of the Inertia on the PCs}
+	\begin{eqnarray*}
+		I_T(X) & = & \frac{1}{n} \sum_{i=1}^n \sum_{k=1}^p \|X_i-\operatorname{Proj}_{E_k}(X_i) +\operatorname{Proj}_{E_k}(X_i)\|^2 \\
+		       & = & \frac{1}{n} \sum_{i=1}^n \sum_{k=1}^p \|X_i-\operatorname{Proj}_{E_k}(X_i)\|^2 + \frac{1}{n} \sum_{i=1}^n \sum_{k=1}^p \|\operatorname{Proj}_{E_k}(X_i)\|^2 \\
+   		       & = & \frac{1}{n} \sum_{i=1}^n \sum_{k=1}^p \|X_i-Z_{ik}\|^2 + \frac{1}{n} \sum_{i=1}^n \sum_{k=1}^p \|Z_{ik}\|^2 \\
+		       & = & \frac{1}{n} \sum_{i=1}^n \sum_{k=1}^p \|X_i-X_iV_k\|^2 + \frac{1}{n} \sum_{i=1}^n \sum_{k=1}^p \|X_iV_k\|^2 \\
+	\end{eqnarray*}				
+\end{frame}
+
+\begin{frame}
+\frametitle{Orthogonal Components with maximal variance}
+\begin{itemize}
+	\item We want to resume the variability of the dataset
+	\item Find the PCs that explain the maximum of the observed variance:
+	$$
+\frac{1}{n} \sum_{i=1}^n \| \operatorname{Proj}_{E_k}(X_i) \|^2 =	\frac{1}{n} \sum_{i=1}^n \|Z_{ik}\|^2 = \frac{1}{n} V_k' \Big(X'X\Big)V_k = \frac{1}{n} V_k' \Sigma V_k
+	$$
+	\item The optimization scheme is iterative, and for the $k$th PC:
+	$$
+	\widehat{V}_k = \underset{V \in \mathbb{R}^p, \|V\|^2_2=1}{\arg \max} \Big( \frac{1}{n} V' X'X V \Big) \quad \text{with } Z_k \perp (Z_1,\hdots, Z_{k-1})
+	$$
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Constrained optimization}
+\begin{itemize}
+	\item To account for the orthogonality constraint, we introduce the Lagrange multipliers
+	\begin{eqnarray*}
+	\mathcal{L}(V,\mu) &=& \frac{1}{n} V' X'X V - \mu \Big( V'V -1  \Big) \\
+	\frac{\partial L}{\partial \mu} & =& V'V -1 \\
+	\frac{\partial L}{\partial V} & =& 2 X'XV - \mu V
+	\end{eqnarray*}				
+	\item Which gives the following solution
+	\begin{eqnarray*}
+		V'V & =& 1 \\
+		X'X V & =& \mu V 
+	\end{eqnarray*}				
+	\item The optimal solution is provided by the eigenvectors of the covariance matrix $\Sigma$
+\end{itemize}
+\end{frame}
+
+
 
 \begin{frame}
 	\frametitle{Spectral decomposition of symmetric real matrices}
diff --git a/M1_biosciences_dimension_reduction/figures/ortho_proj.pdf b/M1_biosciences_dimension_reduction/figures/ortho_proj.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..2882f1e70a99d195aca059374ca7430b71922d11
GIT binary patch
literal 16627
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
Sun!H*j4e#KR8?L5-M9eJUS383

literal 0
HcmV?d00001

diff --git a/M1_biosciences_dimension_reduction/main.tex b/M1_biosciences_dimension_reduction/main.tex
index 125279e..c06ce03 100644
--- a/M1_biosciences_dimension_reduction/main.tex
+++ b/M1_biosciences_dimension_reduction/main.tex
@@ -199,9 +199,10 @@
 \include{PCA}
 \include{perspectives}
 
-\begin{frame}{References}
+\begin{frame}{Useful links}
 \begin{itemize}
     \item \url{https://towardsdatascience.com/}
+    \item \href{https://pca4ds.github.io/}{PCA for datascience}
     \item \href{https://www.youtube.com/watch?v=LyGKycYT2v0}{Link to a tuto on dot products}
     \item \href{https://en.wikipedia.org/wiki/Transformation_matrix}{Wiki for Linear Transforms}
     \item \href{http://cazencott.info/dotclear/public/lectures/IntroML_Azencott.pdf}{Book for the introduction to machine learning (C.-A. Azencott)}
@@ -210,6 +211,9 @@
     \item PCA in general \url{http://factominer.free.fr/index_fr.html}
 \end{itemize}
 
+\end{frame}
+
+\begin{frame}{References}
 \begin{small}
 \bibliographystyle{plain}
 \bibliography{biblio}							
@@ -217,6 +221,7 @@
 \end{small}
 \end{frame}
 
+
 \newpage
 \include{annexes}
 
-- 
GitLab