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